CSS 与布局 / CSS Anchor Positioning · 把元素钉在另一个元素旁 / position-area 的九宫格摆位 待审核 3 / 7
position-area · 九宫格

position-area 的九宫格摆位

anchor() 页的函数式写法精确但繁琐,居中还要另配 translateposition-area 是它的简化封装:把锚周围看成 3×3 网格,只需指定放哪一格,inset 与 translate 都不必触碰,浏览器负责对齐。

当前浏览器对 anchor positioning 的实测支持情况,由 CSS.supports() 探测。

1 · 锚周围的 3×3 网格

锚自己占正中格,它把包含块切成 9 块:上中下三排乘左中右三列。position-area: top center 是正上方那格,bottom right 是右下角那格。

图 1-1 · 九宫格取值与浮层落点的对应。可点任一格观察浮层移动,或切换到逻辑关键字,对照 top / left 如何映射到 block-start / inline-start(这一套随书写方向与 RTL 自动镜像)。

注 · 选中的格子成为浮层新的包含块。position-area 不直接给浮层写坐标,而是把选中的那一格(或跨格区域)当作浮层的包含块,再用 justify-self / align-self 在这块里摆位。§2 的 span-* 能铺满、§3 的 anchor-center 能精准对齐锚,都出自这一层:格子变大之后,浮层在格子里怎么放是下一层的事。

2 · span 跨格与逻辑关键字

position-area 的取值不止 9 格,图 1-1 的预设按钮可逐一对照:

  • span-* 跨格:top span-all 贴上边而横向铺满整条;top span-left 占上方中格与上方左格两块。
  • 逻辑关键字:block-start / block-end / inline-start / inline-end 随书写方向走,RTL 与竖排自动镜像。
  • 单关键字简写:只写一个轴,另一轴取 span-alltop 等价于 top span-all,即贴上边且横向铺满。
  • center:覆在锚的正上方,可用于做高亮蒙层。

3 · 格内落点与 justify-self / align-self

选定格子(即新包含块)之后,浮层在这块里的落点由 justify-self(横轴)与 align-self(纵轴)决定:

  • normal 是默认值,把浮层尽量贴近锚,多数场景无需手动调整。
  • anchor-center 对齐的是锚自身在该轴上的中心,center 对齐的是所选区域的中心。格子比锚宽很多时(例如 span-all)两者明显错开:要正对着锚用前者,要在整片区域内居中才用后者。
  • start / end 在格子里靠首或靠尾,随书写方向走。
  • stretch 把浮层沿该轴拉伸铺满,适合横幅与满宽提示条。

建议 ·「贴上下左右加居中」这类菜单与 tooltip,直接写一行 position-area 最省事;需要像素级精细控制(贴某条边再偏移几像素、跨边非对称、混合百分比)时回到 anchor()。两者底层同源,可以混用。

警示 · 这个属性早期在 Chromium 里叫 inset-area,2024 年改名为 position-area,值语法不变。旧文章里仍可能见到旧名,但它已不再是可用的别名:实测 Chrome 151 的 CSS.supports('inset-area', 'top center') 返回 false(核对于 2026-08)。

延伸的取值速查见细节与边界页 §7。可视化选择器 anchor-tool.comcss-tip.com 分别提供了点格取值与全部区域组合的对照,适合调试摆位时对参。