使用者在作業系統或瀏覽器中啟用高對比模式時,會希望 UI 元素 (例如捲軸) 非常清晰易讀,通常會依賴明顯的前景與背景區隔,而非細微的灰色或主題顏色。
本指南提供選用操作說明,說明如何使用 @media (prefers-contrast: more) CSS 媒體功能,強制執行高對比捲軸樣式。
美化易讀性
使用 scrollbar-color 或自訂變數自訂捲軸時,您可以為高對比模式提供明確的覆寫值。如果主要應用程式主題基於美觀考量,使用低對比度的捲軸,這項功能就特別實用。
選用:使用 @media (prefers-contrast: more) 區塊,為滑桿和軌道定義深色、明顯的顏色。
/* Define default standard colors as variables */
.scroller {
--scrollbar-thumb: #bbb;
--scrollbar-track: #f1f1f1;
scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
scrollbar-width: thin;
scrollbar-gutter: stable;
}
/* OPTIONAL: Provide clear, high-contrast overrides */
@media (prefers-contrast: more) {
.scroller {
/* Use extremely distinct colors like solid black against white */
--scrollbar-thumb: #000000;
--scrollbar-track: #ffffff;
}
}
使用 scrollbar-color 時應注意的問題
- 請勿為
scrollbar-color加上動畫或轉場效果。WebKit 錯誤會導致捲軸在每次scrollbar-color變更時閃爍。 - 在 macOS 上,系統預設會忽略
scrollbar-color(標準) 和::-webkit-scrollbar(舊版) 屬性,因為 macOS 使用原生「疊加」捲軸。您必須將自訂顏色與scrollbar-width(例如thin或auto) 搭配使用,強制 macOS 轉譯這些顏色。 - 即使套用
scrollbar-width,macOS 疊加捲軸預設仍會將軌道 (邊線) 算繪為透明。如果設計要求在 MacOS 上顯示可見的軌道背景顏色,您必須將scrollbar-gutter: stable;套用至可捲動容器,但請注意,只有在使用者將滑鼠游標懸停在捲軸上時,才會顯示。 - 即使使用
scrollbar-gutter: stable,在 macOS 上,軌道仍可能呈現透明。滑桿不應依賴軌道顏色來顯示。
備用方案和瀏覽器支援
scrollbar-color 的備用方案和瀏覽器支援
這項功能是漸進增強功能,不一定需要備用廣告。
如果樣式很重要,且使用者的基準目標是「基準廣泛可用」或更早版本,則應加入非標準 ::-webkit-scrollbar 虛擬元素做為備用。
在 @supports not (scrollbar-color: auto) 區塊中納入舊版備用屬性,避免在原生支援標準屬性和舊版 WebKit 選取器的瀏覽器中,發生兩者衝突的情況。
如果您使用自訂屬性定義顏色,這些屬性會自動套用至舊版 WebKit 選取器。您「不」需要複製這些項目。
/* Legacy fallback for WebKit/Blink browsers */
@supports not (scrollbar-color: auto) {
.scroller::-webkit-scrollbar {
/* Must define base size in WebKit for custom colors to be visual */
width: 12px;
height: 12px;
}
.scroller::-webkit-scrollbar-thumb {
background: var(--scrollbar-thumb);
}
.scroller::-webkit-scrollbar-track {
background: var(--scrollbar-track);
}
}