[toc]
## 初衷
float初衷是为了实现文字环绕效果
为了实现这种效果,设置为float的元素会具备以下两个特性
- 父元素高度塌陷
- 行框盒子和浮动元素不会重叠(即使使用margin负值也是如此)
>**注意:** 这里说的是行框盒子,而不是外部的块状盒子
>
## clear
首先,只有**块级元素**设置才有效
clear作用本质是让**自己**不和float元素在一行显示,而不是让浮动元素怎么怎么样。
并且设置了clear属性对后面的浮动元素是不闻不问的,**只会抗拒前面的**浮动元素。(注意float:left/right 方向不同时,所谓的的前后也是不一样的)
一般来说我们若是`float:left`,那么若要清楚浮动,使用`clear:left/both`,即左侧抗浮动;若是`float:right`,则使用`claer:right/both`,即右侧抗浮动。
最后clear并不是完全清楚了浮动,它只是解决了塌陷问题。
比如,用clear清楚浮动仍然会发生margin重叠
## 形成"块"(BFC)
## 脱离文档流
和块级元素占位不冲突,不会撑开父级
![](https://box.kancloud.cn/f9d2fe5995b532e3f2b85c6ac4c15a96_311x145.png)
(图1)
### 块级元素在前
上面是float元素在前的情况,如果是块级元素在前,
那么float元素表现和文档流中元素一样,
任然会在**下一行**才显示
## 但不脱离文本流
### 文本/span在后
文字环绕(如图1)
### 文本/span在前
浮动元素会如下表现:
- 位置尽量靠上
- 在满足上一条规则的前提下,位置尽量靠左/右
![](https://box.kancloud.cn/38a6597ea31fe24fafb01784e3385cc7_325x283.png)
![](https://box.kancloud.cn/0bb2dec5d152db9d7da5dda925ec2e5b_385x223.png)
在保证红色span不被挤到下一行的前提下,会尽可能的让位给浮动的绿色span(这也可理解为浮动元素的尽量考上特性),
并且由于浮动元素尽量靠上,浮动元素在**一个行框盒子**中是可以和行级元素进行上下堆叠的(如果有空余位置),就像上面的第二个绿色span
## 与margin负值
浮动元素的前面如果是一个块级元素,`margin-top`依然有效。
浮动元素的前面如果也是一个占满一行的浮动元素,那么,`margin-top`也依然有效,
且还有一个很有意思的现象,如果使用`margin-left`负值,达到一定程度,会发现浮动元素跑到上面一行的末尾去了
这其实就是浮动元素`尽量靠上、尽量靠左`特性的体现
如果感觉还是不是很好理解,我们再来个普通点的例子,
我们让前面的浮动元素不占一整行,
![](https://box.kancloud.cn/ba8d6c55abec9437944b60c05cada3a1_693x221.png)
(是不是突然明白了点什么?道理其实是一样的,占据一整行只是比较特殊的一个栗子,但原理是一样的)
## 与flex
一个元素既可以作为flex项,又可以被浮动
flex相较于float的好处在于,flex既能让非行内元素变为行内元素,并且还不会失去其自适应性,
比如三个flex子项,一个左浮动,一个右浮动,剩下的那个将`flex`置为`1`,这样剩下的那个就会将flex容器剩下的空间撑满,也就是自适应
- 空白目录
- 未处理
- webpack中的css模块化
- CSS预处理器
- 效果
- 元素装饰与美化
- 颜色
- checkbox
- img
- background
- clip-path
- 字体
- 文本控制
- text-indent
- letter-spacing
- word-spacing
- word-break和word-wrap
- white-space
- text-align
- text-decoration
- text-transform
- first-letter
- first-line
- 有关CSS百分单位的那些奇葩事儿
- 破坏性、包裹性、块状化
- 强大的absolute
- padding
- relative
- 继承性
- fixed
- float
- BFC
- z-index
- overflow
- clip
- 最佳可访问性隐藏
- 关于scrollHeight/Width
- 包含块
- margin
- 布局系统
- 杂
- Flex
- Grid
- 自定义布局系统
- gutter实现思路
- 选择器
- 伪元素和伪类
- css3
- appearance
- CSS2.1
- tmp
- 未定义行为
- 焦点元素
- outline轮廓
- 替换元素
- 盒子模型
- 块级元素/盒子
- 标记盒子
- 容器盒子(内在盒子)
- 内联元素/盒子
- 字母X
- line-height
- vertical-align
- font-size
- 内联元素盒子模型新解
- line-height定义
- line-height与行内框盒子模型
- line-height与内联元素的高度机制
- line-height值
- line-height与图片
- vertical-align支持的属性值及组成
- vertical-align起作用前提
- vertical-align与图片
- vertical-align与line-height
- vertical-align前后不一的行为表现
- vertical-align实际应用
- line-height与height
- width/height与auto
- 最小内容宽度
- 最大内容宽度
- min/max-width/height注意事项
- 流:外部尺寸与内部尺寸
- 流体布局下的宽度分离原则
- height:auto
- 浏览器渲染原理
- 移动端