css:清除浮动的三种方式及其原理
Posted xisghiu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了css:清除浮动的三种方式及其原理相关的知识,希望对你有一定的参考价值。
清除浮动的三种方式及其原理
浮动元素的特性
浮动元素脱离文档流,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留。
浮动元素带来的问题
因为浮动元素脱离文档流,所以对于其处于正常文档流中父元素,无法获知其高度,导致父元素自身的高度塌陷(失去浮动元素占据的高度)。
清除浮动的三种方式
设置float
overflow:hidden;
<div style="overflow:hidden;zoom:1;">
<p style="float: left;">使用overflow:hidden 清除浮动</p>
</div>
其中,zoom:1;用于兼容IE6。
clear:both;
<style>
.clearfix:after
/*START 真正起到清除浮动的代码*/
content: '';
display: block;
clear: both;
/*END 真正起到清除浮动的代码*/
height:0;
.clearfixdisplay: inline-block; /* for IE/Mac */
</style>
<div class="clearfix">
<div style="float: left;">clear:both ;son div</div>
</div>
清除浮动本质上是说要清除浮动元素带来的一些影响(例如高度塌陷)。在上面的例子中,我们给 :after伪元素添加了clear:both;属性,为了解释这个属性的作用,我们看下面的一段代码。
<div style="width: 150px; border: 1px solid #ccc;">
<div style="width: 100px; background: greenyellow;">div1</div>
<div style="width: 100px; background: blueviolet; float:left;">div2</div>
<div style="width: 120px; background: grey; clear:left;"></div>
</div>
<div style="width: 150px; border: 1px solid #ccc; margin-top: 20px;">
<div style="width: 100px; background: greenyellow;">div1</div>
<div style="width: 100px; background: blueviolet; float:left;">div2</div>
<div style="width: 120px; background: grey; "></div>
</div>
clear:left;会让元素跟在其左侧浮动元素的后面,而不会忽略前面的浮动元素,位于浮动元素后面。 同理,clear:right;则会清除元素右侧浮动元素的影响。 而clear:both;就是清除左右两侧的影响。
另外一种方式position:absolute;
不推荐这种方式,因为这需要改变父元素本身的position属性。也许在某种情况下,你可以修改。但是,如果你不能修改怎么办??
<div style="position:absolute;">
<div style="float: left;">postion:absolute clear float</div>
</div>
之所以会提到这个方式,是为了说明 前面两种方式(设置float和overflow:hidden;)清除浮动的原理:当给父元素设置overflow:hidden属性时,实际上父元素本身形成了一个BFC(Block Formating Context)。
独立的块级上下文可以包裹浮动流,全部浮动子元素也不会引起容器高度塌陷,就是说包含块会把浮动元素的高度也计算在内,所以就不用清除浮动来撑起包含块的高度。
形成一个BFC的情况:
根元素
float属性不为none
position为absolute或fixed
display为inline-block, table-cell, table-caption, flex, inline-flex
overflow不为visible
————————————————
清除浮动的三种方式
清除浮动的三种方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title> 清除浮动</title>
<style>
.son_1
float: left;
width: 300px;
height: 200px;
background-color: greenyellow;
.son_2
float: left;
width: 300px;
height: 200px;
background-color: skyblue;
.info
width: 300px;
height: 400px;
background-color: gray;
/* 第三种 */
.son_3
clear: both;
/* 第二种 */
.one::after
content: '';
/* 必须写成块级元素 */
display: block;
/* 我又不需要看见这个元素,对布局不会又=有影响 */
height: 0;
/* 核心代码 */
clear: both;
/* 隐藏掉这个盒子 */
visibility: hidden;
/* 第三种 */
.one::after,
.one::before
content: '';
/* 控制表格在一行 */
display: table;
.one::after
clear: both;
</style>
</head>
<body>
<div class="one">
<div class="son_1"></div>
<div class="son_2"></div>
<!-- <div class="son_3"></div> -->
</div>
<div class="info">
</div>
</body>
</html>
以上是关于css:清除浮动的三种方式及其原理的主要内容,如果未能解决你的问题,请参考以下文章