清除浮动的四种方式及其原理

article/2025/9/17 21:30:32

前言:

什么是浮动,浮动给我们造成了什么困扰,我们该使用什么方式来解决它。下面会介绍到为什么要清除浮动以及清除浮动的四种方式。


目录:

    • 前言:
    • 一、为什么要清除浮动
    • 二、清除浮动的第一种方式---给父级盒子添加高度
    • 三、清除浮动的第二种方式---额外标签法
    • 四、清除浮动的第三种方式---给父级添加 overflow 属性
    • 五、清除浮动的第四种方式---给父级添加after伪元素


一、为什么要清除浮动

在我们的开发过程中,浮动元素是css中最常用的属性,浮动起来的元素会脱离标准流,如果我们的父级盒子没有设置高度就会造成父级盒子的高度塌陷,就会影响我们下面盒子的正常显示。
什么是高度塌陷呢,我们用一个小小的案例来了解一下,请看下面代码。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>.father {width: 100%;border: 2px solid red;}.son {width: 300px;height: 300px;border: 2px solid blue;}.box {width: 100%;height: 300px;background-color: green;}</style></head><body><div class="father"><div class="son"></div><div class="son"></div></div><div class="box"></div></body>
</html>

效果图如下
在这里插入图片描述
请注意此时我并没有给father这个盒子设置高度,接下来给son盒子设置一个左浮动

 	.son {width: 300px;height: 300px;border: 2px solid blue;float: left;}

请看效果图
在这里插入图片描述
我们发现father盒子成为一条红线,box盒子跑到son盒子的后面,这就是因为father盒子没有高度,在没有设置浮动之前son盒子是属于标准流的,son盒子会把father盒子撑开,一旦给son盒子设置浮动,它就会立即脱离标准流浮动起来(就是离开father盒子),而father没有设置高度,在失去son盒子支撑的时候就会变成一条横线,随即下面的box盒子就会跟随father盒子跑上去。这就是造成高度塌陷的原因。
高度塌陷会影响到我们下面的盒子,所以我们需要将浮动的son盒子重新塞回father盒子,也就是清除浮动,让我们的box盒子正常显示。


二、清除浮动的第一种方式—给父级盒子添加高度

造成高度塌陷的原因就是父盒子没有高度,我们只需要给父盒子添加一个高度即可

 	.father {width: 100%;border: 2px solid red;height: 300px;}

效果如下
在这里插入图片描述
原理: 我们上面说到,造成高度塌陷的原因就是父盒子没有高度,我们只需要给父盒子添加一个高度即可,但是这种方式并不推荐使用,因为有很多局限性,况且son盒子依然是脱离标准流,并没有回到father盒子中,所以做一个简单的了解即可。


三、清除浮动的第二种方式—额外标签法

额外标签法会在浮动元素末尾添加一个空的标签。给这个标签设置clear属性,注意这个标签必须是块级元素

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>.father {width: 100%;border: 2px solid red;}.son {width: 300px;height: 300px;border: 2px solid blue;float: left;}.box {width: 100%;height: 300px;background-color: green;}.clear {clear: both;} //为标签设置清除浮动</style></head><body><div class="father"><div class="son"></div><div class="son"></div><div class="clear"></div></div><div class="box"></div>//添加清除浮动标签</body>
</html>

效果图如下
在这里插入图片描述
原理: clear:both的作用是不允许周围有浮动现象,所以就可以达到清除浮动的效果,但是这样做,对于比较复杂的页面就显得结构非常的乱,所以不推荐使用


四、清除浮动的第三种方式—给父级添加 overflow 属性

这个方法是向浮动元素的父级盒子添加voerflow:hidden属性,这样就可以达到清除浮动的效果

	.father {width: 100%;border: 2px solid red;overflow: hidden;}

效果如下
在这里插入图片描述
原理: 让我们先来了解一下BFC(Block Formatting Context),BFC全称是块级格式化上下文,用于对块级元素排版,默认情况下只有根元素(body)一个块级上下文,但是如果一个块级元素设置了float:left,overflow:hidden或position:absolute样式,就会为这个块级元素生产一个独立的块级上下文,使这个块级元素内部的排版完全独立。也就是说独立的块级上下文可以包裹浮动流,全部浮动子元素也不会引起容器高度塌陷,就是说包含块会把浮动元素的高度也计算在内,这样就达到了清除浮动的效果,但是overflow:hidden本身的意思是溢出的元素隐藏显示,所以说有一定的缺点,大家可以根据情况来使用它。


