CSS学习12--清除浮动的本质及处理办法

清除浮动

前言

为什么要清除浮动?

浮动不占用原文档流的位置,可能会对后面的元素排版产生影响。因此需要在该元素中清除浮动,清除浮动后造成的影响。

一、清除浮动的本质

为了解决父级元素因为子级元素引起内部高度为0的问题。

html 复制代码
<html>
	<head>
		<style>
		* {
			padding: 0;
			margin: 0;
		}
		.box1 {
			width: 960px;
			/*height: 100px;*/
			background-color: red;
		}
		.box2 {
			width: 960px;
			height: 200px;
			background-color: purple;
		}
		.son1 {
			width: 150px;
			height: 100px;
			background-color: skyblue;
			float: left;
		}
		.son2 {
			width: 150px;
			height: 100px;
			background-color: pink;
			float: left;
		}
		</style>
	</head>
	<body>
		<div class="box1">
			<div class="son1"></div>
			<div class="son2"></div>
		</div>
		<div class="box2"></div>
	</body>
</html>

父级元素不定义高度是因为不知道盒子里面的内容有多少。

如果son1和son2都浮动了,父级元素没有高度,则会产生重叠。

二、清除浮动的方法

实际上叫做闭合浮动更好,清除浮动是把浮动的盒子圈到里面,让父盒子闭合出口和入口不让他们出来影响其他元素。

在CSS中,clear属性用于清除浮动,基本语法格式:

left

right

