網頁功能:
::selection
user-select
accent-color
color-scheme
scrollbar-color
scrollbar-width
:user-valid 和 :user-invalid
:placeholder-shown
::placeholder
field-sizing
resize (CSS 屬性)
可自訂的 <select>
appearance
:has()
::file-selector-button
大多數瀏覽器產生的 UI 都可以使用 CSS 進行一定程度的自訂。即使需要新式功能,在舊版瀏覽器中也能正常降級,因此通常不需要 polyfill 或備用方案。
重新建立瀏覽器 UI (表單控制項、捲軸、選取項目、錯誤訊息等) 之前,請先確認:
- 即使使用新式 CSS,瀏覽器 UI 也無法充分自訂,滿足您的需求
- 所需的自訂功能非常重要,足以證明重新建立內建 UI 的取捨是合理的,最明顯的是失去原生 UI 免費提供的無障礙語意、鍵盤處理、IME 和 AT 整合。
可行的自訂範例:
- 使用
::selection自訂醒目顯示文字的顏色。 - 請勿將
user-select: none套用至內容文字,否則會破壞複製貼上、翻譯工具和輔助技術「從這裡開始朗讀」手勢。僅限 Chrome (拖曳控點、工具列、多餘的按鈕標籤)。 - 使用
accent-color將頁面的強調色套用至任何瀏覽器產生的 UI。 - 使用
color-scheme讓瀏覽器 UI 配合淺色/深色模式。 - 使用
scrollbar-color自訂捲軸顏色,並使用scrollbar-width控制捲軸粗細,確保捲動方塊與軌道有明顯區別 (≥3:1),且不要在可捲動區域設定scrollbar-width: none(僅在捲動功能完全由其他功能取代時使用)。 - 請使用
:user-invalid/:user-valid設定有效性樣式,不要使用:invalid/:valid,因為這些樣式只會在使用者與欄位互動後才會套用,避免在載入網頁時,將必填空白欄位標示為錯誤。廣泛指定input(例如input:not(input[type="range"]):user-valid) 時,請排除範圍滑桿,這樣調整滑桿時就不會套用欄位有效性邊框或背景。 - 按鈕和文字欄位 (包括
<textarea>) 通常可以設為一般元素的樣式。 - 使用
font-size縮放,並使用其他文字屬性控制字體排版
設定文字欄位樣式 (<input> 和 <textarea>)
在大多數樣式設定 (例如顏色、邊框、背景、字體排版等) 中,請將這些元素視為一般文字容器。
- 使用
:placeholder-shown和::placeholder設定輸入預留位置的樣式。 - 使用
field-sizing: content讓文字欄位大小符合內容。 - 如果是
<textarea>元素,請使用resize: vertical停用水平調整大小功能,或使用resize: none停用所有調整大小功能。
選擇題控制項 (選取、圓形按鈕、核取方塊)
- 如要從下拉式選單中選取其中一個選項,請使用
<select>+appearance: base-select+::picker(select)。詳情請參閱「品牌精選樣式」 - 從頁面內嵌的多個選項中選取一或多個:請在
<label>內為每個選項使用<input type=checkbox>或<input type=radio>。透過label:has(:checked)設定樣式。 - 透過
appearance: none+ 生成內容 (::before/::after) 或背景圖片,設定核取方塊、圓形按鈕和切換鈕的樣式,繪製勾選狀態。
非文字 <input> (按鈕、滑桿、檔案輸入等)
- 檔案輸入:使用
::file-selector-button設定按鈕樣式。 - 請勿將
<input>與button、submit或reset的type搭配使用。請改用<button>,並將其樣式設為一般元素。 - 滑桿:使用
appearance: none+ 拇指虛擬元素 (::-webkit-slider-thumb、::-moz-range-thumb等) 和軌道虛擬元素 (::-webkit-slider-runnable-track、::-moz-range-track等),進行更精細的控制。