最近遇到了一个给div设置 overflow:hidden 清除兄弟div的浮动的样式,于是深究一下:
一、属性值
提到overflow,就会想到他的几个属性值:
W3C是这样解释的:
- visible; 默认值。内容不会被修剪,会呈现在元素框之外。
- hidden; 内容会被修剪,并且其余内容是不可见的。
- auto; 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
- scroll; 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
- inherit; 规定应该从父元素继承 overflow 属性的值。
这几个属性想必大家都很熟悉,但是对hidden这个属性值你真的了解吗?
二、详解hidden的用法
html代码示例1
2
3
4<div class="container">
<div class="div1"></div>
<div class="div2"></div>
</div>
css代码示例
1 | .container{ |
1、隐藏溢出
这个很好理解,假如父元素div的的高度给150px小于子元素的高度之和200px时,给父元素设置overflow:hidden
,这个时候即便是子元素的高度高出父元素,也会被隐藏;
2、清除浮动
给两个子元素div设置float:left
,这时候的效果是黑色的外层div消失了,是因为浮动的元素脱离开了文档流,不占据空间,父元素识别不了子元素的高度,这个时候父元素设置overflow:hidden
,效果就是在浏览器中,子元素的高度撑开了父元素的高度,除去子元素占据空间的的背景颜色,其余背景是父元素的背景色黑色;
3、解除坍塌
什么是坍塌?
举个例子:如果给div1设置margin-top:50px
,期待的效果是有一部分空间是高度50px,背景为黑色部分,但是事实并不是这样,这就是坍塌。这里多说一句:这种坍塌只针对于父亲的第一个儿子,div2设置margin-top:50px
则不会有任何不妥。 防止这种坍塌现象就是给父元素设置:
1 | .container{ |
在多说一句:浮动的div不用考虑坍塌。
没办法贴图,有兴趣的小伙伴可以敲一下试试!