28. 浮动 {ignore}
[toc]
在讲解常规流(Normal Flow)时,介绍过:视觉格式化模型,大体上将页面中盒子的排列分为三种方式:
- 常规流
- 浮动
- 定位
1. 应用场景
- 文字环绕
- 横向排列
使用浮动布局的很多效果都可以利用css3中的弹性盒模型来实现,但是,相对而言,浮动的兼容性会更好一些。所以有很多公司,他们在布局的时候,有时候还是会选择使用浮动来实现。
2. 浮动的基本特点
修改float
属性值为:
left
:左浮动,元素靠上靠左right
:右浮动,元素靠上靠右
默认值为none
- 当一个元素浮动后,元素必定为块盒。(
display
属性会自动变为block
) - 浮动元素的包含块,和常规流一样,为父元素的内容盒。
3. 盒子尺寸
属性值为 auto
- 宽度为
auto
时,适应内容的宽度; - 高度为
auto
时,适应内容的高度;(与常规流一致) margin
为auto
,相当于设置为0
;- 设置为
auto
无论哪个方向,都是0
;不过设置为其他值,还是会生效的。
- 设置为
属性值为百分比
- 规则与常规流一样;
4. 盒子排列
- 左浮动的盒子靠上靠左排列
- 右浮动的盒子考上靠右排列
- 浮动盒子在包含块中排列时,会避开常规流块盒
- 常规流块盒在排列时,无视浮动盒子
- 行盒在排列时,会避开浮动盒子
- 相邻的外边距不会发生合并
总结:
- 浮动盒子可以看到常规流的盒子(包括行盒和块盒);
- 常规流块盒看不到浮动盒子,但是行盒可以;
匿名行盒
如果文字没有在行盒中,浏览器会自动生成一个行盒包裹文字,该行盒叫做匿名行盒。 —— 文字环绕环绕效果
即:纯文本 等价于 常规流行盒。
行盒 实际上可以看做是 内容。
5. 高度坍塌
高度坍塌的根源:常规流盒子的自动高度(适应内容),在计算时,不会考虑浮动盒子。
因为,浮动盒子脱离常规流,所以,常规流盒子在计算高度时(适应内容),不会考虑浮动盒子。
解决办法:清除浮动;
涉及css属性:clear。
- 默认值:
none
left
:清除左浮动,该元素必须出现在前面所有左浮动盒子的下方right
:清除右浮动,该元素必须出现在前面所有右浮动盒子的下方both
:清除左右浮动,该元素必须出现在前面所有浮动盒子的下方
元素x
清除浮动并不是表示让 元素x
不浮动,而是让常规流的盒子在确认位置时,抬头看一下飘起来的浮动盒子 元素x
所在的位置,然后再排在这些浮动盒子的后面;
清除浮动三件套:
.clearfix::after {
content: '';
display: block;
clear: both;
}
通常将 clearfix
设置在发生高度坍塌的元素身上,也就是浮动元素的父级身上。
思考:为什么需要设置 display: block;
?
因为:伪元素默认是行盒,而clear只有在块盒中才会生效。
小结
浮动的应用场景
- 文字环绕效果
- 横排效果
浮动元素的特点
- 浮动元素必然是块盒
- 浮动元素的包含块和常规流一样,都是父元素的内容盒
浮动盒子尺寸设置
auto
- width、height设置为auto,都是表示适应内容;
- margin设置为auto,相当于设置为默认值0;
百分比
- 具体规则同常规流一致