五、清除浮动的第四种方式—给父级添加after伪元素

利用after伪元素定义一个clearfix类,浮动元素的父级元素调用此类可以实现清除浮动的效果

	.clearfix::after {content: "";display: block;height: 0;clear: both;visibility: hidden;}.clearfix {/* IE6、7 专有 */*zoom: 1;}
<body><div class="father clearfix"><div class="son"></div><div class="son"></div></div><div class="box"></div></body>

效果图如下
在这里插入图片描述
原理: 这个方式的原理和额外标签法的方式异曲同工,只是利用伪类向浮动元素的父盒子的后面添加了一个块级元素,至于*zoom: 1这个属性,是为了兼容低版本的浏览器。这种方式没有增加标签,结构更简单,也没有overflow带来的隐藏影响,很推荐使用这样的方式。


能力有限,文章难免会有不全面的问题,欢迎大家交流指正


http://chatgpt.dhexx.cn/article/icPjTorG.shtml

相关文章

清除浮动的五种方法详解

前言&#xff1a;   在非IE浏览器&#xff08;如Firefox&#xff09;下&#xff0c;当容器的高度为auto&#xff0c;且容器的内容中有浮动&#xff08;float为left或right&#xff09;的元素&#xff0c;在这种情况下&#xff0c;容器的高度不能自动伸长以适应内容的高度&…

清除浮动的几种方法

浮动的布局比标准流高了半个层级&#xff0c;因此它并不占标准流下&#xff0c;如果子元素浮动了&#xff0c;父元素又没有设置高度&#xff0c;此时子元素无法撑开盒子&#xff0c;就如同下面这种情况 没加浮动之前 给son加上浮动之后 可以看到&#xff0c;父元素pink的颜色消…

BFC以及清除浮动四种方式

什么是BFC 先了解常见的三种定位方案&#xff1a; bfc是普通流&#xff1a; 可以将bfc看作是一个属性 2.如何触发bfc 1&#xff0e;根元素() 2&#xff0e;浮动元素(元素的float不是none) 3.绝对定位元素(元素的position为absolute 或 fixed) 4.display为inline-block、tabl…

html清除浮动有几种方法,HTML中清除浮动的几种方法

