如何解决IE6/IE7不识别display:inline-block属性

ie6,ie7的haslayout属性是个让人头疼的问题。在做导航条的时候,一般会用到ul li结构,大多数时候我们是把li设置为浮动,让其并排显示在同一行。还有一种方法就是设置li为display:inline;这样可以达到同样的效 果,但是问题是inline元素的特性:默认无法设置宽度,高度,以及上下margin,(关于padding,情况有点特殊,在ie6,7中 inline元素是无法设置上下padding的,但是在标准浏览器里面是可以设置上下padding的)。

鉴于inline元素的这 种特性,如果我们不浮动并且想让li显示在一行,而且可以设置高度,宽度以及上下margin,上下padding等属性,应该怎么办呢?你一定会想到一 个属性display:inline-block;对!”inline- block”就是干这个事的,让一个元素既不换行又具有block元素的特性。不过有点小问题.

在IE6、IE7中不识别 display:inline-block属性,加不加display:inline-block;对于它们完全没有任何影响。那么让我们来想办法解决这 个问题,这就涉及到ie6,7中的haslayout属性了。ie6,7中的inline元素有个特殊的情况,就是触发了ie的hasLayout属性以 后就拥有了layout。此时inline元素的表现和标准浏览器里面的inline-block元素基本相同。

看下面这个例子,我们用ie的私有属性zoom来触发hasLayout,然后看看inline元素的表现。
 

复制代码
代码如下:

