利用 **`:hover` 偽類 + 絕對定位 + `display: none/block`** 實現鼠標懸停顯示子菜單,零 JS 依賴。
<!doctype html>
<style>
.trigger { position: relative; display: inline-block; }
.trigger .popup {
position: absolute; left: 0; top: 100%; /* 緊貼觸發器底部 */
background: #fff; border: 1px solid #000; padding: 8px;
white-space: nowrap; display: none; /* 默認隱藏 */
z-index: 100; box-shadow: 0 2px 8px rgba(0,0,0,.15);
}
.trigger:hover .popup { display: block; } /* 關鍵:hover 顯示 */
</style>
<div class="trigger">
<a href="#">鼠標移動到這裡彈出層</a>
<div class="popup">
彈出層的內容<br/>
彈出層的內容<br/>
彈出層的內容
</div>
</div>
| 需求 | CSS 方案 |
|---|---|
| 平滑動畫 | `opacity:0→1` + `transform: translateY(-10px)→0` + `transition`(需配合 `visibility` 而非 `display`) |
| 點擊關閉/切換 | 純 CSS 不可做,**需極少 JS** (`classList.toggle`) 或 ` / ` 原生標簽 |
| 多級嵌套菜單 | `.popup .trigger:hover > .popup { display:block; }` 遞歸選擇器 |
| 鍵盤無障礙 | `:focus-within` 替代 `:hover`,支援 Tab 導航 |
| 移動端觸摸 | CSS 無 hover 概念,**必須 JS** 切換 class 或用 ` ` |
<details class="dropdown">
<summary>點擊/hover 展開</summary>
<div class="dropdown-content">內容...</div>
</details>
<style>
details.dropdown { position: relative; }
details.dropdown > summary { cursor: pointer; list-style: none; }
details.dropdown > summary::-webkit-details-marker { display: none; }
details.dropdown[open] .dropdown-content { display: block; }
.dropdown-content { position: absolute; top: 100%; left: 0; background: white; border: 1px solid #ccc; padding: 8px; }
</style>
**優點**:原生支援鍵盤、螢幕閱讀器、移動端觸摸、無 JS 依賴。
**缺點**:動畫定制受限、舊瀏覽器(IE)不支援。