CSS 与布局 / CSS Anchor Positioning · 把元素钉在另一个元素旁 / anchor() 与 anchor-size() 待审核 2 / 7
anchor() · 精确到边

anchor() 与 anchor-size()

position-area 页讲的是简洁的高层写法,它底层依赖的就是这两个函数。先理解函数,position-area 的行为才有解释。

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

1 · anchor() 的取值与落点

语法 anchor(<side>) 只能出现在 inset 属性(top / right / bottom / left 或逻辑的 inset-block-start 等)的值里。它返回一个长度,即锚的那条边在当前包含块里的位置。top: anchor(bottom) 读作「把浮层的上边放到锚的下边」,浮层落到锚的正下方。

图 1-1 · inset 属性与 anchor() 参数的组合对应的浮层落点。可逐一切换查看每种组合把浮层的哪条边钉到锚的哪条边。

可用的 <side> 有:物理边 top / right / bottom / leftcenter(等价于 50%)、任意百分比(如 anchor(25%)),以及随书写方向走的逻辑边 start / end / self-start / self-end

2 · 纵横两轴的分别指定

图 2-1 · 锚固定在正中时,纵向与横向各自选定一种放法后浮层的落点,同时给出实际写出的 CSS。

注 · 居中通常要配 translate: -50%left: anchor(center) 只是把浮层的左边对到锚的中线,浮层整体偏右;再加 translate: -50% 0 把它左移自身一半宽,才真正居中。撑满(stretch)则是同时钉住对边,让浏览器去算中间的尺寸。

3 · anchor() 的 fallback 参数

浮层若引用了一个当前不存在或不可用的锚,整条 anchor() 失效,该属性变为 invalid。第二个参数可指定一个 fallback 长度:left: anchor(--maybe right, 0px) 在找不到锚时退回 0px。锚名也可以显式写出,anchor(--other top) 临时引用别的锚,不必是 position-anchor 指定的那个。

4 · anchor-size() 与跟随尺寸

anchor-size(<dim>) 返回锚的某个尺寸,可用在尺寸属性(width / height / min-* / max-* 及其逻辑对应)、inset 属性与 margin 属性上。典型需求是「下拉面板的宽度等于触发它的输入框」,从前要 JS 量,现在一行 width: anchor-size(width)

图 4-1 · 浮层宽度由 anchor-size(width) 决定时对锚的跟随。可改锚的宽度观察浮层同步变化。

警示 · anchor-size() 的维度可写物理的 width / height,也可写逻辑的 inline / block 或带自身书写方向的 self-inline / self-block。但它与 anchor() 一样要求浮层是 position: absolutefixed 且已关联到锚:在 position: static 的元素上写 width: anchor-size(width),实测 Chrome 151 该声明被丢弃,宽度仍按 auto 撑满包含块(核对于 2026-08)。有 fallback 参数时退回 fallback,没有则整条声明作废。