一个元素的大小和位置都受其父级元素的影响。通常来说,包含块是一个元素最近的块级父级的内容区域,不过也有一些例外的情况。
让我们熟悉一下盒子
- 内容区域
- 内边距区域
- 边框区域
- 外边距区域
<图先欠着>
通常我们认为包含块就是其父级内容区域,但这不一定对。
包含块的影响
在学习什么决定了一个元素的包含块之前,让我们先了解一下它的重要性。
一个元素的大小和位置通常受到它包含块的影响。width
,height
,padding
,margin
,还有绝对定位元素的偏移属性的百分比值都是从元素的包含块计算得来的
确认包含块
确认一个元素的包含块,完全依赖于元素的position
属性
- 如果
position
是static``relative
,sticky
,包含块来自元素最近父级元素的内容盒子的边界,父级元素要么是一个块容器(如:inline-block,block或list-item),要么是建立了一个格式化上下文(如:表格容器,flex容器,网格容器,或者块级容器本身) - 如果
position
是absolute
,包含块是来自position
是非static
的,最近的父级元素的内边距盒子的边界。 - 如果
position
是fixed
,包含块是建立在视图窗口的。 - 如果
position
是absolute
或fixed
,包含块可能来自有如下情况的最近父级的内边距盒子的边界:-
transform
和perspective
不为none
-
will-change
是transform
或perspective
-
filter
值不为none
,或者will-change
的值是filter
-
contain
的值paint
-
从包含块计算百分比的值
-
height
,top
,bottom
是从包含块的height
计算得出 -
width
,left
,right
,padding
,margin
是从包含块的width
计算得出