IE6的一个不兼容问题:不能用overflow:hidden清除浮动

在百度ife2016的任务3中,实现了一个简单的三栏布局。左右栏宽度固定,中间栏宽度自适应。父元素的高度应该等于三栏中最高的一个。

在这里遇到了一个问题:使用 float: left 和 float: right 控制左右栏,然后在父元素中使用 overflow: hidden 来清除浮动,使父元素高度等于三栏中最高。

在IE6中进行测试,发现如果左右栏高于中间栏,则高出的部分会溢出。

搜索之后找到了解决办法,就是在父元素中加一个 _zoom: 1; 原理大概是触发浏览器的haslayout机制。

haslayout 机制:

在IE中,一个元素要么自己对自身的内容进行计算和组织,要么依赖于父元素来计算尺寸和组织内容。

当haslayout属性为true时,就说元素有一个layout。此时,元素就要扩展去包含它的流出的内容。例如浮动或者很长的没有截断的单词,如果haslayout没有被设置成true,那么元素就要依靠某个祖先元素来渲染它。

当一个元素有layout时,它负责对自己和可能的子孙元素进行尺寸计算和定位。这样它就要花更大的代价来维护自身及里面的内容,而不是依赖于祖先元素来完成这些工作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,854评论 1 92
  • 这篇文章极好,以至于让我受益良多,就一字没有改动的转发过来一丝冰凉老师的文章 需要注意的是,display:tab...
    新晋小牛牛阅读 1,076评论 0 2
  • 当margin的值为百分比形式时,为什么浏览器会根据父容器宽度得出计算值? 假如有一个父容器宽度400px,高度6...
    飘雪飞舞阅读 901评论 0 0
  • display: none; 与 visibility: hidden; 的区别 联系:它们都能让元素不可见 区别...
    纹小艾阅读 1,740评论 0 1
  • Ba la la la ~ 读者朋友,你们好啊,又到了冷锋时间,话不多说,发车! 13.子选择器在IE6...
    王饱饱阅读 464评论 0 2