0

0

浅析CSS中的浮动与清理

巴扎黑

巴扎黑

发布时间:2017-04-15 09:05:24

|

1479人浏览过

|

来源于php中文网

原创

作为前端写了很多页面布局,但是浮动这块一直是我似懂非懂的盲点,一方面用浮动能实现很多布局,另一方面浮动造成的影响又会破坏布局让人头疼,所以今天就特地写篇博文解决这块盲点。

本文主要讨论以下几个问题:
1.浮动的原始用途
2.浮动为什么会有文本环绕效果
3.如何清理浮动造成的影响

浮动的原始用途

以下内容来自张鑫旭大神的《CSS float浮动的深入研究、详解及拓展(一)》:

假设现在CSS中没有浮动(float)属性,那么会变成一个什么样子。我们会发现,目前流行采用浮动方法实现的无论是分栏布局,还是列表排列我们都可以用其他一些CSS属性(不考虑table)代替实现,唯一一个实现不了的就是“文字环绕图片”,我是想不出来能有什么方法可以让文字环绕图片显示。好,这个替代不了的作用才是float真正的意义所在。

总结起来一句话:实现文本环绕图片的效果。

浮动为什么会有文本环绕效果

产生这个疑问主要来自于以往的印象:

立即学习前端免费学习笔记(深入)”;

浮动的元素是脱离文档流的。

咦?你都脱离文档流了不是应该和下方未浮动的元素重叠吗,为什么文本还能环绕你呢?

这个问题一直困扰着我,直到我看到《精通CSS》这本书。文中写到:

浮动会让元素脱离文档流,不再影响不浮动的元素。实际上,并不完全如此。如果浮动的元素后面有一个文档流中的元素,那么这个元素的框会表现得像浮动根本不存在一样。但是,框的文本内容会受到浮动元素的影响,会移动以留出空间。

也就是说,浮动元素的确脱离了文档流,因此文档流中的块框会无视浮动的元素,但是文本不会。这点与绝对定位的脱离文档流不一样。

知乎上张秋怡学姐的回答也印证了这一观点。

补充一点:文档流这个说法其实不准确,在W3C标准中,只有普通流(normal flow),但是许多国内文章和翻译的书籍里用的都是文档流,久而久之大家就都用文档流的说法了。

如何清理浮动造成的影响

其实浮动带来的影响主要是

1.元素脱离普通流造成的父元素高度塌陷
2.下方非文本元素与浮动元素重叠,破坏了原本布局

要清理这些影响,很多人都知道用clear属性,为什么clear能清除浮动呢?

有两种说法:
1.浏览器在设置clear元素的顶上添加足够多的外边距,使元素上边框边界垂直下降到浮动元素下外边距的下面。
2.在设置clear元素的上外边距之上增加清除空间,而外边距本身不改变。

前者是CSS1和CSS2的实现原理,后者是CSS2.1的实现原理。但无论哪种都达到了给浮动的元素留出了垂直空间,看上去清除了浮动的效果。同时,在设置clear元素之上填充的空间是实际存在于普通流中的。因此,父元素高度被撑开了。

关于清除浮动,其实还有许多方法。在《那些年我们一起清除过的浮动》这篇文章里,将清除浮动的方法简单分为两类:

1.通过在浮动元素的末尾添加一个空元素,设置 clear:both属性,after伪元素其实也是通过 content 在元素的后面生成了内容为一个点的块级元素;
2.通过设置父元素 overflow 或者display:table 属性来闭合浮动。

几乎所有清除浮动的方法都可以归纳到这两类中,这里结合上面的博文谈一谈,添加伪元素的方法:

1.display: block,使生成的元素以块级元素显示,占满剩余空间。
2.在content中添加一个点,因为这个字符非常小。
3.设置height为0,因为不希望这个新的内容占据空间破坏布局高度。
4.将visibility设置为hidden,使生成的内容不可见,允许可能被生成的内容盖住的部分可以点击和交互。
5.clear: both清理浮动的影响

代码如下:

.clearfix:after {
    display: block;
    content: ".";
    height: 0;
    visibility: hidden;
    clear: both;
}

这种方法在大多数现代浏览器中都是有效的,也是比较推荐的。至于其他方法网上有很多,这里就不详细讲了。

本文借鉴了部分其他博客与文档,附上链接:

参考链接:

CSS clear属性

CSS 浮动

理解CSS浮动与清除浮动

那些年我们一起清除过的浮动

