稀有 CSS 功能整理(Rare CSS Features)
文章原作者:Rahul Kaklotar
本文為重點整理與中文筆記。
在 2026 年,CSS 與 JavaScript 之間的界線幾乎被抹平。許多過去需要 JS 來實作的:
- 條件判斷邏輯
- 元素定位(特別是 tooltip / dropdown 這類「跟著元素走」的 UI)
- 捲動觸發動畫
現在越來越多都可以直接交給 CSS 來處理,帶來:
- 更好的效能:交給瀏覽器渲染引擎處理,比 JS 在 main thread 執行還有效率。
- 更乾淨的架構:互動樣式邏輯集中在 CSS,JS 專心處理商業邏輯。
- 更好的可維護性與可存取性。
下面是幾個「少見但非常實用」的現代 CSS 特性。
1. :has() 父選擇器:在 CSS 做「if 判斷」
:has() 常被稱為「父選擇器」或「家族選擇器」,因為它可以依據子元素的存在或狀態來決定父元素的樣式。
這在以前幾乎都要靠 JS 來做(例如:加上某個 class)。
/* 卡片裡有 img 才套用樣式 */
.card:has(img) {
display: flex;
flex-direction: column;
border: 2px solid gold;
}
/* form-group 裡有 invalid input,就讓 label 變紅變粗 */
.form-group:has(input:invalid) label {
color: red;
font-weight: bold;
}
適合用在:
- 表單驗證狀態(成功 / 失敗樣式)
- 卡片根據內容有無某元素(如圖片、badge)改變排版
- Accordion、Tabs 等「狀態控制」邏輯
2. CSS Anchor Positioning:Tooltip / Dropdown 原生錨點定位
以前要做 tooltip 或 dropdown,通常會:
- 用 JS 取得觸發元素的座標與尺寸
- 手動計算 offset,確保 tooltip / dropdown 黏在按鈕旁邊
有了 CSS Anchor Positioning,這些可以直接在 CSS 裡透過 anchor() 完成。
.button {
anchor-name: --my-anchor;
}
.tooltip {
position: absolute;
position-anchor: --my-anchor;
/* tooltip 頂部貼在按鈕 底部 */
top: anchor(bottom);
/* 水平位置對齊按鈕中間 */
left: anchor(center);
}
適合用在:
- Tooltip、Popover
- Dropdown Menu、Context Menu
- 任意需要「跟著某個元素移動」的浮動 UI