ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[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决定)