请教老师,2-10和2-11所讲的清除浮动的差别有疑问

请教老师,2-10和2-11所讲的清除浮动的差别有疑问

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<style type="text/css">
		.div0{
			border: 1px black solid;
			width: 700px;
		}
		.clearDiv{
			/*clear: both;*/
		}
		.div1{
			width: 100px;
			height: 100px;
			background-color: red;
			float: left;
			/*clear: both;*/
		}
		.div2{
			width: 100px;
			height: 100px;
			background-color: blue;
			float: left;
			/*clear: both;*/
		}
		.div3{
			width: 100px;
			height: 100px;
			background-color: green;
			float: left;
			clear: both;
		}
		.div4{
			width: 200px;
			height: 200px;
			background-color: yellow;
			float: left;
			/*clear: both;*/
		}
		.div5{
			width: 250px;
			height: 250px;
			background-color: orange;
			float: left;
			/*clear: both;*/
		}
		
	</style>
</head>
<body>
	<div class="div0">
		<div class="div1"></div>
		<div class="div2"></div>
		<div class="clearDiv"></div>
		<div class="div3"></div>
	</div>
	<div class="div4"></div>
	<div class="div5"></div>
</body>
</html>

如上是2-10所讲的,清除浮动。这个时候父元素的高度坍塌仍存在。如果解释为清除元素自身浮动,相当于没有设置浮动,也不对,因为那样的话,应该元素被覆盖,所以视频中这样解释也不准确。

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<style type="text/css">
		.div0{
			border: 1px black solid;
			width: 700px;
		}
		.clearDiv{
			clear: both;
		}
		.div1{
			width: 100px;
			height: 100px;
			background-color: red;
			float: left;
			/*clear: both;*/
		}
		.div2{
			width: 100px;
			height: 100px;
			background-color: blue;
			float: left;
			/*clear: both;*/
		}
		.div3{
			width: 100px;
			height: 100px;
			background-color: green;
			float: left;
			/*clear: both;*/
		}
		.div4{
			width: 200px;
			height: 200px;
			background-color: yellow;
			float: left;
			/*clear: both;*/
		}
		.div5{
			width: 250px;
			height: 250px;
			background-color: orange;
			float: left;
			/*clear: both;*/
		}
		
	</style>
</head>
<body>
	<div class="div0">
		<div class="div1"></div>
		<div class="div2"></div>
		<div class="clearDiv"></div>
		<div class="div3"></div>
	</div>
	<div class="div4"></div>
	<div class="div5"></div>
</body>
</html>

如上此段就是2-11的写法,这个时候就父元素没有坍塌。差别就是此元素没有作为浮动过。其他清除浮动的写法都是一样的。


为什么会出现一个父元素坍塌解决了,一个没有解决。这两者之间的差别到底是什么了?谢谢。

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

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

4回答
卡布琦诺 2019-06-01 13:55:46

这里老师帮你总结几种常见的清除浮动的方法和原理,同学再好好理解一下

1、给父级元素单独定义高度(height)

原理:如果父级元素没有定义高度,父元素的高度完全由子元素撑开时,父级div手动定义height,就解决了父级div无法自动获取到高度的问题。

优点:简单、代码少、容易掌握

缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题。对于响应式布局会有很大影响

2、加空div标签,设置clear:both

原理:在浮动的盒子之下再放一个标签,给这个标签设置clear:both,来清除浮动对页面的影响,这里分为两种情况:

(1)内部标签:会将这个浮动盒子的父盒子高度重新撑开

(2)外部标签:会将这个浮动盒子的影响清除,但是不会撑开父盒子

注意:一般情况下不会使用这一种方式来清除浮动,因为这种清除浮动的方式会增加页面的标签,造成结构的混乱

3、父级div定义 overflow:hidden

原理:先找到浮动盒子的父元素,再在父元素中添加一个属性overflow:hidden,就是清除这个父元素中的子元素浮动对页面的影响

注意:一般情况下也不会使用这种方式,因为overflow:hidden有一个特点,离开了这个元素所在的区域以后会被隐藏(overflow:hidden会将超出的部分隐藏起来)

希望可以帮到你!

提问者 wangstudyvc 2019-05-31 23:48:13

对于后者,我写了一个例子。