Sologo AI
Sologo AI

SologoAI 是一款AI在线LOGO生成工具,帮助用户快速创建独特且专业的品牌标识和配套VI设计。

下载

noraml flow

CSS float浮动的深入研究、详解及拓展(一)

张秋怡的回答


作为前端写了很多页面布局,但是浮动这块一直是我似懂非懂的盲点,一方面用浮动能实现很多布局,另一方面浮动造成的影响又会破坏布局让人头疼,所以今天就特地写篇博文解决这块盲点。

本文主要讨论以下几个问题:
1.浮动的原始用途
2.浮动为什么会有文本环绕效果
3.如何清理浮动造成的影响

浮动的原始用途

以下内容来自张鑫旭大神的《CSS float浮动的深入研究、详解及拓展(一)》:

假设现在CSS中没有浮动(float)属性,那么会变成一个什么样子。我们会发现,目前流行采用浮动方法实现的无论是分栏布局,还是列表排列我们都可以用其他一些CSS属性(不考虑table)代替实现,唯一一个实现不了的就是“文字环绕图片”,我是想不出来能有什么方法可以让文字环绕图片显示。好,这个替代不了的作用才是float真正的意义所在。

总结起来一句话:实现文本环绕图片的效果。

浮动为什么会有文本环绕效果

产生这个疑问主要来自于以往的印象:

立即学习前端免费学习笔记(深入)”;

浮动的元素是脱离文档流的。

咦?你都脱离文档流了不是应该和下方未浮动的元素重叠吗,为什么文本还能环绕你呢?

这个问题一直困扰着我,直到我看到《精通CSS》这本书。文中写到:

浮动会让元素脱离文档流,不再影响不浮动的元素。实际上,并不完全如此。如果浮动的元素后面有一个文档流中的元素,那么这个元素的框会表现得像浮动根本不存在一样。但是,框的文本内容会受到浮动元素的影响,会移动以留出空间。

也就是说,浮动元素的确脱离了文档流,因此文档流中的块框会无视浮动的元素,但是文本不会。这点与绝对定位的脱离文档流不一样。

知乎上张秋怡学姐的回答也印证了这一观点。

补充一点:文档流这个说法其实不准确,在W3C标准中,只有普通流(normal flow),但是许多国内文章和翻译的书籍里用的都是文档流,久而久之大家就都用文档流的说法了。

如何清理浮动造成的影响

其实浮动带来的影响主要是

1.元素脱离普通流造成的父元素高度塌陷
2.下方非文本元素与浮动元素重叠,破坏了原本布局

要清理这些影响,很多人都知道用clear属性,为什么clear能清除浮动呢?

有两种说法:
1.浏览器在设置clear元素的顶上添加足够多的外边距,使元素上边框边界垂直下降到浮动元素下外边距的下面。
2.在设置clear元素的上外边距之上增加清除空间,而外边距本身不改变。

前者是CSS1和CSS2的实现原理,后者是CSS2.1的实现原理。但无论哪种都达到了给浮动的元素留出了垂直空间,看上去清除了浮动的效果。同时,在设置clear元素之上填充的空间是实际存在于普通流中的。因此,父元素高度被撑开了。

关于清除浮动,其实还有许多方法。在《那些年我们一起清除过的浮动》这篇文章里,将清除浮动的方法简单分为两类:

1.通过在浮动元素的末尾添加一个空元素,设置 clear:both属性,after伪元素其实也是通过 content 在元素的后面生成了内容为一个点的块级元素;
2.通过设置父元素 overflow 或者display:table 属性来闭合浮动。

几乎所有清除浮动的方法都可以归纳到这两类中,这里结合上面的博文谈一谈,添加伪元素的方法:

1.display: block,使生成的元素以块级元素显示,占满剩余空间。
2.在content中添加一个点,因为这个字符非常小。
3.设置height为0,因为不希望这个新的内容占据空间破坏布局高度。
4.将visibility设置为hidden,使生成的内容不可见,允许可能被生成的内容盖住的部分可以点击和交互。
5.clear: both清理浮动的影响

代码如下:

.clearfix:after {
    display: block;
    content: ".";
    height: 0;
    visibility: hidden;
    clear: both;
}

这种方法在大多数现代浏览器中都是有效的,也是比较推荐的。至于其他方法网上有很多,这里就不详细讲了。


相关专题

更多
c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

22

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

24

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

99

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

132

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

15

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

61

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

63

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 23.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号