CSS —— 清除浮动的方法及其原理理解

一、为什么要清除浮动

浮动会引起父容器塌陷,导致页面布局出错等问题。

例子:

<body>
		<div class="parent_Div">	
			<div class="float_Div">float left float left float left float left.....</div>
			<div class="child_two_Div">child_two_Div child_two_Div child_two_Div......</div>			
		</div>
		<div class="bottom_Div">bottom_Div bottom_Div bottom_Div bottom_Div.......</div>
	</body>

样式:

	.parent_Div {
			width: 500px;
			border: 3px solid black;			
		}
		
		.float_Div {
			width: 100px;
			height: 100px;
			border: 2px dotted #C7254E;
			color: red;
			margin: 4px;
			float: left;
		}
		
		.bottom_Div {
			width: 500px;
			height: 100px;
			margin: 5px 0;
			border: 2px dotted black;
		}
		
		.child_two_Div {
			color: aqua;
			border: 2px solid aqua;
		}

 

Chrome 渲染结果:

 

这很显然不是我们想要的效果,因为它可能存在如下问题:

1、文本是围绕着浮动元素(.float_Div)排版的,然而,我们想要的结果是(.child_two_Div) 元素的文字排列在浮动元素的下方,并不希望(.child_two_Div)两边有浮动元素存在。

2、浮动元素(.float_Div)排版超出了其父元素,父元素高度出现塌缩。

3、浮动元素(.float_Div)甚至影响到了其父元素(.parent_Div)的兄弟元素(.bottom_Div)的排版。这是因为浮动元素脱离了文档流,.bottom_Div在计算元素位置时会忽略其影响,紧接着上一个元素的位置继续排列。

了解了存在的问题,下面就介绍清除浮动的方法:

二、清除浮动的方法

1、使用clear样式

给需要清除浮动的元素添加样式:

	.child_two_Div {
			color: aqua;
			border: 2px solid aqua;
			clear: left; /*添加清浮动的样式*/
		}

渲染效果(clear的值为both也有相同的效果):

通过上面的样式,保证了(.child_two_Div)元素的左边没有浮动元素,同时,父元素的高度也被撑起来了,其兄弟元素的渲染也不再受到浮动的影响。

但是,如果我们把HTML中的(.child_two_Div)元素和(.float_Div)元素交换一下位置呢?

   <body>
		<div class="parent_Div">
			<div class="child_two_Div">
				child_two_Div child_two_Div child_two_Div...
			</div>	
			<div class="float_Div">
				float left float left float left float left...
			</div>					
		</div>
		<div class="bottom_Div">
			bottom_Div bottom_Div bottom_Div bottom_Div...
		</div>
	</body>

渲染结果:

给 .child_two_Div 元素使用清除浮动样式:

	.child_two_Div {
			color: aqua;
			border: 2px solid aqua;
			clear: left; /*添加清浮动的样式*/
		}

结果:

从渲染效果可以看出,调换位置之后,无论.child_two_Div元素是否应用清除浮动样式,渲染结果都是上面这个样子。

这是因为,.child_two_Div元素的位置确定了,于是浮动元素就紧接着.child_two_Div元素下方渲染在父元素的左侧。然而,父元素的高度没有被撑起来,没有将浮动影响‘内化’,导致浮动影响了接下来元素的排版。

所以,看来,为达到撑起父元素高度的目的,使用clear清除浮动的方法还是有一定的适用范围,因此,我们需要更加可靠、通用的办法。

2、在父元素结束标签之前插入清除浮动的块级元素

HTML结构如下:

<body>
		<div class="parent_Div">
			<div class="child_two_Div">
				child_two_Div child_two_Div child_two_Div...
			</div>	
			<div class="float_Div">
				float left float left float left float left...
			</div>	
                  <div class="more"></div>			
		</div>
		<div class="bottom_Div">
			bottom_Div bottom_Div bottom_Div bottom_Div...
		</div>
	</body>

给新增元素添加样式:

	.more{
			clear: both;
		}

渲染结果:

此方法,和使用clear清除浮动,撑起父元素高度原理一样。

3、利用伪元素

HTML结构如下,给.parent_Div元素添加一个类名clearfix

	<body>
		<div class="parent_Div clearfix">
			<div class="child_two_Div">
				child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div
			</div>
			<div class="float_Div">
				float left float left float left float left
			</div>
		</div>
		<div class="bottom_Div">
			bottom_Div bottom_Div bottom_Div bottom_Div child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div
		</div>
	</body>

样式表如下:

.clearfix:after{
			content:'.';
			height: 0;
			clear: both;
			display: block;
		}

该样式在父元素的最后添加一个:after伪元素,通过清除伪元素浮动来撑起父元素的高度。

该元素的display值为block,表示它是一个不可见的块级元素(有的地方使用tabel,因为tabel也是块元素)

渲染结果:

4、使用overflow清除浮动

HTML结构如下:

	<body>
		<div class="parent_Div">
			<div class="child_two_Div">
				child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div
			</div>
			<div class="float_Div">
				float left float left float left float left
			</div>
		</div>
		<div class="bottom_Div">
			bottom_Div bottom_Div bottom_Div bottom_Div child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div child_two_Div
		</div>
	</body>

样式表:

	.parent_Div {
			width: 500px;
			border: 3px solid black;
			/*使用overflow清除浮动*/
			overflow: auto;
		}overflow: auto;
		}

渲染结果:

仅仅在父元素上添加一个值为auto的overflow属性,就能达到撑起父元素高度的效果,将浮动元素包裹在内。其实这里的overflow值,还可以是除visible之外的任何值,都能达到撑起父元素高度,清除浮动的效果。不过,有的值会有副作用,比如,scroll值会导致滚动条始终可见,hidden值会导致超出边框的值不可见等。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值