560 字
3 分鐘

CSS Anchor Positioning 實作 tooltip:定位、fallback 與舊瀏覽器邊界

tooltip 靠 JavaScript 量測 getBoundingClientRect() 並不總是錯,但它把「跟著按鈕定位」這件事變成一段需要自己維護的座標邏輯。CSS Anchor Positioning 把 anchor 與浮層的關係交給 CSS,還能在預設位置溢出視窗時選擇替代位置。

先記住限制:**這個功能雖已進入 Baseline 2026,舊裝置與較舊瀏覽器仍可能不支援。**把它當作增強功能,基本操作不能只依賴 anchor 定位。

最小可用的 anchor 與 tooltip#

先替觸發元件命名,再把浮層關聯到這個名稱;浮層必須是 absolutefixed 定位,最後用 position-area 指定位置。

<button class="help-button">說明</button>
<div class="tooltip" role="tooltip">儲存後才會套用設定。</div>
.help-button {
anchor-name: --help;
}
.tooltip {
position: absolute;
position-anchor: --help;
position-area: block-end span-inline-end;
margin-block-start: 0.5rem;
}

這裡的關聯不等於互動行為:仍要用按鈕事件、popover 或可及性邏輯決定 tooltip 何時顯示。若 anchor 被 display: nonevisibility: hidden,其定位的元素也不應被當成仍可互動的提示。

不要只寫預設方向#

靠近視窗底部的按鈕,固定把 tooltip 放在下方會被裁掉。用 position-try-fallbacks 列出候選位置,讓瀏覽器在預設位置溢出時改試其他方向:

.tooltip {
position: absolute;
position-anchor: --help;
position-area: block-end span-inline-end;
position-try-fallbacks: block-start, inline-end, inline-start;
}

候選位置仍要在實際窄螢幕、縮放與捲動情境測試。若提示內容本身很長,改成可關閉的 popover 或 dialog 通常比持續嘗試 tooltip 方位更合理;可參考 HTML Popover API 的原生浮層選用

用 @supports 保留可用的基本版#

把既有的相對定位或 JavaScript 浮層當成基線,再只在支援時套用 anchor 規則。這樣不支援的瀏覽器不會得到一個失去位置的資訊框。

.tooltip {
/* 基線:既有的安全定位規則 */
display: none;
}
@supports (anchor-name: --anchor) {
.tooltip[data-open='true'] {
display: block;
position: absolute;
position-anchor: --help;
position-area: block-end;
}
}

@supports 只能判斷宣告是否被理解,不能保證你的整組 fallback 設計都符合產品互動需求。因此驗收時要把鍵盤 focus、放大字型與窄視窗一起列入;定位成功不代表提示可用。

參考資料:

MDN:Using CSS anchor positioning

MDN:CSS anchor() function

CSS Anchor Positioning 實作 tooltip:定位、fallback 與舊瀏覽器邊界
https://laplusda.com/posts/css-anchor-positioning-tooltip-fallback/
作者
Zero
發佈於
2026-08-02
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。