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/left、center(=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() 要求绝对定位)——纯粹「我的尺寸参考它」时很方便。