css浮动(为什么要清除浮动?清除浮动有哪几种方式?)

news/2024/11/22 18:30:03/

为什么要清除浮动?

清除·浮动主要是为了清除浮动元素造成的影响,使浮动元素不会影响其后元素的布局

  • 防止父元素高度塌陷:当元素浮动后,它会脱离一个标准文档流,不再占用原先的布局空间。如果一个父元素内只有浮动元素,那么该父元素的高度会塌陷为0。清除浮动可以解决这个问题,使父元素根据浮动元素的高度自动扩展高度。
  • 防止浮动元素覆盖后续元素:当元素浮动后,后续元素会忽略它并填补其原先的空间。这可能导致浮动元素覆盖后续元素,影响页面布局。清除浮动可以解决这个问题,保证浮动元素不会影响后续元素的布局。
  • 方便给浮动元素添加边距:当元素浮动后,它的外边距不会影响其后元素的布局。如果不清除浮动,添加边距只会使浮动元素覆盖更大的区域,而不会真正创建边距空间。清除浮动可以使外边距生效,真正产生边距效果。
  • 使浮动布局更加可控:通过清除浮动,可以很好地解决浮动布局带来的各种问题,使浮动元素不会对布局产生意想不到的影响。这使得浮动布局变得更加可控。

清除浮动有哪几种方式?

  • 清除浮动元素后的第一个块级元素添加clear属性,值为浮动方向(left、right、both)。这会强制该元素不允许浮动元素影响其布局。
  • 父元素添加overflow属性,值为hidden或auto。这会创建一个BFC(块级格式化上下文),内部的浮动元素不会影响外部元素。
  • 父元素添加after伪元素,并设置clear属性。这会向父元素添加一个清除浮动的元素。
  • 父元素手动添加高度(不推荐)

演示

1.(1)因为浮动,p元素和两个child元素仿佛同在第一行

image-20230815224047974

<!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>#main {width: 500px;height: 300px;background: #cccccc;}#child1 {width: 100px;height: 100px;background: #f000f0;/* 脱离文档流,空间释放 */float: right;}#child2 {width: 100px;height: 100px;background: #0000ff;float: right;}p {background: yellow;}</style>
</head>
<body><div id="main"><div id="child1"></div><div id="child2"></div><p>我是p元素</p></div>
</body>
</html>

(2)p元素添加clear属性

image-20230815224021901

<!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>#main {width: 500px;height: 300px;background: #cccccc;}#child1 {width: 100px;height: 100px;background: #f000f0;/* 脱离文档流,空间释放 */float: right;}#child2 {width: 100px;height: 100px;background: #0000ff;float: right;}p {background: yellow;/* 为块级元素添加clear属性 */clear: right;}</style>
</head>
<body><div id="main"><div id="child1"></div><div id="child2"></div><p>我是p元素</p></div>
</body>
</html>

2.(1)父元素高度塌陷

image-20230815224223632

<!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>#main {width: 500px;/* height: 300px; */background: #cccccc;}#child1 {width: 100px;height: 100px;background: #f000f0;/* 脱离文档流,空间释放 */float: right;}#child2 {width: 100px;height: 100px;background: #0000ff;float: right;}p {background: yellow;/* 为块级元素添加clear属性 */clear: right;}</style>
</head>
<body><div id="main"><div id="child1"></div><div id="child2"></div><!-- <p>我是p元素</p> --></div>
</body>
</html>

(2)解决方式

image-20230815224449708

  • 方式一:清除浮动元素后的第一个块级元素添加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>#main {width: 500px;/* height: 300px; */background: #cccccc;}#child1 {width: 100px;height: 100px;background: #f000f0;/* 脱离文档流,空间释放 */float: right;}#child2 {width: 100px;height: 100px;background: #0000ff;float: right;}p {background: yellow;/* 为块级元素添加clear属性 */clear: right;}.clear {clear: both;}</style>
</head>
<body><div id="main"><div id="child1"></div><div id="child2"></div><!-- <p>我是p元素</p> --><div class="clear"></div></div>
</body>
</html>
  • 方式二:父元素添加after伪元素,并设置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>#main {width: 500px;/* height: 300px; */background: #cccccc;}#child1 {width: 100px;height: 100px;background: #f000f0;/* 脱离文档流,空间释放 */float: right;}#child2 {width: 100px;height: 100px;background: #0000ff;float: right;}p {background: yellow;/* 为块级元素添加clear属性 */clear: right;}/* .clear {clear: both;} *//* 伪元素默认是行元素 */#main::after {content: "";/* block clear:both才会生效 */display: block;clear: both;}</style>
