CSS紀錄 ▎那些年糾纏我的sticky? 失效情形&解法紀錄

更新於 發佈於 閱讀時間約 4 分鐘
raw-image

相信大家對於 sticky 這個效果不陌生,網頁上方的導覽列、文章側邊的相關閱讀等,諸多網頁都能看見它的身影,不過這篇不是 sticky 的使用教學,而是我自己的踩雷紀錄😅💣

主要是整理了過去三個月練習切版時,使用了 position-sticky 語法,卻無法生效的情況,以及最後的解法,其實都只是一些小細節,但因為很常會忘記,所以決定把它紀錄下來,以後可以少踩點雷~

來看看會讓 sticky 失效的情形有哪些吧:

1. 父層容器有下 overflow

這是 MDN 文件裡已經有寫到的,使用 sticky 時,父層容器如果有使用 overflow 的 hidden, scroll, auto, 或 overlay 等屬性值,都會阻礙 sticky 效果,這個比較好檢查出來,就不多寫了。

2. 父層容器的高度沒有大於要黏住的物件

關於這一點,在導覽列用 sticky 時,因為都有設 logo 的高度,父層又通常是 body,所以不太會有問題,但套用在文章側邊欄位時,就會出現錯誤啦!

用一個簡單的範例加上背景色,會比較容易理解:

範例說明:
• 外層容器 container 是黃色背景
• 左邊 article 為綠色,是內文區塊
• 右邊 aside 為紅色,是要黏住固定的區塊

我自己卡住想不通的點在於,一直認為 article 把高度撐起來後,container 的高度就會大於 aside 的高度,完全忘記 article 和 aside 兩個都是「區塊元素」,所以當它們用 display:flex 並排時,高度會是一致的!(切版切到腦袋打結😂)

解開糾結點之後就會發現,當 container 被 article撐滿,而 aside 又沒有設置固定高度的情況下,就是「父層容器的高度沒有大於要黏住的物件」的情況,sticky的效果當然不會出來...。

raw-image

這時我的解法是給 aside 區塊加上固定 px 的高度,或是 height:100%,讓 aside 不要被隔壁 article 給拉走,就可以順利黏住了!

3. bootstrap 中的 sticky-top

發生失效的情況是,在開發環境編譯時,單純使用 sticky-top 是能夠正常執行的,推到 repo 卻無法運行(?)

查找了 bootstrap 文件才發現,雖然 sticky-top 已經有包含 position:sticky 這個屬性值,但並非所有瀏覽器都支援!

所以解決的寫法可以有兩種

  • 在要黏住的區塊上,除了寫上 sticky-top 之外,也把 position-sticky 這個 class 補上
  • 不使用 sticky-top 這個 class,而是使用最原本的做法: position-sticky + top-0,不過就無法使用 sticky-top 的響應式變化囉

本來想只用 sticky-top 一個 class 搞定的,誰知道花了更多時間找問題,果然 coding 還是不能偷懶的~😵

🚧以上是我的踩雷紀錄,希望可以幫助正在學習的人,節省一些除錯的時間囉!

我是Amber,前端學習中,歡迎交流討論🧸🤭

