position: absolute 和 position: fixed 都是脫離文檔流的定位方式,但參照基準不同,導致行為差異巨大。本文對比兩者的異同,幫助快速選型。
top/right/bottom/left 精確控制位置。z-index 控制層疊順序。| 特性 | absolute | fixed |
|---|---|---|
| 參照基準 | 最近的非 static 祖先元素 | 瀏覽器可視窗口 (viewport) |
| 頁面滾動時 | 隨頁面內容一起滾動 | 固定在視窗位置,不隨滾動移動 |
| 包含塊 | 由祖先元素的 padding box 決定 | 由 viewport 決定 |
| transform 影響 | 祖先有 transform 會改變包含塊 | 自身或祖先有 transform 會改變包含塊 (CSS Transforms Spec) |
absolute:像貼在某個容器裡的標籤,容器動它也動。
fixed:像貼在螢幕玻璃上的便利貼,頁面怎麼滾它都不動。
transform/filter/perspective 非 none 的祖先內,參照基準會變為該祖先而非 viewport。position: sticky 或 JS 修正。@media print { .fixed { position: static; } }。根據「是否需要隨頁面滾動」選擇 absolute 或 fixed,是佈局決策的第一直覺。