【現代 CSS】標準滾動條控制規範 scrollbar-color 和 scrollbar-width

来源:https://www.cnblogs.com/coco1s/p/18243384
-Advertisement-
Play Games

Chrome 在 121 版本開始,原生支持了兩個滾動條樣式相關的樣式 scrollbar-color 和 scrollbar-width。 要知道,在此前,雖然有 ::-webkit-scrollbar 規範可以控制滾動條,可是,::-webkit-scrollbar 是非標準特性,在 MDN 文 ...


Chrome 在 121 版本開始,原生支持了兩個滾動條樣式相關的樣式 scrollbar-color 和 scrollbar-width。

要知道,在此前,雖然有 ::-webkit-scrollbar 規範可以控制滾動條,可是,::-webkit-scrollbar 是非標準特性,在 MDN 文檔中都明確了不應該在生產環境使用它。

MDN - ::-webkit-scrollbar
Non-standard: This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

scrollbar-colorscrollbar-width 是官方標準,在 CSS Scrollbars Styling Module Level 1 規範中被提出。

本文,我們就將一起學習看看這兩個屬性的使用。

scrollbar-color 設置滾動條顏色

顧名思義,scrollbar-color 就是用於設置滾動條顏色的。

不過有意思的是,一個完整的滾動條,其實是有多個小組件組成的,所以能設置的顏色其實也有很多。

以非標準規範 ::-webkit-scrollbar 為例,它將滾動條拆分成了這麼多個部分:

當然,新規範沒有這麼複雜,我們簡化上述的圖,可以得到這麼一張圖:

scrollbar-color 能夠設置的,正是上圖中的 track 和 thumb 的顏色:

  • 軌道(track)是指滾動條,其一般是固定的而不管滾動位置的背景。
  • 滑塊(thumb)是指滾動條通常漂浮在軌道的頂部上的移動部分。

簡單舉個例子:

<div class="scroll-box">
  <p>
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis quaerat ipsam fugit fugiat cupiditate asperiores neque libero natus atque, suscipit error esse inventore numquam molestiae quas laborum eius debitis cum?
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis quaerat ipsam fugit fugiat cupiditate asperiores neque libero natus atque, suscipit error esse inventore numquam molestiae quas laborum eius debitis cum?
    ...
  </p>
</div>
.scroll-box {
    border: 1px solid #666;
    overflow: scroll;    
}

正常而言,當 <p> 標簽內的內容足夠多,溢出到開始滾動,則滾動條樣式為:

此時,我們可以通過 scrollbar-color 設置滾動條的軌道顏色和滑塊顏色:

.scroll-box {
    border: 1px solid #666;
    overflow: scroll;    
    scrollbar-color: #fff #000;
    // OR
    scrollbar-color: #000 #fff;
}

則,樣式表現如下:

看圖就非常好理解了,簡單而言 scrollbar-color: #000 #fff,需要設置兩個顏色,將第一種顏色應用於滾動條滑塊,第二種顏色應用於滾動條軌道。

當然,上圖是在 Windows 操作系統下的樣式表現,我再補充一張在 macOS/iOS 操作系統下的樣式表現效果:

由於 macOS/iOS 操作系統預設情況下,即便容器內是可滾動的,也不會顯示滾動條,上述效果都是在 Hover 狀態或者滾動狀態下的效果。

並且,值得註意的是,大家可以發現,macOS/iOS 操作系統下滾動條軌道是透明的,無法被設置顏色,只能設置滾動條滑塊的顏色

完整的 DEMO,你可以戳這裡:CodePen Demo -- Scrollbar-color Demo

當然,值得註意的是。很多人看中文版的 MDN 文檔(2024-04-06),會看到除了直接設置兩個顏色值,以及上面的 auto 關鍵字,規範還提供了 lightdark 關鍵字:

{
  /* Keyword values */
  scrollbar-color: auto;
  scrollbar-color: dark;
  scrollbar-color: light;
}

在我實測過後,發現實際沒有任何瀏覽器(用戶代理)目前支持 lightdark 關鍵字。

中文文檔存在一定的滯後性,還是推薦大家直接看英文文檔:

scrollbar-width設置滾動條粗細

瞭解完 scrollbar-color 後,我們再來看看 scrollbar-width。這個從名字也很好理解,設置滾動條的寬度。

