返回文章列表

CSS 查缺补漏 3(包含块 / 尺寸百分比 / 定位)

包含块(containing block)

  • 普通元素的参考系是父元素的内容区域。

  • 绝对定位的元素参考系为最近定位祖先(position != static)的 padding + content 区域。

  • 固定定位元素参考系为视口(除非祖先有 transform/filter/perspective 创建了新的包含块)

尺寸百分比

padding,margin 通常不会设置百分比,如果设置则是相对于包含块的宽度。包括padding-topmargin-top 也参考宽度而不是高度。

border 不能用百分比。

height 的百分比:如果父元素没有显式高度(或高度由内容撑开),百分比会失效。但 flex/grid 容器中例外。

transform: translate(50%) —— 参考的是元素自身尺寸

定位

五种定位:

  • static:标准文档流。left/right/top/bottom 不生效。

  • relative:基于标准文档流偏移,通常用来微调位置或给绝对定位提供参考系。

  • absolute:基于包含块定位,会脱离文档流,元素 display 会变为 block。

如果父级元素没有定位元素,包含块是 initial containing block(即 HTML 元素的 content 区,尺寸等于视口,原点在文档左上角)。如果此时设定 bottom,是基于首屏窗口计算下间距。

  • fixed:基于包含块定位,会脱离文档流,如果是屏幕设备则基于 viewport(视口),如果是打印机则每页都有。

  • sticky:它的参考系是最近的滚动祖先(scrolling ancestor)。如果没有任何滚动祖先,则是 viewport。

    需要指定阈值。