清除float的常见几种方式: 清除浮动方法(1)在浮动元素后面使用一个空的自身清除浮动的元素。 例如 实例:清除容器中子元素的浮动,让父元素塌陷的高度恢复。 CSS代码: .content{width:100px; border:1px dotted red; } .div-test{width:100px; height:100px; border:1px dot…

css清除浮动的几种方式

前言&#xff1a; CSS 的 Float&#xff08;浮动&#xff09;&#xff0c;会使元素向左或向右移动&#xff0c;其周围的元素也会重新排列。 Float&#xff08;浮动&#xff09;&#xff0c;往往是用于图像&#xff0c;但它在布局时一样非常有用。 css浮动 但是使用了 float …

清除浮动的4种方式

为什么要清除浮动&#xff1f; 清除浮动主要是为了解决&#xff0c;父元素因为子级元素浮动引起的内部高度为0的问题 如下: 给父盒子设置一个boder&#xff0c;内部放两个盒子一个big 一个small&#xff0c;未给big和small设置浮动&#xff0c;则他们会默认撑开父盒子。 当我给…

左联,右联和内联的区别(图示)

感谢midy&#xff01; 转载于:https://www.cnblogs.com/0633shj/archive/2008/05/12/1193660.html

左联接、右联接、内联接、自然联接

前几日面试。面试小哥问我左联接、右联接是什么。一时语塞。好像根本没用到过&#xff0c;也就没在意过&#xff0c;一直都是简单的自然连接。 左联接&#xff1a;也叫左外联接。就是以左表为主&#xff0c;右表为辐&#xff0c;ON 后跟的条件对右表生效。结果中包含全部左表数…

SQL的左联,右联,内联的关系

相信很多人在刚开始使用数据库的INNER JOIN、LEFT JOIN和RIGHT JOIN时&#xff0c;都不太能明确区分和正确使用这三种JOIN操作&#xff0c;本文通过一个简单的例子通俗易懂的讲解这三者的区别&#xff0c;希望对大家能带来帮助。 首先&#xff0c;我们创建示例数据库和表。同时…

sql语句中内联左联右联的区别?

内联查询&#xff1a; inner join ... on ... &#xff0c;不以谁为主&#xff0c;列出满足条件的查询结果集&#xff1b; 左联查询&#xff1a;left join .... on ... &#xff0c; 以昨表为主&#xff0c;列出满足条件的结果集&#xff1b; 右联查询&#xff1a;right join…

SQL内联、左联、右联、全联查询语法

概述&#xff1a;   联合查询效率较高&#xff0c;举例子来说明联合查询&#xff1a;内联inner join 、左联left outer join 、右联right outer join 、全联full outer join 的好处及用法。   联合查询效率较高&#xff0c;以下例子来说明联合查询(内联、左联、右联、全联…

mysql多表左联分组查询

在做项目的时候需要实现一个多表左联加分组查询的逻辑。 下图是前端要显示的数据&#xff1a; 数据来源于三张表&#xff1a; ETC表&#xff1a;cap_etc车辆表&#xff1a;cap_vehicleETC消费表&#xff1a;cap_etc_record 下图是后台的三张数据表&#xff1a; cap_etc: ca…

左联右联内联

left join &#xff08;左连接&#xff09;&#xff1a;返回包括左表中的所有记录和右表中连接字段相等的记录。 right join &#xff08;右连接&#xff09;&#xff1a;返回包括右表中的所有记录和左表中连接字段相等的记录。 inner join &#xff08;等值连接或者叫内连接…

uniapp使用scroll-view实现菜单的左联右和右联左

左联右 <!-- 左 菜品分类--><view class"order-left"><scroll-view scroll-y"true" class"scroll-Hei" :scroll-with-animation"true" :enhanced"true":show-scrollbar"false"><block v-fo…

join操作-内联,左外联,右外联,交叉联,全联

在数据库中新建三张表格&#xff1a; T1 T2 T3 普通查询&#xff1a; select * from T1, T3 where T1.user_id T3.user_id 结果&#xff1a; --------------------------------------------------------------- join就是把两张表格等效当做一张表来查 内联(inner join)&a…

mysql的左联、右联、内联查询

内联查询&#xff1a;where会作用到两张表 左联查询&#xff1a;where作用在右表&#xff0c;左表全部数据都会被检索出来&#xff0c;右表只有满足where里面条件的才会被检索出来 右联查询&#xff1a;where作用在左表&#xff0c;右表全部数据都会被检索出来&#xff0c;左表…

SQL关联查询(左联,右联,内联,外联,自关联)

在使用数据库查询语句时&#xff0c;单表的查询有时候不能满足项目的业务需求&#xff0c;在项目开发过程中&#xff0c;有很多需求都是要涉及到多表的连接查询&#xff0c;总结一下mysql中的多表关联查询 一&#xff0c;内连接查询 是指所有查询出的结果都是能够在连接的表中…

SQL中,表之间的左联和右联是什么意思

首先来看张图片&#xff1a; 定义&#xff1a; 左联&#xff1a;首先取出A表中所有数据&#xff0c;然后再加上A、B表通过关联字段key查询到的数据 右联&#xff1a;首先取出B表中所有数据&#xff0c;然后再加上A、B表通过关联字段key查询到的数据 内联&#xff1a;查询A、…

数据库内联、左联和外联的区别

INNER JOIN&#xff08;内联&#xff09;&#xff1a;两个表a,b 相连接&#xff0c;取出符合连接条件的数据&#xff0c;数据集C LEFT JOIN&#xff08;左联&#xff09;&#xff1a;先返回左表的所有行&#xff0c;再加上符合连接条件的匹配行&#xff0c;数据集A1数据集C R…

RDD、矩阵基础——3. 矩阵、向量(Breeze、BLAS)

MLlib库底层的Vector&#xff08;向量&#xff09;、Matrix&#xff08;矩阵&#xff09;运算使用了 Breeze库和BLAS库。 Breeze库提供了相应计算的接口&#xff08;Linalg&#xff09;。 但是在MLlib里面同时也提供了Vector和Linalg等的实现。 BLAS&#xff08;线性代数运…