1前言
你有没有过这样的经历?想让元素们排排站,结果它们却像脱缰的野马到处乱窜?今天咱们就来聊聊 CSS 里最让人又爱又恨的 "调皮鬼"------ 浮动(float)。
- 什么是浮动?其实是个 "游泳健将"
最初设计浮动,可不是为了让元素排队,而是为了实现文字环绕图片的效果,就像杂志排版那样:
html
<div class="box">
<img src="美女.jpg" style="float: left">
<p>这里是一堆文字...(会自动绕开图片)</p>
</div>
设置float: left,图片往左一漂,文字就懂事地绕着它走,堪称网页版 "流水不争先"。
- 浮动的 "叛逆期":说好的排队呢?
当我们想让多个元素水平排列时,浮动就成了香饽饽。比起display: inline-block
的 "间隙 bug"(需要给父元素加font-size: 0
这种黑魔法),float: left
显得简单粗暴:
html
li {
float: left; /* 元素:"收到,我往左漂!" */
width: 300px;
height: 100px;
}
但这小子叛逆得很!一旦漂起来就脱离文档流,亲爹(父元素)都不认了 ------ 父容器高度直接塌陷,就像被抽走了骨头.
- 收拾调皮鬼:清除浮动的五种 "家规"
面对叛逆的浮动元素,前辈们总结了五大管教方法:
- 给父元素定死高度:简单粗暴但不灵活,就像给孩子穿小鞋
- 加个空 div 当 "墙" :
<div style="clear: both"></div>
,有点浪费粮食 - 伪元素大法(推荐):
css
.parent::after {
content: ""; /* 念个咒语 */
display: block;
clear: both; /* 强制换行 */ }
-
给后续元素加 clear:让无辜元素背锅,不太地道
-
BFC 大法(推荐):把父元素变成 "独立王国"
html
.parent {
overflow: hidden; /* 启动结界 */
}
BFC:网页中的 "独立王国"
说到 BFC(块级格式化上下文),这可是解决 margin 重叠、浮动塌陷的终极大招。它就像个有严格家规的王国:
- 内部元素再调皮也影响不到外面
- 会老老实实计算浮动元素的高度
- 子元素的 margin 不会 "越级" 影响父元素
想创建 BFC 很简单,给元素加这些属性就行:
overflow: hidden/auto/scroll
position: absolute/fixed
display: flex/grid/inline-xxx
- 甚至
float: left/right
本身!
总结:跟浮动好好相处的秘诀
-
小范围布局(比如图文混排)用浮动很方便
-
大规模布局尽量用 Flex/Grid,别跟浮动死磕
-
用浮动必清浮动,伪元素和 BFC 是黄金搭档
-
BFC 不止能清浮动,解决 margin 重叠也是一把好手
记住这些,浮动就从调皮鬼变成乖宝宝啦!下次再遇到元素乱跑,不妨默念今天的 "魔法咒语"~