<html xmlns=”http://www.w3.org/1999/xhtml”> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>display-block</title>
<style>
span {
width:200px;
height:50px;
margin:10px;
padding:20px;
background:#ccc;
zoom:1;
</style>
</head>
<body>
<span><span style="font-family:宋体,微软雅黑,Verdana,Helvetica">span</span> </span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"></body> </span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"></html></span>

可以看到在ie6,7中inline元素span已经表现得和一个display:inline-block元素一摸一样了,但是在标准浏览器中span仍然是行内元素(宽高以及上下margin都无效)。
如 果声明了不正确DTD,导致ie6在quirks 模式下解析,那么ie6会自动触发inline元素的haslayout,不过这里只讨论正常情况下的解析,所以加了个zoom:1来触发 haslayout;zoom的值设置为除了auto外的任何值都会触发haslayout,之所以经常用zoom:1;是因为zoom这个属性本身是 ie的缩放属性,设置为其他值会导致元素在ie下变形,设置为1既是保持原形不缩放。
了解了上面的情况,我们就可以来解决之前那个问题了。可以改原先的css代码如下:

复制代码
代码如下:

li <span style="font-family:宋体,微软雅黑,Verdana,Helvetica">{</span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica">display:inline-block; /* firefox等标准浏览器识别*/ </span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica">*display:inline; /* 只有ie6和ie7识别*/zoom:1; /* 触发ie6和ie7下的haslayout */ </span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica">width:80px; </span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica">height:20px; </span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica">margin:10px; </span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica">padding:10px; </span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica">text-align:center; </span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica">background:#cfc; </span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica">}</span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"> 让标准浏览器识别display:inline-block;让ie6,7识别display:inline;来覆盖上面的 display:inline-block;(我为什么要说”覆盖”?)。然后通过zoom:1;来触发haslayout让inline元素在ie中表 现得和inline-block元素一样。</span>
</span>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html"><html xmlns=”http://www.w3.org/1999/xhtml”> </pre><pre name="code" class="html"><head> </pre><pre name="code" class="html"><meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> </pre><pre name="code" class="html"><title>display-block</title> </pre><pre name="code" class="html"><style> </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">ul {</pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">background:#ccc;</pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">padding:0;</pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">margin:0;</pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">list-style:none;</pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">} </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">li {</pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">display:inline-block; </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">*display:inline; </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">zoom:1; </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">width:80px; </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">height:20px; </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">margin:10px; </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">padding:10px; </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">text-align:center; </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html">background:#cfc;</pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html"> } </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html"></style> </pre><pre name="code" class="html"></head> </pre><pre name="code" class="html"><body> </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html"><ul> </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html"><li>测试</li> </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html"><li>测试</li> </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html"><li>测试</li> </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html"><li>测试</li> </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html"></ul> </pre>
<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px"></span></span><pre name="code" class="html"></body> </pre><pre name="code" class="html"></html></pre><span style="color:rgb(17,17,17); font-family:宋体,微软雅黑,Verdana,Helvetica; font-size:14px; line-height:25px">可以看到,现在在各浏览器里面的显示已经一致了。li元素都显示在同一行。</span>

<span style="font-family:宋体,微软雅黑,Verdana,Helvetica"><a target="_blank" href="http://www.poluoluo.com/jzxy/201206/167493.html">http://www.poluoluo.com/jzxy/201206/167493.html</a>
</span>

时间: 2024-08-03 19:34:23

如何解决IE6/IE7不识别display:inline-block属性的相关文章

解决 IE6 IE7 onresize的bug

IE下给window对象定义其onresize事件,在拉伸缩小窗口时,其onresize方法将被执行多次,并且其具体执行的次数在不同的电脑有不同的值,相当诡异,Firefox等其他浏览器则无此现象.具体可参看这一篇文章<window.onresize hangs IE6 and IE7> 高阶函数debounce 正是为此而生的   [javascript] view plaincopy /**   * IE下 window.onresize 有bug 可以使用debounce封装监听函数  

ie6 ie7 ie8 ie9和FireFox Chrome中css区别总结

1.DOCTYPE 影响 CSS 处理 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 wid

DIV+CSS网页兼容所有主流浏览器技巧(IE6/IE7/IE8/IE9/Firefox/Chrome)

CSS兼容常用技巧 请尽量用xhtml严格格式写代码,一定要加DOCTYPE声明,因为DOCTYPE影响CSS处理,影响W3C标准. 1.div中文字的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了.缺点是要控制内容不要换行 2. margin加倍的问题 设置为float的div在ie下设置的margin会加倍.这是一个ie6都存在的bug.解决方案是在这个div里面加上display:

ie6,ie7兼容性总结(转)

其实浏览器的不兼容,我们往往是各个浏览器对于一些标准的定义不一致导致的,因此,我们可以进行一些初始化,很多问题都很轻松解决. 下面是14条特殊情况仅供参考: 1. 文字本身的大小不兼容.同样是font-size:14px的宋体文字,在不同浏览器下占的空间是不一样的,ie下实际占高16px,下留白3px,ff 下实际占高17px,上留白1px,下留白3px,opera下就更不一样了.解决方案:给文字设定 line-height .确保所有文字都有默认的 line-height 值.这点很重要,在高

CSS hack实现 CSS完美兼容IE6/IE7/FF的通用方法_经验交流

关于CSS对各个浏览器兼容已经是老生常谈的问题了, 网络上的教程遍地都是.以下内容没有太多新颖, 纯属个人总结, 希望能对初学者有一定的帮助. 一.CSS HACK 以下两种方法几乎能解决现今所有HACK. 1, !important 随着IE7对!important的支持, !important 方法现在只针对IE6的HACK.(注意写法.记得该声明位置需要提前.) <style> #wrapper { width: 100px!important; /* IE7+FF */ width: 

css中常用的ff,ie6,ie7样式兼容问题收集

现在大部分都是用!important来hack,对于ie6和firefox测试可以正常显示,但是ie7对!important可以正确解释,会导致 页面没按要求显示!找到一个针对IE7不错的hack方式就是使用"*+html",现在用IE7浏览一下,应该没有问题了现在写一个CSS可以这样:  代码如下 复制代码 #1 { color: #333; } /* Moz */ * html #1 { color: #666; } /* IE6 */ *+html #1 { color: #99

当INLINE-BLOCK和TEXT-INDENT遇到IE6,IE7

 代码如下 复制代码 #iconautente{ background-image:url('/style/images/spritecommon.png'); /*icona_utente.png*/ background-position:-117px -15px; text-indent:-9000px; width:20px; height:23px; display:inline-block; } <a id="iconautente" href="/admi

css ie6 ie7 firefox兼容写法

    比如这个条件:     margin:3px 3px 0px 3px;     display:block;     想必大家一看就知道是什么意思了,但通过测试,IE6和IE7浏览器,表现得就有区别.IE6表现得就很松散,似乎不止3px的左右距离而变成了双倍距离,即6px:而IE7下,基本正常.     后来在网上学习了一下,将display:block;这个条件变成了display:inline;后,IE6正常了,不再出现那么大的距离,而且比较准确:但IE7又不正常了,似乎右边的距离变

CSS超出文本用省略号显示 兼容firefox IE6 IE7

CSS设置文本溢出不显示或显示省略号,只显示一定长度的文本,ie9下只需设置  代码如下 复制代码 div{white-space:nowrap;text-overflow: none;} 或  代码如下 复制代码 div{white-space:nowrap;text-overflow: ellIPsis;} 即可,在ie6,ie7需增加宽度设置才能生效  代码如下 复制代码 div{white-space:nowrap;text-overflow: ellipsis;*width:100px