CSS黏住的側欄沒生效:檢查容器高度與overflow

側欄已寫position:sticky,捲動後卻整塊跟著消失。先別急著改成fixed;sticky會受到捲動祖先、容器邊界與元素高度限制,設定本身生效,仍可能沒有可黏住的空間。

先決定你要它跟哪個區域捲動:整個頁面,還是某個有自己的捲軸的內容區。這個答案會決定接下來要檢查哪一層overflow,以及top應相對哪個可視區域發揮作用。

先確認top與position真正生效

選取側欄,看Computed裡position是否為sticky,top是否為預期距離。若垂直方向的兩個inset都保持auto,它在該方向不會出現預期的黏住行為。樣式被其他選取器覆蓋時,先處理覆蓋來源,不要只再加一條相同宣告。

.sidebar {
  position: sticky;
  top: 16px;
  align-self: start;
}

16px只是範例。若上方有固定導覽列,要把實際佔用高度考慮進去,避免側欄標題藏在導覽下面。縮放或字體變大後導覽可能變高,不應只靠一個在自己的螢幕上剛好的數字。

grid拉高了側欄,就可能沒空間可移動

同一列裡,正文很高,側欄卻只有幾行導覽。格線項目若被拉伸到整列高度,側欄的盒子也可能跟正文一樣高;黏住需要的移動空間因此消失。查看側欄本身的bounding box,而不只是看裡面的文字有多短。

本文桌面案例有兩個獨立捲動區,正文高度相同。左側讓aside被拉伸,右側設align-self:start,側欄保留自己的內容高度。向下捲動相同距離後,左側跟著移走,右側留在自己的捲動區頂部附近。

相同捲動距離下,拉高到整列的側欄移出視野,維持內容高度的側欄停在捲動區上緣
兩區都使用sticky;差別是側欄盒子的高度與可移動空間。

這是自有HTML的實際桌面捲動結果,不是主題後台設定。正式版型若有不同格線結構、廣告區或導覽高度,要用自己的頁面重新量測,不能照圖猜容器尺寸。

沿父元素查看overflow

sticky會依最近具有捲動機制的祖先運作;overflow:hidden、auto、scroll或overlay都可能建立相關條件,即使那一層目前沒有真正捲動。若側欄原本要跟整頁移動,卻被某個包裝層接住,就會出現你捲頁面、它沒有按預期黏住的情況。

從側欄往上逐層看Computed的overflow-x與overflow-y,別只找自己寫過的overflow:auto。兩個方向的值可能影響計算結果,某一軸設hidden後,另一軸的實際值也要核對。

不要為了讓sticky恢復就把全站overflow限制刪掉。那個限制可能在處理圖片裁切、輪播或橫向溢出。先確定它的用途,考慮把裁切放到較內層的媒體包裝,或重新安排側欄與捲動容器關係。

它會在所屬容器的尾端停下

sticky不是永遠浮在整個網站上。側欄仍受自己的包含區域限制,走到容器底部時不能繼續超出那個邊界。若正文很長,側欄卻被放在只有一小段高度的外層,黏住的區間就很短。

檢查側欄與正文是否真正共享預期的高容器。只把側欄文字拉長或加padding,未必能修正結構;反而可能讓側欄比可視區更高,讀者無法一次看到完整入口。

側欄內容很長時,也不一定適合整塊黏住。可以減少入口、改成正文中的目錄,或針對較大的閱讀區啟用sticky;要另外測試下方項目是否仍可到達。不要讓讀者為了看最後一個連結,被困在難操作的多層捲動區。

沒有捲動距離,就看不到黏住

先確認測試頁真的夠長,而且捲動的是預期容器。容器高度與內容差不多,或側欄本身佔滿整個高度時,沒有足夠移動距離,自然看不到明顯的黏住效果。

開發者工具可以先記錄側欄頂部座標,再捲動相同距離重新讀取。正常情況下,它先隨內容移動,碰到設定的top後在一段範圍內維持位置,最後又受到容器底部限制。只截一張靜止畫面,無法證明這個過程。

本文案例只捲動各自的內容區;若拿整頁捲動去測它,就不是相同條件。交給維護者的紀錄要寫清楚:哪個元素捲動、捲了多少、側欄多高與top是多少。

黏住後,還要核對遮擋與操作

z-index不能修復沒有移動空間的問題。只有確認黏住已發生,卻被其他元素蓋住時,再檢查疊放與背景。提高z-index也可能蓋過正文或其他入口,所以修改應限定側欄需要的層級。

用鍵盤走過側欄連結,確認焦點可見、目的地存在。點擊正文標題的連結後,也看標題是否被固定導覽遮住;側欄位置正確,不代表所有錨點落點都正確。

縮窄畫面後,正文與側欄常改成上下排列。這時可以取消黏住,讓入口回到普通文件流,避免窄畫面被一大塊導覽佔住。斷點按內容決定,並檢查放大文字後是否還能操作。

儲存可以重現的條件

修改前保留CSS與容器結構,先在一頁驗證。修正後從頁首、正文中段與容器底部各捲一次,確認開始、維持與結束位置;再換一篇較短文章與較長側欄,觀察失敗條件是否已說清楚。

如果效果只有某個高度才成立,記下那個限制,不要把案例推成所有頁面都完成。sticky處理的是捲動中的位置安排,沒有替你保證目錄可用、廣告不遮擋或閱讀效果提高。把位置與操作分別核對,才能知道改動真正解決了什麼。

參考資料

原文鏈接:https://wntheme.com/sticky-sidebar-container/,轉載請註明出處。
0

評論0

顯示驗證碼
沒有帳號?註冊  忘記密碼?