問題的條件有:瀏覽器
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
】的元素上參考資料