</head>
<body><div id="main"><div id="child1"></div><div id="child2"></div><!-- <p>我是p元素</p> --><div class="clear"></div></div>
</body>
</html>

image-20230815225707305

<!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>#main {width: 500px;/* height: 300px; */background: #cccccc;}#child1 {width: 100px;height: 100px;background: #f000f0;/* 脱离文档流,空间释放 */float: right;}#child2 {width: 100px;height: 100px;background: #0000ff;float: right;}p {background: yellow;/* 为块级元素添加clear属性 */clear: right;}/* .clear {clear: both;} *//* 伪元素默认是行元素 */#main::after {content: "";/* block clear:both才会生效 */display: block;clear: both;}#main2 {background: #000000;}</style>
</head>
<body><div id="main"><div id="child1"></div><div id="child2"></div></div><div id="main2"><div id="child1"></div><div id="child2"></div></div>
</body>
</html>

image-20230815225944349

父元素添加overflow属性

<!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>#main {width: 500px;/* height: 300px; */background: #cccccc;}#child1 {width: 100px;height: 100px;background: #f000f0;/* 脱离文档流,空间释放 */float: right;}#child2 {width: 100px;height: 100px;background: #0000ff;float: right;}p {background: yellow;/* 为块级元素添加clear属性 */clear: right;}/* .clear {clear: both;} *//* 伪元素默认是行元素 */#main::after {content: "";/* block clear:both才会生效 */display: block;clear: both;}#main2 {background: #000000;overflow: hidden;}</style>
</head>
<body><div id="main"><div id="child1"></div><div id="child2"></div></div><div id="main2"><div id="child1"></div><div id="child2"></div></div>
</body>
</html>

http://www.ppmy.cn/news/1035605.html

相关文章

Linux 设置 ssh 内网穿透

背景&#xff1a;有三台机器A、B、C&#xff0c;机器 A 位于某局域网内&#xff0c;能够连接到互联网。机器 B 有公网 IP&#xff0c;能被 A 访问到。机器 C 位于另外一个局域网内&#xff0c;能够连接到互联网&#xff0c;能够访问 B。 目标&#xff1a;以 B 为中介&#xff…

ASP.NET WEB API通过SugarSql连接MySQL数据库

注意&#xff1a;VS2022企业版可以&#xff0c;社区版可能存在问题。实体名称和字段和数据库中的要一致。 1、创建项目&#xff0c;安装SqlSugarCore、Pomelo.EntityFrameworkCore.MySql插件 2、文件结构 2、appsettings.json { “Logging”: { “LogLevel”: { “Default”: …

给对象添加新的属性

使用点 let obj {} obj.name "zy"使用方括号 let obj {} obj[name] "zy"使用assign 也以用来复制对象。 Object.assign({},{name:zy,age:10})扩展运算符 ES6新增语法&#xff0c;可以将两个对象合并成一个对象。 let obj1 {appid:"office&…

如何卖 Click to WhatsApp 广告最有效

2022年&#xff0c;大多数直接面向消费者的品牌都面临相同挑战—— Facebook 和 Instagram 的广告成本大幅增加。Business Insider 报导指出&#xff0c;2021年 Facebook 广告每次点击的平均成本&#xff08;average cost per click&#xff09;达到0.974美元&#xff0c;按年升…

【Spring中MySQL连接错误】Cannot load driver class: com.mysql.cj.jdbc.Driver

Caused by: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method ‘dataSource’ threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: com.mysql.cj.jdbc.Driver Caused by: java.lang.IllegalState…

XXLJOB 怎么用

目录 1、数据库执行sql语句&#xff0c;建立表 2、配置Admin &#xff0c;连接xxl_job数据库 3、启动admin&#xff0c;访问 http://localhost:8080/xxl-job-admin 4、需要定时任务的微服务里导入依赖 5、配置yml&#xff08;admin地址&#xff0c;执行器名字 端口&#x…

算法|Day39 动态规划7

LeetCode 70- 爬楼梯 &#xff08;进阶&#xff09; 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目描述&#xff1a;假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可…

分块 莫队

CF940F Machine Learning 莫队维护区间每个数字出现的次数&#xff0c;维护某个出现次数是否出现过&#xff0c;暴力枚举mex即可&#xff0c;易证每次枚举最多 n \sqrt n n ​次 CF375D Tree and Queries 树转链&#xff0c;莫队维护区间每个颜色出现的次数&#xff0c;如果再…