CSS Anchor Positioning 完整指南

CSS 指南 ⭐⭐⭐⭐⭐ 5星 · 来源: CSS-Tricks · 2026-03-17

📌 什么是 Anchor Positioning?

CSS Anchor Positioning 是 CSS 的全新定位方式,让你能够将一个元素相对于另一个元素(锚点)进行定位,无需使用 JavaScript 来处理溢出问题。

🚀 浏览器支持: 2024年6月 Chrome 125 发布,仅一年后就获得广泛支持。相比之下,CSS Variables 从2012年到2016年才获得广泛支持。

⚡ 快速示例

1. 定义锚点元素

.anchor {
    anchor-name: --my-anchor;
}

2. 将目标元素锚定到锚点

.target {
    position: absolute;
    position-anchor: --my-anchor;
}

3. 设置位置

.target {
    position-area: top right;
}

🧩 核心概念

Anchor (锚点)

用作定位参考的元素。通过 anchor-name 属性定义。

Target (目标)

相对于锚点定位的元素。必须是绝对定位元素。

Containing Block (包含块)

包含元素的盒子。对于绝对定位元素,包含块是最近的具有非 static 定位的祖先。

IMCB (Inset-Modified Containing Block)

绝对定位元素的 inset 属性会缩小其包含块,形成的新盒子称为 IMCB。position-areaposition-try-order 等属性依赖于这个概念。

📐 position-area 属性

在锚点周围创建一个 3×3 的虚拟网格,让你将目标放置在网格的一个或多个区域中。

物理值

.target {
    position-area: top right;    /* 右上方 */
    position-area: bottom left;  /* 左下方 */
    position-area: center;       /* 居中 */
}

逻辑值 (依赖书写模式)

.target {
    position-area: start end;    /* 逻辑定位 */
    position-area: self-start self-end;
}

跨区域定位

.target {
    position-area: span-top left;    /* 跨越顶部 */
    position-area: bottom span-all;  /* 跨越整行 */
}

🔄 备用位置 (Fallback Positions)

当目标元素溢出时,可以自动切换到备用位置。

position-try-fallbacks

.target {
    position-try-fallbacks:
        --my-custom-position,
        flip-inline,
        bottom left;
}

flip 关键字

  • flip-block: 在块轴上翻转
  • flip-inline: 在行内轴上翻转
  • flip-start: 对角翻转

position-try-order

.target {
    position-try-order: most-width;  /* 选择空间最大的位置 */
}

🎯 @position-try 规则

定义自定义位置备用方案,可以在切换位置时同时调整元素大小。

@position-try --my-custom-position {
    position-area: top left;
    width: 50px;
}

.target {
    position: absolute;
    position-area: top right;
    position-try: most-width, --my-custom-position, bottom left;
    width: 100px;
}

当目标从右上角切换到备用位置时,宽度会从 100px 自动调整为 50px。

🔗 anchor() 函数

用于更精细控制位置和大小的函数。

.target {
    top: anchor(--my-anchor bottom);
    left: anchor(--my-anchor end, 50%);
}

参数

  • <anchor-element>: 锚点名称
  • <anchor-side>: 锚点的哪一边 (top, bottom, start, end, center 等)
  • <length-percentage>: 可选的位置偏移

👁️ position-visibility 属性

控制锚点或目标元素可见性的条件。

.target {
    position-visibility: always;           /* 始终显示 */
    position-visibility: anchors-visible;   /* 锚点不可见时隐藏 */
    position-visibility: no-overflow;      /* 溢出时隐藏 */
}

♿ 无障碍性

Anchor Positioning 本身不处理焦点管理或 ARIA 属性。这些需要手动实现或使用 Popover API。

📊 实用场景

  • Tooltips (提示框): 悬停时显示的信息
  • Dropdowns (下拉菜单): 点击展开的菜单
  • Popovers (弹出层): 更复杂的交互组件
  • Select Menus (选择菜单): 自定义选择控件
  • Context Menus (右键菜单): 右键点击显示的菜单

🔮 总结

CSS Anchor Positioning 是 Web 平台的重要进步,它:

  • ✅ 减少了 JavaScript 依赖
  • ✅ 原生支持溢出处理
  • ✅ 提供了灵活的备用位置机制
  • ✅ 正在获得广泛的浏览器支持
💡 提示: 对于更复杂的弹出层交互,建议使用 Popover API,它内置了无障碍支持。

原文: CSS Anchor Positioning Guide @ CSS-Tricks

⭐⭐⭐⭐⭐ 探索于 2026-03-17