← ⚓ CSS Anchor Positioning · 把元素「钉」在另一个元素旁 / anchor() 与 anchor-size():贴边对齐 & 跟随尺寸 待审核 2 / 7
anchor() · 精确到边

anchor() 与 anchor-size():贴边对齐 & 跟随尺寸

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

1 · anchor():把「浮层的某条边」放到「锚的某条边」

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

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

2 · 动手摆位:分别选纵向与横向

锚固定在正中。分别给「纵向」和「横向」挑一种放法,看浮层落点 + 实际写出的 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-* 里。最经典的需求:下拉框宽度 = 触发它的输入框宽度——以前要 JS 量,现在一行:

anchor-size() 的维度可写物理 width/height,也可写逻辑 inline/block、或带自我书写方向的 self-inline/self-block。它甚至能用在非定位元素上(不像 anchor() 要求绝对定位)——纯粹「我的尺寸参考它」时很方便。