问题的条件有:浏览器
overflow:hidden;
,并同时设置了height
和min-height
,同时height计算值
< min-height
期待结果:app
min-height
和height
,同时height计算值
小于min-height
。由于height
权重小于min-height
,最终A元素的content-box高度计算值应以min-height
为准IE8的bug是:.net
height计算值
小于min-height
的同时,误取了heihgt
值做为其包含块的content-box部分百分比top
/bottom
/百分比height
均受到影响,所以,B元素的位置可能受到影响http://jsfiddle.net/humphry/Xzy28/7/code
http://jsfiddle.net/humphry/NSCLa/8/图片
咱们看一下渲染结果的区别。get
absolute | static | |
其余浏览器 | 外层高500/内层高500 | 外层高500/内层高300 |
IE8 | 外层高500/内层高220 | 外层高500/内层高20 |
咱们先看看外层的计算。table
.wrapper
的height
是20px,被min-height
的300px覆盖,最终的高度值为:100px padding-top
+ 100px padding-bottom
+ 200px height计算值
= 500px。这里全部的浏览器都计算正确。class
对于内层,IE8/其余正常浏览器,在absolute定位和static定位下的区别有:容器
.inner
absolute定位: .inner
设置了100%高度,即100%的包含块的高度,即外层容器的padding-edge高度,也就是外层容器的 200px padding高度
+ 300px content-box高度
= 500pxIE8浏览器,.inner
absolute定位: .inner
的包含块的content-box高度
误用了height
值而非min-height值
,计算出来高度值为 200px padding高度
+ 20px height高度
= 220px兼容性
正常浏览器,.inner
static定位: .inner
设置了100%高度,即100%的包含块的高度,即外层容器的content-box高度,也就是外层容器的 300px content-box高度
= 300px
.inner
static定位: .inner
的包含块的content-box高度
误用了height
值而非min-height
值,计算出来高度值为 20px height高度
= 20pxoverflow:hidden;
overflow:hidden;
加在不【同时设置height
、min-height
,且height计算值
<min-height
】的元素上参考资料