[toc]
## 什么是包含块
包含块,`containing block`
它是元素用来`计算`和`定位`的一个框
## 包含块的选择
### 初始包含快
每个元素至少有被一个包含块所包裹,这个包含块就是视口元素
### position为relative和static
position为relative和static时的包含块为最近的祖先盒是**块级**容器的元素,
也就是说一个元素若被一个span包裹,这个span并不是它的包含块,不会按照这个span来计算,其根本原因大概在于行级元素是内部(决定)尺寸,So它不能作为一个判断的根基
![](https://box.kancloud.cn/616fd506b8090cfbd505a686535aef3a_635x282.png)
### position:fixed
position:fixed元素的包含块为初始包含块,即视口
### position:absolute
position:absolute的元素的包含块由最近的position不为static的祖先元素建立。
通常情况下这个包含块由该**祖先的`padding box`边界**形成。(非定位的包含块为`content box`)
#### 定位且为inline
上面说的是通常情况下,但是在绝对定位下,包含块也可以是一个inline元素。
那么此时,这个包含块是怎样的呢?
在**不换行**的情况下,在这一行的首尾为各生成一个宽度为0的内联盒子(虚拟的),包裹住这两个内联盒子的padding box的外面的包围盒即为当前包含块
但是如果**换行**,此时属于未定义行为,由各浏览器厂商自主解析。
## 包含块为inline(子元素绝对定位,才允许是inline)时的注意事项
当前包含块会受`::first-line`伪元素影响,但不受`::first-letter`伪元素影响
不受`line-height`等属性影响(由前后"生成的"内敛盒子的em-box决定)
- 空白目录
- 未处理
- 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
- 浏览器渲染原理
- 移动端