clearDiv清除浮动clear:both,只会对自身元素起作用,不会去改变周围的其他元素,让clearDiv的两边不存在浮动元素,通过改变自己。这个时候,clearDiv就从浮动的div1,div2,div3下面出来,单独一行。因为clearDiv就是在标准流中,父div容器为了包住clearDiv,所以高度不塌陷了。

其实不是因为div1,div2,div3而撑起父DIV,因为他们还是浮动的。通过divTest的显示,可以确定是浮动。

代码如下:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        .div0{
            border: 1px black solid;
            width: 700px;
        }
        .clearDiv{
            height: 10px;
            background-color: black;
            clear: both;
        }
        .testDiv{
            height: 10px;
            background-color: gray;
        }
        .div1{
            width: 100px;
            height: 100px;
            background-color: red;
            float: left;
            /*clear: both;*/
        }
        .div2{
            width: 100px;
            height: 100px;
            background-color: blue;
            float: left;
            /*clear: both;*/
        }
        .div3{
            width: 100px;
            height: 100px;
            background-color: green;
            float: left;
            /*clear: both;*/
        }
        .div4{
            width: 200px;
            height: 200px;
            background-color: yellow;
            float: left;
            /*clear: both;*/
        }
        .div5{
            width: 250px;
            height: 250px;
            background-color: orange;
            float: left;
            /*clear: both;*/
        }
        
        /* 清理浮动的最佳实践*/
        .clearFloat::after {
            content: "";
            visibility:hidden;
            height: 0px;
            display: block;
            clear: both;
        }
        /*针对IE浏览器的兼容性问题,解决IE浏览器不能清除浮动的bug修复*/
        .clearFloat{
            zoom:1;
        }
    </style>
</head>
<body>
    <div class="div0">
        <div class="div1"></div>
        <div class="testDiv"></div>
        <div class="div2"></div>
        <div class="div3"></div>
        <div class="clearDiv"></div>
    </div>
    <div class="div4"></div>
    <div class="div5"></div>
</body>
</html>


好帮手慕言 2019-05-31 10:04:41

同学你好,前者可以这样理解,但是后者不可以哦。

clearDiv清除浮动是清除div1和div2浮动带来的影响,可以理解成div1和div2撑开了父级的高度,而不是父级是为了包住clearDiv,因为clearDiv的高度是0。

如果帮助到了你,欢迎采纳~祝学习愉快


好帮手慕言 2019-05-30 15:54:22

同学你好,

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

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

第一段代码高度塌陷是因为div0的子元素div1、div2设置了浮动,没有清除浮动,导致的高度塌陷,clearDiv是子元素,因此元素也需要清除浮动,关于同学提到的 如果解释为清除元素自身浮动,相当于没有设置浮动,是可以这样理解的。之所以没有出现被覆盖的原因是,因为元素设置了浮动后,再设置清除浮动,不仅仅是相当于没有设置浮动,同时也清除了其他浮动元素对自身的影响,所以不会被覆盖

2、第二个解决了父级高度塌陷的问题,是因为给clearDiv元素设置了clear:both;清除了div1和div2浮动带来的影响。

如果帮助到了你,欢迎采纳~祝学习愉快


  • 提问者 wangstudyvc #1
    对两个情况,我现在有点理解了,老师可以再看我们理解对吗 前者:div3清除浮动,就是设置div3左右两边不能有浮动的。因此div3就换行。但是自身依然是浮动的,包括div1和div2都是浮动,clearDiv又是空的,所以父容器不能被撑起来。 后者:clearDiv清除浮动,设置clearDiv的两边不能有浮动,因此clearDiv就放到div2后换行,确保左右两边没有浮动。因为clearDiv仍然在标准流,所以父元素为了包住clearDiv,所以就撑起来了,恰恰刚刚撑到div1和div2浮动的高度。
    2019-05-30 23:56:37
  • 提问者 wangstudyvc #2
    对两个情况,我现在有点理解了,老师可以再看我们理解对吗 前者:div3清除浮动,就是设置div3左右两边不能有浮动的。因此div3就换行。但是自身依然是浮动的,包括div1和div2都是浮动,clearDiv又是空的,所以父容器不能被撑起来。 后者:clearDiv清除浮动,设置clearDiv的两边不能有浮动,因此clearDiv就放到div2后换行,确保左右两边没有浮动。因为clearDiv仍然在标准流,所以父元素为了包住clearDiv,所以就撑起来了,恰恰刚刚撑到div1和div2浮动的高度。
    2019-05-30 23:57:08
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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