- 繁體中文
- 收藏本站
- 关于我们

1. 联系我们
2. 最新动态
3. 服务项目
4. 案例展示
5. 首页

- 张家界CMS开源企业管理系统v1.0.6开源
- 6月17日起管局备案系统升级暂不审核备
- 解决IE6下列表li下面多出来的3像素问题
- 经验分享：FLASHas2.0常用代码大全
- 帝国CMS支付宝接口网关地址更改说明

Best Display Screen Size 1440x900px

# 解决IE6下列表li下面多出来的3像素问题

2013-4-29 23:27:20
点击次数：次[收藏] [打印]
如上图我们可以看出，在IE8和FF下，显示没什么问题，一切正常，如我们所想要的那样，文字左对齐，各个字段都有相对应的固定宽度，可在IE6下面却出了问题，每个li的下方多出了几个像素的高。当然这不是我们想要的，那到底是哪出了问题，产生了这几个像素呢？首先我们想到的肯定是li的下外边距，检查样式，我们没有给li设置下边距；再检查是不是IE中默认的li属性，自动产生的下边距，再检查样式，发现已经有*{margin:0;padding:0}，给所有元素清除外边距和内外距了。既然不是li导致的，那有没有可能是span呢？好，给span设置display:inline;不行，再换成display:block，依然不行，这里我们就想了，是不是span元素本身有什么问题，查一下span标签本身有没有问题。
baiduing。。。。。。
<span>在行内定义一个区域，也就是一行内可以被<span>划分成好几个区域，从而实现某种特定效果。<span>本身没有任何属性。
这时我们肯定能想起，有时候在html中让关键字变色的情形来。不错，那个时候就是用的span，我们肯定也会想起，用到span的地方也没有产生类似于今天这样，把文字下方撑大的情形啊。
静坐一小会，再来回想一下问题出在什么地方。。。
三个浏览器来回切换看，问题找到了。只有在IE6下，li下方才会多出几个像素来。截图，看看到底是几个像素。。。3个，我想起来了，我一个li里有3个span啊，是不是因为有3个span才产生的这3个像素啊（也许有人都笑了，可我当时就这么想的）。我给减一个span，问题依旧，然后加两个试试，看变不变，加两个，也不变。我把span的float:left给删了看看，不定宽了，高度也不对了，float:left不能删。
没事在PS里用选区工具看着两个li之间的白条，3个像素，3个，3个（若有所悟？）是不是IE6著名的bug，3像素。。。
baiduing。有了：
当浮动元素与非浮动元素相邻时，这个3像素的Bug就会出现，它会偏移3像素。
只要触发IE的hasLayout，非浮动元素就会拥有布局。所以，利用IE6特有的hack规则，为它单独写样式就可修复此问题：
_zoom:1;
margin-left: value;
_margin-left: value-3px;
zoom 是IE触发Layout条件之一，因为它是IE特有的CSS规则，所以采用zoom。
margin-left: value-3px 是修复IE6 中3px 的bug。
此前采用非浮动元素也浮动的方法修复bug，现在我们可以试试这个新的方法了！
注：前面的下划线是专门写给IE7以下版本的hack
看完这个，别急着去把人家现成的代码粘贴过来，仔细看一下具体怎么回事。仔细看上面加粗的部分。当浮动元素与非浮动元素相邻时，这个3像素的Bug就会出现，它会偏移3像素，也就是说，跟我们li中的span相邻的元素没有浮动（我们这里的span已经给它float:left了）。那我们span的相邻元素是什么？不就是li吗？好，给li加上float:left。。。刷新页面。问题解决。
所以“别人的解决方法”我们这里不用也把问题解决了。我为什么没有采用“别人的解决方法”呢？
PS: 这里需要注意的可能就是ul，li，还有三个span里的字段加起来的总的width的问题。还有就是在ul结束以后，得在外面加一个层，给这个层设置样式，清除浮动。
我为什么没有采用“别人的解决方法”呢？
通常地，我们需要让li上下之间留出一到两个像素的间隔，现在我们用“别人的解决方法”来给我们的li上下之间加两个像素的高，先给margin-top:1px;，然后“别人”所说的，把margin-left: value;_margin-left: value-3px;换成margin-bottom: 1px;_margin-bottom:-2px;-2=1-3，代码：

- 上一篇：6月17日起管局备案系统升级 暂不审核备案
- 下一篇：张家界CMS开源企业管理系统v1.0.6 开源发布

全部 工作室新闻 行业新闻