IE6中display为none时仍占据3px???

当要在网页上要隐藏一个DIV的时候,我们立马想到设置display:none就能搞定。设置了一个DIV的display为none时,该DIV就从网页上消失了,也不占用空间。

但在做项目的时候偶然发现了一个奇怪的现象,IE6下某些时候设置DIV的display:noe,该DIV依然占据一定空间。这里首先来重现一下这个奇怪的现象:

1,我需要如上图所示的一个HTML结构:

<div class="box clear">
  <div class="list">box1</div>
  <div class="list">box2</div>
  <div class="list">box3</div>
  <div class="list">box4</div>
</div>

对应的CSS: 

.box {
	width: 440px;
	background: #0CF;
	padding: 5px;
}
.list {
	width: 98px;
	height: 98px;
	margin: 5px;
	border: 1px solid #960;
	float: left;
	display:inline;/*IE6 bug*/
}
.clear:after {
	content: ".";
	display: block;
	height: 0;
	clear: both;
}
.clear {
	zoom: 1;
}
</style>

2,某天我需要在HTML中再加入一个<div class="list">box5</div>,与此同时需要隐藏其中一项

<div class="box clear">
  <div class="list">box1</div>
  <div class="list">box2</div>
  <div class="hide">box3</div>
  <div class="list">box4</div>
  <div class="list">box5</div>
</div>

CSS中添加了一个hide类

.hide{ display:none;}

显示效果在理想状态下应该把添加了hide类的DIV隐藏,后面的自动补全该位置:

但该HTML结构在IE6下box5并没有自动靠近box4,如下图所示:

3,由于该结构中<div class="list">box</div>都设置了float:left,而在设置浮动的情况下只有外层box宽度不够的时候才会发生这种现象,于是把 .box的width设为443px,这时候box5浮动到box4的右侧了。

可是根据前面css中.list的计算,.box宽度为440是刚好相等的。但是可以发现,IE6中把某一项设置为display:none后,存在一个3px的占位。

到底是不是被设为display:none的DIV元素存在3px占位呢?我们来把最后一个DIV设为display:none看看

<div class="box clear">
  <div class="list">box1</div>
  <div class="list">box2</div>
  <div class="list">box3</div>
  <div class="list">box4</div>
  <div class="hide">box5</div>
</div>

 box的宽度依然是440px,显示效果如下:

如果是被设为display:none的DIV元素存在3px占位的话,那么box5也应该存在3px占位,可是这里并没有发生3px占位。经过测试,当把第一个或者最后一个DIV设为display:none时并不会出现3px占位现象。

IE6中3px占位现象的解决方法:给浮动元素设置background-color,貌似很奇葩!

HTML结构:

<div class="box clear">
  <div class="list">box1</div>
  <div class="list">box2</div>
  <div class="list">box3</div>
  <div class="hide">box4</div>
  <div class="list">box5</div>
</div>

CSS样式:

.box {
	width: 440px;
	background: #0CF;
	padding: 5px;
}
.list {
	width: 98px;
	height: 98px;
	margin: 5px;
	border: 1px solid #960;
	float: left;
	display:inline;/*IE6 bug*/
	background:#0CF;/*设置后IE6中3px占位现象消失*/
}
.clear:after {
	content: ".";
	display: block;
	height: 0;
	clear: both;
}
.clear {
	zoom: 1;
}
.hide{ display:none;}

 修复效果:

 这个不知道算不算IE6的一个bug?

posted @ 2013-06-27 21:08  倒霉熊  阅读(1307)  评论(1编辑  收藏  举报