留言
avatar-img
留言分享你的想法!
avatar-img
Amber hh的沙龍
23會員
22內容數
Amber hh的沙龍的其他內容
2024/09/04
第三次月會來了!這個月的主題是「工程師的溝通秘訣」 很多人認為,當工程師只要跟電腦對話就好,在轉職之前我也這麼認為的,尤其是以前在服務業工作,從早到晚跟客戶對談、處理他們各種疑難雜症和情緒的過程,實在太容易讓我感到心累了,倒不如整天跟電腦對話,對錯很明顯,也不用顧及雙方情緒,肯定比處理客訴簡單
Thumbnail
2024/09/04
第三次月會來了!這個月的主題是「工程師的溝通秘訣」 很多人認為,當工程師只要跟電腦對話就好,在轉職之前我也這麼認為的,尤其是以前在服務業工作,從早到晚跟客戶對談、處理他們各種疑難雜症和情緒的過程,實在太容易讓我感到心累了,倒不如整天跟電腦對話,對錯很明顯,也不用顧及雙方情緒,肯定比處理客訴簡單
Thumbnail
2024/08/03
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
2024/08/03
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
2024/07/24
剛開始學前端都是跟著六角的課程進度走,雖然知道自己不會的技術很多,但至少有明確的學習目標,也會定期產出結果,當時的焦慮來源只覺得時間總是不夠,殊不知真正踏入實務工作後,除了焦慮時間不夠之外,甚至還有點迷失了方向。 轉職後的公司僅一人前端,我沒有 mentor 帶領,也找不到可以效仿學習的 Ro
Thumbnail
2024/07/24
剛開始學前端都是跟著六角的課程進度走,雖然知道自己不會的技術很多,但至少有明確的學習目標,也會定期產出結果,當時的焦慮來源只覺得時間總是不夠,殊不知真正踏入實務工作後,除了焦慮時間不夠之外,甚至還有點迷失了方向。 轉職後的公司僅一人前端,我沒有 mentor 帶領,也找不到可以效仿學習的 Ro
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
本篇習作內容進入到 CSS 排版實作,一起瞭解 Flexbox,開始第一個網頁排版吧 💪🏻!
Thumbnail
本篇習作內容進入到 CSS 排版實作,一起瞭解 Flexbox,開始第一個網頁排版吧 💪🏻!
Thumbnail
因為被 position 打敗,就要在 position 這裡站起來!
Thumbnail
因為被 position 打敗,就要在 position 這裡站起來!
Thumbnail
display 是一種 CSS 屬性,指定「 是否 / 如何 」顯示元素,而每一個 HTML element 都有預設的 display value,然而在預設的情況下,新手如我在剛接觸時常踩入深不見底的盲區, 一起來釐清學會辨識吧!
Thumbnail
display 是一種 CSS 屬性,指定「 是否 / 如何 」顯示元素,而每一個 HTML element 都有預設的 display value,然而在預設的情況下,新手如我在剛接觸時常踩入深不見底的盲區, 一起來釐清學會辨識吧!
Thumbnail
相信大家對於 sticky 這個效果不陌生,網頁上方的導覽列、文章側邊的相關閱讀等,諸多網頁都能看見它的身影,不過這篇不是 sticky 的使用教學,而是我自己的踩雷紀錄😅💣
Thumbnail
相信大家對於 sticky 這個效果不陌生,網頁上方的導覽列、文章側邊的相關閱讀等,諸多網頁都能看見它的身影,不過這篇不是 sticky 的使用教學,而是我自己的踩雷紀錄😅💣
Thumbnail
在 Modern Web 的世界中,已經有非常多的套件、語法、框架,可以解決大部分網頁排版問題。 以我近期的觀察來說,在專案開發時,大部分公司會為了讓下一個接手、維護的開發者能更快上手專案架構,而採取原生的 CSS 寫法,而不是仰賴快速又方便的套件。
Thumbnail
在 Modern Web 的世界中,已經有非常多的套件、語法、框架,可以解決大部分網頁排版問題。 以我近期的觀察來說,在專案開發時,大部分公司會為了讓下一個接手、維護的開發者能更快上手專案架構,而採取原生的 CSS 寫法,而不是仰賴快速又方便的套件。
Thumbnail
都市傳說:「網頁跑版時,設定 box-sizing: border-box一切搞定!」
Thumbnail
都市傳說:「網頁跑版時,設定 box-sizing: border-box一切搞定!」
Thumbnail
不論是在基礎或是進階的版面排列,幾乎離開不了 position 系列的 CSS 語法,如果對於這些語法不熟悉,要快速完成畫面需求幾乎是不可能的,甚至會延宕整個團隊的開發速度(對,position 語法就是這麽重要)。
Thumbnail
不論是在基礎或是進階的版面排列,幾乎離開不了 position 系列的 CSS 語法,如果對於這些語法不熟悉,要快速完成畫面需求幾乎是不可能的,甚至會延宕整個團隊的開發速度(對,position 語法就是這麽重要)。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News