# 浮动与清除浮动
# 相关知识
# float 属性的取值
- left:元素向左浮动
- right:元素向右浮动
- none:默认值,元素不会浮动,并会显示在其文本中出现的位置
# 特性
- 浮动元素会从普通文档流中脱离,但浮动元素影响的不仅是自己,它会影响周围的元素对其进行环绕;
- 不管一个元素是行内元素还是块级元素,只要被设置了浮动,那浮动元素就会形成一个块级框,可以设置它的宽度和高度,因此浮动元素常常用于制作横向配列的菜单,可以设置大小并且横向排列。
# 浮动元素的展示在不同情况下会有不同的规则
- 浮动元素在浮动的时候,其 margin 不会超过包含块的 padding
- 如果两个元素一个向左浮动,一个向右浮动,左浮动元素的 margin-right 不会和右元素的 margin-left 相邻
- 如果有多个浮动元素,浮动元素会按顺序排下来而不会发生重叠
- 如果有多个浮动元素,后面的元素高度不会超过前面的元素,并且不会超过包含块
- 如果有非浮动元素和浮动元素同时存在,并且非浮动元素在前,则浮动元素不会高于非浮动元素
- 浮动元素会尽可能地向顶端对齐、向左或向右对齐
# 重叠问题
- 行内元素与浮动元素发生重叠,其边框、背景和内容都会显示在浮动元素之上
- 块级元素与浮动元素发生重叠时,边框和背景会显示在浮动元素之下,内容会显示在浮动元素之下
# clear 属性
确保当前元素的左右两侧不会有浮动元素,clear 只对元素本身的布局起作用
- left
- right
- both
# 父元素高度塌陷问题
为什么需要清除浮动
一个块级元素如果没有设置高度,其高度是由子元素撑开的。如果对子元素设置了浮动,那么子元素就会脱离文档流,也就是说父元素没有内容可以撑开其高度,这样父级元素的高度就会被忽略,这就是所谓的高度塌陷。
# 清除浮动的方法
给父元素定义高度
- 优点:操作简单
- 缺点:高度定死
添加一个空元素
<div class="clear"></div> (.clear { clear: both })
- 优点:浏览器支持好
- 缺点:凭空多出很多无用空节点
让父元素也一起浮动
- 缺点:无法解决实际问题
父元素设置为
display: table
- 缺点:会产生新的问题
父元素设置
overflow: hidden auto
- 缺点:无法显示溢出的元素
父元素伪元素设置清除浮动
.father { ... } .father:: after { content: ' '; display: block; height: 0; clear: both; visibility: hidden; }