版面配置變更後捲動貼齊

從 Chrome 第 81 版開始,不必再新增事件監聽器來強制重新命名。

CSS Scroll Snap 可宣告捲動貼齊位置,讓網頁開發人員能夠建立精確控制的捲動體驗。目前的實作項目有一個不足之處,就是當版面配置變更時,捲動貼齊功能無法正常運作,例如調整可視區域大小或裝置旋轉時。這項缺點已在 Chrome 第 81 版中修正。

互通性

許多瀏覽器都支援 CSS Scroll Snap 的基本支援。詳情請參閱「我可以使用 CSS 捲動功能嗎?」一文。

版面配置變更後,Chrome 是目前唯一能實作捲動貼齊的瀏覽器。Firefox 提供能夠實作這項功能的支援單,而 Safari 也具備開放票證,可在捲動器的內容變更後重新剪輯。目前,您可以將下列程式碼新增至事件監聽器來模擬執行貼齊,藉此模擬這個行為: javascript scroller.scrollBy(0,0); 不過,這不保證捲動器會回到同一個元素。

背景

CSS 捲動 Snap

CSS 捲動貼齊功能可讓網頁開發人員宣告捲動貼齊位置,以建立完善控制的捲動體驗。這些位置可確保可捲動內容與容器正確對齊,以克服捲動障礙的問題。換句話說,捲動貼齊:

  • 避免在捲動時無法正常捲動位置。
  • 建立分頁內容的效果。

分頁報導和圖片輪轉介面是捲動時的兩種常見用途。

CSS 捲動貼齊範例。
CSS 捲動貼齊範例。捲動結束時,圖片的水平中心會與捲動容器的水平中心對齊。

缺點

調整視窗大小時,邊框位置會遺失。

捲動貼齊功能可讓使用者輕鬆瀏覽內容,但無法因應內容和版面配置的變更,會阻礙部分潛在優點。如上方範例所示,使用者每次調整視窗大小時,都必須重新調整捲動位置,才能找到先前對齊的元素。以下列舉一些導致版面配置變更的常見情況:

  • 調整視窗大小
  • 旋轉裝置
  • 開啟開發人員工具

前兩種情況會降低 CSS Scroll Snap 對使用者的吸引力,第三種在偵錯時則為開發人員的迷人。開發人員在嘗試打造支援動作 (如新增、移除或移動內容) 的動態體驗時,也需要考量這些缺點。

常見的修正方式是新增透過 JavaScript 執行程式輔助捲動的事件監聽器,以在上述任何上述任一版面配置發生變更時強制導入貼齊功能。如果使用者預期捲動器返回與先前相同的內容,這個解決方法可能無效。任何使用 JavaScript 的進一步處理,似乎幾乎都沒有達到這項 CSS 功能的目的。

Chrome 第 81 版內建支援功能,可在版面配置變更後重新貼齊

Chrome 第 81 版已沒有上述的缺點:捲動器在變更版面配置後仍會固定顯示。他們會在變更版面配置後重新評估捲動位置,並在必要時重新貼齊至最接近的貼齊位置。如果捲軸先前與版面配置變更後仍存在的元素對齊,則捲動器會嘗試貼回該元素。在以下範例中,請留意版面配置變更時會發生的情況。

失去貼齊位置
旋轉裝置「不會」在 Chrome 第 80 版中保留貼齊位置。 捲動至顯示 NOPE 的投影片,並將裝置螢幕方向從直向變更為橫向後,系統會顯示空白畫面,表示捲動貼齊位置遺失。
保留貼齊位置
旋轉裝置「會」在 Chrome 第 81 版中保留貼齊位置。即使裝置螢幕方向多次變更,顯示 NOPE 的投影片仍會在檢視畫面中。

詳情請參閱「在版面配置變更規格後重新貼齊」一文。

範例:固定式捲軸

使用「在版面配置變更後貼齊」功能,開發人員可以透過幾行 CSS 導入固定式捲軸:

.container {
  scroll-snap-type: y proximity;
}

.container::after {
  scroll-snap-align: end;
  display: block;
}

如需更多資訊,請參考以下的示範即時通訊 UI,瞭解視覺效果。

在 Chrome 第 81 版中新增訊息時,系統會觸發重新同步處理,讓訊息固定在底部。

未來工作

所有重新貼齊的捲動效果目前都會立即生效;可能的後續作業則是以順暢的捲動效果支援重新貼齊功能。詳情請參閱規格問題

意見回饋:

您的意見十分寶貴,可在版面配置變更後更臻完善,因此您可以試用看看,並讓 Chromium 工程師知道您的想法。