【現代 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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...