0
点赞
收藏
分享

微信扫一扫

CSS - float & overflow: hidden


CSS中为什么 overflow:hidden 能清除浮动 float 的影响?原理是什么?

父块没有设置指定的高宽,当子块设置为浮动后,原本包裹子块的父块的高度塌陷消失,这时给父块设置overflow:hidden就能清楚浮动造成的影响,使父块重新包裹子块。

但这个有个本质问题,当父块高度塌陷消失,这时给父块设置overflow:hidden,按照这个属性的本意,本应该是切掉超出父块的内容,也就是应该将父块之外的浮动的子块切除隐藏。

但为什么,这时没有切除隐藏超出边界的子块,反而恰恰让父块重新有了高度包裹子块,这难道不是和overflow:hidden的本意相背离了吗?

为什么效果里是没有切除隐藏,反而是重新让父块生成高度包裹子块以达到清楚浮动的影响。

请哪位高手能否从本质和根源上分析在这个效果里overflow:hidden背离其属性本意的问题,从本质和根源上分析为什么overflow:hidden背离其本意没有切除隐藏反而产生了清楚浮动的影响。


说法一:

overflow: hidden 的意思是超出的部分要裁切隐藏掉 

那么如果 float 的元素不占普通流位置 

普通流的包含块要根据内容高度裁切隐藏 

如果高度是默认值auto 

那么不计算其内浮动元素高度就裁切 

就有可能会裁掉float 

这是反布局常识的

所以如果没有明确设定容器高情况下 

它要计算内容全部高度才能确定在什么位置hidden 

浮动的高度就要被计算进去 

顺带达成了清理浮动的目标 

同理 

overflow 非默认值 

position 非默认值 

float 非默认值 

等都是遵循这个布局计算思路

作者:貘吃馍香 


说法二:

因为height: auto;的计算结果不是一定为0的。 

正常父元素包含浮动子元素,父元素的高度确实为0。 

但是父元素overflow:hidden;后,首先会计算height: auto;的真实高度,由于其触发了BFC,需要包含子元素,所以高度不是0,而是子元素高度。 

这时overflow: hidden;才起到隐藏作用,不过父元素高度足够大,所以子元素没有被隐藏。

总之,是先计算真实高度,再去隐藏。如果是先直接隐藏了,再去计算高度也就没有意义了。

作者:hgm


举报

相关推荐

0 条评论