那是否和我們想象的一樣,可以任意設置滾動條的寬度,甚至乎,可以定製化的設置滑塊和軌道的寬度?

遺憾的是,在 CSS Scrollbars Styling Module Level 1 一期滾動條規範中,這個屬性的功能被設置的非常弱。

不要說分別設置滑塊和軌道的寬度,scrollbar-width 目前甚至不支持接受一個寬度數值。

什麼意思呢?也就是,當前 scrollbar-width 只接收 3 個關鍵字:

{
  /* Keyword values */
  scrollbar-width: auto;
  scrollbar-width: thin;
  scrollbar-width: none;
}
  • scrollbar-width: auto:系統預設的滾動條寬度。
  • scrollbar-width: thin:系統提供的瘦滾動條寬度,或者比預設滾動條寬度更窄的寬度
  • scrollbar-width: none:不顯示滾動條,但是該元素依然可以滾動

簡單示意圖如下:

完整的 DEMO,你可以戳這裡:CodePen Demo -- Scrollbar-width Demo

總結一下

可以看到,其實就目前 scrollbar-width 而言,其能力還是屬於比較雞肋的。相對正常的樣式,僅僅多了一種瘦版樣式選擇以及提供了無滾動條模式。

當然,整個 scrollbar-colorscrollbar-width 相較於非標準的 ::-webkit-scrollbar 規範已經是非常大的一步跨越。只是其功能的豐富性和全面性還需要等待。

最後

好了,本文到此結束,希望對你有幫助

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SoybeanAdmin —— 一個清新優雅、高顏值且功能強大的後臺管理模板。基於最新的前端技術棧,包括 Vue3、 Vite5、 TypeScript、 Pinia 和 UnoCSS。 ...
  • 你知道為什麼setup語法糖中的頂層綁定可以在template中直接使用的呢?setup語法糖是如何編譯成setup函數的呢? ...
  • RSS(Really Simple Syndication)是一種 XML 格式,用於網站內容的聚合和分發,讓用戶能快速瀏覽和跟蹤更新。RSS 文檔結構包括 `<channel>` 和 `<item>` 元素,允許內容創作者分享標題、鏈接和描述。通過 RSS,用戶可以定製新聞源,過濾不相關信息,提高... ...
  • ‍ 寫在開頭 點贊 + 收藏 學會 在後臺系統中有一種常見的功能,點擊按鈕將整個網頁全屏,再點擊退出全屏。 瀏覽器提供了2種全屏方式,一種通過API在js中實現,另一種是按F11鍵進入全屏模式。 但F11進入的全屏模式優先順序更高,無法通過API退出。 基本知識 元素全屏 檢查可用 ...
  • 這篇文章介紹瞭如何運用Tailwind CSS框架創建響應式網頁設計,涵蓋博客、電商網站及企業官網的佈局實例,包括頭部導航、內容區域、側邊欄、頁腳及輪播圖等組件的響應式實現。同時,探討了與JavaScript框架集成、CSS預處理器配合、設計工具應用以及伺服器端渲染的策略,並提供了性能優化、代碼組織... ...
  • 我們是袋鼠雲數棧 UED 團隊,致力於打造優秀的一站式數據中台產品。我們始終保持工匠精神,探索前端道路,為社區積累並傳播經驗價值。 本文作者:修能 這是一段平平無奇的 SQL 語法 SELECT id, sum(name) FROM student GROUP BY id ORDER BY id; ...
  • ‍ 寫在開頭 點贊 + 收藏 學會 前言 在這之前公司項目的文檔預覽的方式都是通過微軟線上預覽服務,但是微軟的線上服務有文件大小限制,想完整使用得花錢,一些圖片文件就通過組件庫antd實現,因為我們項目存在多種類型的文件,所以為了改善用戶的體驗,決定把文件預覽單獨弄一個拆出一個項 ...
  • 這篇文章介紹了Tailwind CSS框架的特點與優勢,包括其作為實用性的CSS框架如何通過預設的樣式類實現快速佈局和設計,以及如何在不犧牲響應式和自適應性的同時減少開發時間。此外,還提及了框架的可定製性,允許開發者輕鬆創建符合項目需求的樣式規則,從而提高前端開發效率。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...