bug记录:IE8,包含块min-height/height共存时的高度计算bug
2015-06-04 14:27
381 查看
问题的条件有:
A元素是B元素的包含块。
A元素设置
原生IE8浏览器,或者IE9浏览器的IE8兼容性模式(以下统称为IE8)
期待结果:
若B元素为absolute定位元素,A元素为relative定位元素,则B元素的包含块高度为A元素的padding-edge高度
若A、B元素均为常规流定位元素,则B元素的包含块高度为A元素的content-box高度
若A元素同时设置了
IE8的bug是:
若B元素的包含块的content-box的值计算错误,在
B元素跟其包含块有关的属性,如
A元素的最终高度计算依然正确
受到影响的仅仅是以A元素为包含块的元素,包括B元素
http://jsfiddle.net/humphry/Xzy28/7/
一个未使用absolute定位的DEMO,可见jsfiddle:
http://jsfiddle.net/humphry/NSCLa/8/
我们看一下渲染结果的区别。
我们先看看外层的计算。
对于内层,IE8/其他正常浏览器,在absolute定位和static定位下的区别有:
正常浏览器,
IE8浏览器,
正常浏览器,
IE8浏览器,
参考资料
关于包含块的判定:http://w3help.org/zh-cn/kb/008/
A元素是B元素的包含块。
A元素设置
overflow:hidden;,并同时设置了
height和
min-height,同时
height计算值<
min-height
原生IE8浏览器,或者IE9浏览器的IE8兼容性模式(以下统称为IE8)
期待结果:
若B元素为absolute定位元素,A元素为relative定位元素,则B元素的包含块高度为A元素的padding-edge高度
若A、B元素均为常规流定位元素,则B元素的包含块高度为A元素的content-box高度
若A元素同时设置了
min-height和
height,同时
height计算值小于
min-height。因为
height权重小于
min-height,最终A元素的content-box高度计算值应以
min-height为准
IE8的bug是:
若B元素的包含块的content-box的值计算错误,在
height计算值小于
min-height的同时,误取了
heihgt值作为其包含块的content-box部分
B元素跟其包含块有关的属性,如
百分比top/
bottom/
百分比height均受到影响,因此,B元素的位置可能受到影响
A元素的最终高度计算依然正确
受到影响的仅仅是以A元素为包含块的元素,包括B元素
DEMO
一个使用了absolute定位的DEMO:http://jsfiddle.net/humphry/Xzy28/7/
一个未使用absolute定位的DEMO,可见jsfiddle:
http://jsfiddle.net/humphry/NSCLa/8/
我们看一下渲染结果的区别。
计算流程,试解释
absolute | static | |
其他浏览器 | 外层高500/内层高500 | 外层高500/内层高300 |
IE8 | 外层高500/内层高220 | 外层高500/内层高20 |
.wrapper的
height是20px,被
min-height的300px覆盖,最终的高度值为:100px
padding-top+ 100px
padding-bottom+ 200px
height计算值= 500px。这里所有的浏览器都计算正确。
对于内层,IE8/其他正常浏览器,在absolute定位和static定位下的区别有:
正常浏览器,
.innerabsolute定位:
.inner设置了100%高度,即100%的包含块的高度,即外层容器的padding-edge高度,也就是外层容器的 200px
padding高度+ 300px
content-box高度= 500px
IE8浏览器,
.innerabsolute定位:
.inner的包含块的
content-box高度误用了
height值而非
min-height值,计算出来高度值为 200px
padding高度+ 20px
height高度= 220px
正常浏览器,
.innerstatic定位:
.inner设置了100%高度,即100%的包含块的高度,即外层容器的content-box高度,也就是外层容器的 300px
content-box高度= 300px
IE8浏览器,
.innerstatic定位:
.inner的包含块的
content-box高度误用了
height值而非
min-height值,计算出来高度值为 20px
height高度= 20px
解决方案
去掉.wrapper上的overflow:hidden;
overflow:hidden;加在不【同时设置
height、
min-height,且
height计算值<
min-height】的元素上
参考资料
关于包含块的判定:http://w3help.org/zh-cn/kb/008/
相关文章推荐
- vim基础命令
- EF 事物
- sqlserver 自定义字符串分割函数.
- 百度定位SDK使用
- Binary Tree Inorder Traversal
- IE6支持兼容max-height、min-height CSS样式
- 计算视图传参
- SpringMVC 学习笔记(一) Hello World
- 想辞职 想跳槽
- Android自定义控件实战——仿淘宝商品浏览界面
- 有关Angular 2.0的一切
- Hacking PostgreSQL
- android 自定义Adapter
- 分布式MySQL数据库TDSQL架构分析
- android动态修改app桌面icon
- 第十四周阅读程序(2):标准类型数据的格式输出
- 第十四周阅读程序(1):cerr流对象
- 抽取android4.4原生浏览器的PieMenu并修改为所需的功能
- 互联网金融的五个猜想和四大趋势
- C++_运算符重载 总结