让IE、Firefox、Chrome中的LI都支持displayblock的兼容写法

在制作简易模板时,店招的导航条结构大致如下:

复制代码
<div class="nav">
<ul>
<li><a href="#"><em>首页</em></a></li>
<li>...</li>
....
</ul>
</div>
复制代码

其中,li有一个这样的属性

.nav ul li {
display:block;
float:left;
}

这两个属性决定了导航条中的导航项目只能是从左至右排列。而我在制作模板的时候想将导航条中的导航项目居中排列,于是做了如下修改:

复制代码
.nav {
....
text-align:center;
}

.nav ul {
....
margin:0px auto;
}

.nav ul li {
display:inline-block;
float:none;
}
复制代码

对于.nav和.nav ul的属性,目的是让ul在nav中是居中的。.nav ul li 中的解释如下:

display:inline-block;   //让普通标签拥有布局属性

float:none; //不再浮动,否则不能居中

结果一经测试发现:在firefox、chrome中均可以正常的看到预期效果,而IE中却只是看到了一个LI显示出来。为LI添加了一背景再行测试,发现:原来LI在IE中占居了整个UL的宽度。自然是无法再让这些LI从左至右进行排列了。至此找到了问题的关键所在:display:inline-block并没有让LI像普通标签那样拥有布局属性,但是它对span   em    strong等这样的标签是有效的。

找到了问题,就要解决问题,于是我想到了display:inline; 再进行测试,发现所有浏览器都让这些LI从左至右了,并没有居中排列。

那么能不能让display:inline只影响到ie呢?当然可以,至此LI的样式如下:

.nav ul li {
display:inline-block;
*display:inline; // for ie
float:none;
}

这样的写法,在除firefox和chrome中均能正常居中了。只是IE中还是从左至右排列的顺序,我再想到了IE特有的让一个元素拥有布局属性的CSS属性:zoom:1;。再将代码改为如下:

复制代码
.nav ul li {
display:inline-block;
zoom:1; //first
*display:inline; //second
float:none;
}
复制代码

测试结果发现,一切都正常了。

注意点:zoom:1一定要前,*display:inline一定要在后。否则不能有效。至于为什么?因为它是IE

原文地址:https://www.cnblogs.com/liuxuze/p/3105860.html