浮动的清除

简述

  如果有一个父盒子,里面有非常非常多的小盒子,多到页面要拉很下才看得到底,且每天都要往父盒子里塞新的小盒子,那么父盒子就不方便指定高度了。

  如果一个父盒子分为左右两部分,但做优两部分实际内容不一样高,那么这个父盒子的高度就不容易给了。

  所以我们渴求一种理想中的情况,不给父盒子高度,让盒子撑开父亲,有多少孩子,父亲就有多高。

案例

  我们现在整一个父盒子不指定高度,然后嵌套两个小盒子进去

   我们看到,父盒子会被小盒子撑开

   现在我们给两个小盒子加上浮动效果,我们可以看到大毛和二毛会在一行内显示,但是父盒子的高度就不对了,变成了0

  其实原因是浮动的元素是不占位置的,父元素是标准流,看不到浮动的孩子,高度就变成0了。

  此时我们如果在下面加一个盒子

  盒子就会跑到上面去,因为父元素的高度只有0,这引出了我们的问题——为什么要清除浮动

为什么要清除浮动

  由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占位置,最后父盒子高度为0,就会影响下面的标准流盒子。

解决办法——清除浮动

  清除浮动的本质就是清除浮动元素造成的影响

  如果父盒子本身有高度,就不需要清除浮动

  清除浮动后,父级就会根据浮动的子盒子自动检测高度。父盒子有了高度,就不会影响下面的标准流盒子了。

  清除浮动的语法是:选择器{clear: 属性值;}

  清除浮动的策略是:闭合浮动。闭合浮动其实就是孩子浮动太皮了,父盒子把浮动的影响闭合起来,只让影响在父盒子里面。

清除浮动的方法

额外标签法

  额外标签法也称隔墙法,是W3C推荐的做法。

  额外标签法就是在浮动元素末尾添加一个空的标签,该空标签就可以使浮动闭合,空标签就是一堵墙,把浮动元素闭合起来了。

  我们在后面添加一个新标签,使用属性clear:both

  此时父盒子的高度就会随着子盒子的数量变化,直到装满盒子,这是因为有一堵墙隔着。

  同时下面的标准流盒子也不会占据上方盒子的位置了,因为上方的父盒子有高度。

  这种方法通俗易懂,书写方便。但缺点是添加了无意义标签,结构化较差。

  需要特别注意的是,这个新增的盒子必须是块级元素或br,只有块级元素和br才能成为墙。

父级添加overflow属性

  可以给父级元素添加overflow属性,值可以是hidden、auto、scroll。

  子不教,父之过,孩子的问题父亲解决。

  overflow除了能清除浮动,还能解决外边距合并的问题,详细用法后面的博客会讲。

父级添加after伪元素

  通过添加after伪元素,就可以清除孩子浮动的影响

  具体什么是伪元素之后的博客详解,其本质就是在after位置添加一个假的元素,是额外标签法的升级版。

父级添加双伪元素

  双伪元素也是给父盒子添加

  其本质就是在前后都加墙,把孩子的浮动完全闭合起来,这种思想契合我们的浮动闭合

 

   

 

  

 

posted @ 2020-11-25 18:45  艾尔夏尔-Layton  阅读(107)  评论(0编辑  收藏  举报