《CSS世界》学习之清除浮动/BFC/overflow

361 阅读3分钟

高度坍塌

父元素自适应高度,子元素设置浮动后导致父元素高度为0的现象。解决此现象的方法就叫做清除浮动,清除浮动之后,父元素就会根据子元素自适应高度。

四种解决方法

1. 额外标签法

        在父元素内部**最后**添加一个子元素

清除前:高度坍塌

清除后:自适应高度

大神的书中提到了一个缺点:如果清除浮动的元素不写在末尾就会破坏布局。

代码示例如下:demo.cssworld.cn/6/2-1.php

2. BFC:为父元素添加overflow属性,其值为hidden/auto/scroll

    缺点:hidden的话无法显示溢出部分

3. 利用伪元素after。其实还是利用了伪元素的特性,不用再html中书写dom结点,利用纯css解决问题。注意利用zoom:1兼容IE浏览器。

    

4. 双伪元素 before + after 清除浮动

BFC定义

在清除浮动的方法中第三种利用overflow属性的方法提到了BFC,BFC的全程为block formatting context,块级格式化上下文。作者称之为“CSS世界的结界”。对应还有Inline formatting context,内联格式化上下文。

        特点就是:BFC元素内部元素不会影响到外部元素。那么就是说如果一个父元素是BFC元素,那么就会清除子元素浮动带来父元素高度塌陷的影响(如果高度塌陷了,就相当于影响了父元素后面元素的布局)。

        火影中最强结界:四赤阳阵。。。。

触发BFC的几种情况

1. 根元素

2. float的值不为none

3. overflow的值为auto,scroll,hidden(超棒,IE7及以上)

4. display的值为table-cell**(IE/8),table-caption,inline-block(IE6/7)**的任何一个。父元素设置为inline-block的时候会导致包裹尺寸收缩,有些尴尬。

5. position的值不为relative或static

自适应解决方案(IE7及以上)

大神提炼了两套方法

  1. .father {overflow: hidden}

  2. .father {display: table-cell; width: 9999px; *display:inline-block; *width:auto}

overflow注意事项

避免滚动容器设置padding-bottom的值,因为Chrome浏览器将padding-bottom的值算在了滚动尺寸之内,同时导致scrollHeight值不一样。

overflow-x/overflow-y

如果这两个属性的值都是visible,否则visible会当成auto来解析。

scrollTop

PC端dscrollTop是通过document.documentElement.scrollTop获取的。因为PC端的滚动条来自而不是标签。所以去除页面默认滚动条需要对作用。

移动端通过document.body.scrollTop获取的。

滚动条会占位置盒子的宽度,一般浏览器的滚动条宽度为17px,在我之前有篇文章提到过:juejin.cn/post/685457…

最后

书后面还有一些内容,不过在日常开发中没有碰到,先留个尾巴