float
大约 3 分钟
来源:MDN-float
浮动的特性
- 浮动的元素会脱离标准流(脱标),不在保留原来的位置
- 浮动的元素具有行内块元素的特性,浮动的盒子之间没有缝隙,以顶部对齐
- 如果父级盒子装不下这些浮动的盒子,多出的盒子会另起一行对齐
| 属性值 | 含义 |
|---|---|
| none | 默认不浮动 |
| left | 左浮动 |
| right | 右浮动 |
元素脱离标准流(脱标)的特点
块元素
- 块元素不在独占一行
- 脱离文档流以后,块元素的宽度和高度默认都会被内容撑开
行内元素
- 行内元素脱离文档流以后会变成块元素,特点和块元素一样
注意: 脱离文档流以后,不需要在区分块和行内了
浮动的注意事项
- 一个盒子里面有多个子盒子,如果其中一个子盒子浮动了,那么其他兄弟也应该浮动,以防引起问题
- 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流
- 多个块级元素纵向排列找标准流。多个块级元素横向排列找浮动
- 如果要实现文字环绕效果,可以使用浮动(也是浮动最初产生的目的),定位则不可以
为什么要清除浮动?
由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子的高度为 0 时,就会影响父级盒子之后的盒子。
- 清除浮动的本质是清除浮动元素脱离标准流造成的影响
- 如果父盒子本身有高度,则不需要清除浮动
- 清除浮动后,父级盒子会根据浮动的子盒子自动检测高度。父级盒子有了高度,就不会影响下面的标准流了
clear标签
| 属性值 | 说明 |
|---|---|
| left | 清除左侧浮动的影响 |
| right | 清除右侧浮动的影响 |
| both | 左右两边同时清除 |
清除浮动的方法有哪些?
- 父级添加 after 伪元素
.clearfix:after {
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix {
/* IE6、7 专有 */
zoom: 1;
}
- 父级添加双伪元素
.clearfix:before,
.clearfix:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
*zoom: 1;
}
- 父级添加 overflow 属性
可以给父级添加 overflow 属性,并将其属性值设置为 hidden、 auto 或 scroll - 额外标签法(w3c 推荐的方法)
额外标签法也叫隔墙法, 就是在最后一个浮动的子元素后面添加一个额外标签(必须是块级元素), 添加清除浮动样式。例如<div style=" clear:both"></div>,或者添加其他标签也可以
| 方法 | 代表网站 | 优点 | 缺点 |
|---|---|---|---|
| 父级添加双伪元素 | 小米、腾讯 | 代码简洁 | 照顾低版本浏览器 |
| 父级添加 after 伪元素 | 百度、淘宝、网易 | 没有增加标签、结构更简单 | 照顾低版本浏览器 |
| 父级添加 overflow 属性 | 无 | 代码简洁 | 无法显示溢出部分 |
| 额外标签法(w3c 推荐的方法) | 无 | 通俗易懂、书写方便 | 添加许多无意义的标签,结构化较差 |