关于清除浮动的理解

关于清除浮动的理解

有个问题?

就是在设置clear属性之后,为什么能够撑开父div的高度?这里面的原理是怎么样的请教老师

在这里输入代码,可通过选择【代码语言】突出显示

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕小班 2020-11-29 15:01:31

同学你好,同学可以通过如下思路来理解一下:

先来看3个例子,第一个例子如下

    ​1、代码:

http://img1.sycdn.imooc.com//climg/5fc3442d0963f99209420586.jpg

运行结果:

http://img1.sycdn.imooc.com//climg/5fc344570926a13708250544.jpg

    ​2、第二个例子

代码

http://img1.sycdn.imooc.com//climg/5fc3446d094a6e6709430589.jpg

运行结果:

http://img1.sycdn.imooc.com//climg/5fc344c609c7c15f08290305.jpg

    ​3、第三个例子

代码

http://img1.sycdn.imooc.com//climg/5fc3467609b1b0d408170488.jpg

运行效果:

http://img1.sycdn.imooc.com//climg/5fc346a50930d6e508160412.jpg

这是因为父元素在没有设置自己的高度的时候,高度由子元素撑开,当子元素设置了浮动元素后,脱离了文档流,不再占据文档流空间。也就无法再去撑起父元素的高度,导致父元素的高度塌陷。

    ​4、 再来看一个例子:

代码

http://img1.sycdn.imooc.com//climg/5fc346da093d15bc09520592.jpg

运行效果

http://img1.sycdn.imooc.com//climg/5fc347140955c8cb08110550.jpg

当清除son3的浮动的时候,清除的是浮动带来的影响,简单理解就是son3不会去理睬son1和son2是不是设置了浮动元素,son3就老老实实呆在自己的位置。不受任何影响(不会被覆盖即不去占son1和son2的文档流空间),这个时候我们看到的父元素高度真正意义上并不是son2和son3一起撑起来的高度,而是由son2浮动后的空白文档流空间和son3撑起来的。

好帮手慕阿满 2020-11-28 18:45:01

同学你好,同学的问题有如下回答:

1、div4中设置clear清除浮动是清除上一个元素div3的浮动造成的影响。清除浮动之前,父div的高度是由div4撑起来的,设置清除浮动后,div4顶外边框将会低于之前任何浮动div的底外边距,由于div3的高度比div2高,所以父元素的高度是div3加div4的高度。

2、清除浮动是清除上一个设置了float为left的兄弟元素的浮动效果

3、左侧和右侧是指设置浮动float时,设置的左浮动left和右浮动right。

4、div2和div3设置浮动后,其本身还有高度和宽度,只是不在文档流的计算中。

5、可以这么理解。

祝学习愉快~

  • 提问者 浅梦sky #1

    老师,还是不太理解?

    2020-11-28 21:44:11
好帮手慕阿满 2020-11-28 11:29:44

同学你好,浮动会脱离文档流,clear是清除浮动,也就是清除浮动造成的影响,所以父div会被撑开。

祝学习愉快~

  • 提问者 浅梦sky #1

    对于老师的回答感觉太模糊了,还是不太理解,还是有以下几个问题不理解:

    (1) 对于视频中的例子,为什么当div2和div3设置为左浮动之后,div4设置清除左浮动,撑起父div的是高度是div3和div4的高度?

    http://img1.sycdn.imooc.com//climg/5fc20f19097a4c4a03360114.jpg

    http://img1.sycdn.imooc.com//climg/5fc21958092ef12407700506.jpg

    (2) 对于清除浮动clear是不是可以这么说,就是清除设置了clear属性的这个元素的上个设置了float为left的兄弟元素的浮动效果,而并非之前的所有元素?


    (3) 对于clear: left; w3cSchool网站上说的是不允许在左侧出现浮动元素,请教下老师这个左侧和右侧怎么判断?


    (4) 还是对于视频的中的例子,撑起父div1的高度是不是可以这么理解?

    当div2和div3设置了属性float:left时,这个时候他们就脱离了文档流变成了浮动的元素,但是这个元素所占的空间(这个空间的宽度和高度与浮动元素一样,并且也是浮动的)已经被浏览器计算在内;但是当div4设置了clear:left的时候,这个时候会去清除div4的上一个设置了float:left的兄弟元素的浮动效果,也就是div3,由于div4设置了clear:left,div3由于浮动所占的空白空间就变成了实际的文档流的空间并且标签类型和div3一样,那么这样的话父div1所撑起的高度就是div3空白空间的高度+div4本身元素的高度,是否可以这么理解?

    2020-11-28 17:35:24
  • 提问者 浅梦sky #2

    (5) 另外还有一点,clear清除浮动,清除的是设置了float属性的元素所形成的空白空间的浮动效果,相当于空白区域回归文档流,而不会去清除这个元素设置了float属性之后脱离文档流的特性,是否可以这么理解?

    2020-11-28 17:48:34
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师