both 同时清除左右两侧浮动的影响

  1. 额外标签法

    在浮动盒子的后面添加一个空盒子。

    html 复制代码
    <div style="clear:both"></div>

    优点:通俗易懂,书写方便

    缺点:添加许多无意义标签,结构化较差,

    html 复制代码
    <html>
    	<head>
    		<style>
    		* {
    			padding: 0;
    			margin: 0;
    		}
    		.box1 {
    			width: 960px;
    			/*height: 100px;*/
    			background-color: red;
    		}
    		.box2 {
    			width: 960px;
    			height: 200px;
    			background-color: purple;
    		}
    		.son1 {
    			width: 150px;
    			height: 100px;
    			background-color: skyblue;
    			float: left;
    		}
    		.son2 {
    			width: 150px;
    			height: 100px;
    			background-color: pink;
    			float: left;
    		}
    		.clear {
    			clear: both;
    		}
    		</style>
    	</head>
    	<body>
    		<div class="box1">
    			<div class="son1"></div>
    			<div class="son2"></div>
    			<div class="clear"></div>
    		</div>
    		<div class="box2"></div>
    	</body>
    </html>
  2. 父级添加overflow方法

    给父级添加:overflow为hidden|auto|scroll都可以实现。

    优点:代码简洁

    缺点:内容增多时容易造成不会自动换行导致内容被隐藏,无法显示需要溢出的元素。

    html 复制代码
    <html>
    	<head>
    		<style>
    		* {
    			padding: 0;
    			margin: 0;
    		}
    		.box1 {
    			width: 960px;
    			/*height: 100px;*/
    			background-color: red;
    			overflow: hidden; /*触发BFC 清除浮动*/
    		}
    		.box2 {
    			width: 960px;
    			height: 200px;
    			background-color: purple;
    		}
    		.son1 {
    			width: 150px;
    			height: 100px;
    			background-color: skyblue;
    			float: left;
    		}
    		.son2 {
    			width: 150px;
    			height: 100px;
    			background-color: pink;
    			float: left;
    		}
    		</style>
    	</head>
    	<body>
    		<div class="box1">
    			<div class="son1"></div>
    			<div class="son2"></div>
    		</div>
    		<div class="box2"></div>
    	</body>
    </html>
  3. 使用after伪元素清除浮动

    :after方式为空元素的升级版,好处是不用单独加标签了

    html 复制代码
    .clearfix:after { 
    	content: "."; display: block; height: 0; clear: both; visibility: hidden;
    	}
    .clearfix { 
    		*zoom: 1; /**代表ie6.7能识别的*/
    	}

    优点:符合闭合浮动思想,结构语义化正确

    缺点:由于IE6-7不支持:after,使用zoom:1触发hasLayout。

    代表网站:百度、网易、淘宝等

    html 复制代码
    <html>
    	<head>
    		<style>
    		* {
    			padding: 0;
    			margin: 0;
    		}
    		.box1 {
    			width: 960px;
    			/*height: 100px;*/
    			background-color: red;
    		}
    		.box2 {
    			width: 960px;
    			height: 200px;
    			background-color: purple;
    		}
    		.son1 {
    			width: 150px;
    			height: 100px;
    			background-color: skyblue;
    			float: left;
    		}
    		.son2 {
    			width: 150px;
    			height: 100px;
    			background-color: pink;
    			float: left;
    		}
    		p::after {
    			content: "456";
    		}
    		.clearfix:after { /*:可以*/
    			content: "."; /*内容为小点,尽量加不要空,否则旧版本浏览器有空隙*/
    			display: block; /*转换为块级元素*/
    			height: 0; /*高度为0*/
    			visibility: hidden; /*隐藏盒子*/
    			clear: both;
    		}
    		.clearfix { 
    			*zoom: 1; /**代表ie6.7能识别的*/
    		}
    		</style>
    	</head>
    	<body>
    		<p>123</p>
    		<div class="box1 clearfix">
    			<div class="son1"></div>
    			<div class="son2"></div>
    		</div>
    		<div class="box2"></div>
    	</body>
    </html>
  4. 使用双伪元素清除浮动

    html 复制代码
    .clearfix:before, .clearfix:after { 
    	content: ""; 
    	display: table;
    	}
    .clearfix:after { 
    	clear: both;
    	}
    .clearfix { 
    		*zoom: 1; /**代表ie6.7能识别的*/
    	}

    优点:代码更简洁

    缺点:由于IE6-7不支持:after,使用zoom:1触发hasLayout。

    代表网站:小米、腾讯等

    html 复制代码
    <html>
    	<head>
    		<style>
    		* {
    			padding: 0;
    			margin: 0;
    		}
    		.box1 {
    			width: 960px;
    			/*height: 100px;*/
    			background-color: red;
    		}
    		.box2 {
    			width: 960px;
    			height: 200px;
    			background-color: purple;
    		}
    		.son1 {
    			width: 150px;
    			height: 100px;
    			background-color: skyblue;
    			float: left;
    		}
    		.son2 {
    			width: 150px;
    			height: 100px;
    			background-color: pink;
    			float: left;
    		}
    		p::after {
    			content: "456";
    		}
    		.clearfix:before,
    		.clearfix:after { /*:可以*/
    			content: ""; /*内容为空*/
    			display: table; /*触发bfc 防止外边距合并*/
    		}
    		.clearfix::after {
    			clear: both;
    		}
    		.clearfix { 
    			*zoom: 1; /**代表ie6.7能识别的*/
    		}
    		</style>
    	</head>
    	<body>
    		<p>123</p>
    		<div class="box1 clearfix">
    			<div class="son1"></div>
    			<div class="son2"></div>
    		</div>
    		<div class="box2"></div>
    	</body>
    </html>
相关推荐
蒙奇D索大2 分钟前
【数据结构】排序算法精讲|折半插入排序全解:高效优化、性能对比、实战剖析
数据结构·学习·考研·算法·排序算法·改行学it
有个人神神叨叨3 分钟前
odoo 学习- 01. Odoo 工程结构概览
学习
有个人神神叨叨3 分钟前
odoo 学习- 02. Odoo 核心框架探究
学习
小北方城市网4 分钟前
第 10 课:Node.js 后端企业级进阶 —— 任务管理系统后端优化与功能增强(续)
大数据·前端·vue.js·ai·性能优化·node.js
华仔啊5 分钟前
JavaScript 有哪些数据类型?它们在内存里是怎么存的?
前端·javascript
石像鬼₧魂石7 分钟前
SQLMap注入完整操作流程(含全部细节 靶机学习用)
学习
我有一棵树9 分钟前
淘宝 npm 镜像与 CDN 加速链路解析:不只是 Registry,更是分层静态加速架构
前端·架构·npm
zhousenshan10 分钟前
vue3基础知识100问
前端·vue.js
异界蜉蝣12 分钟前
Proxy vs Object.defineProperty:Vue3响应式原理的深度革命
开发语言·前端·javascript
前端早间课15 分钟前
Vue3路由实战:优雅封装+灵活拦截,解锁路由配置新姿势
前端·javascript·vue.js