在IE6、7中如果一个浮动元素与绝对定位元素相邻的话,在某些情况下绝对定位元素将会消失。在网上找了一下,有如下解释:
1.当绝对定位层的邻近浮动层的宽度不等于父层宽度时,以及没有清除浮动时,IE6/7,FF中显示一致;
测试代码1如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>IE6/7绝对定位元素消失-110201.com</title> <style type="text/css"> .wrap { position:relative; width:300px; height:120px; margin:0 auto; background-color:#000 } .pa { position:absolute; top:10px; right:10px; height:20px; padding:5px; width:20px; border:1px solid #fff; background-color:#f00; color:#00f; line-height:20px; } .floatDiv { float:left; width:200px; height:100px; line-height:100px; text-align:center; background-color:#0ff; color:#f00; } </style> </head> <body> <div class="wrap"> <div class="floatDiv">Float A</div> <div class="pa">PA</div> </div> </body> </html>
结果:IE6、7、8、9、Firefox下均表现正常。
2.当绝对定位层的邻近浮动层的宽度不等于父层宽度时,有清除浮动时,IE6/7不显示绝对定位层,FF显示;
只需在测试代码1的基础上,在.pa的样式中加入clear:both属性即可。
结果:IE6、7、8、9、Firefox下均表现正常,与上面的描述有差异,不知为何。。。
3.当绝对定位层的邻近浮动层的宽度等于父层宽度时,以及没有清除浮动时,IE6不显示绝对定位层,IE7/FF显示;
只需在测试代码1的基础上,把.floatDiv中的width属性值改为300px即可。
结果:IE6中绝对定位元素消失,IE7、8、9、Firefox正常,与上面的描述无异。
4.当绝对定位层的邻近浮动层的宽度等于父层宽度时,有清除浮动时,IE6/7不显示绝对定位层,FF显示;
只需在测试代码1的基础上,把.floatDiv中的width属性值改为300px,在.pa的样式中加入clear:both属性即可。
结果:IE6、7、8、9、Firefox下均表现正常,与上面的描述有差异,不知为何。。。
测试环境:win7 IEtester V0.4.11 Firefox 9.0.1
上面的问题可能是由于环境的原因,因为IEtester在win7下还有很多问题,如:IE7不能打开非服务器解析的文件(本地的文件拖进去没反映),IE6的透明效果等等。
最后就是上面问题的解决方法:把绝对定位元素和浮动元素分开,就是在两个元素中间加一个空白的div就行啦!