Web 功能:
::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
大多数浏览器生成的界面都可以使用 CSS 进行一定程度的自定义。 即使需要现代功能,它也会在旧版浏览器中优雅降级,因此通常不需要 polyfill 或后备。
在重新创建浏览器界面(表单控件、滚动条、选择、出错提示等)之前,请先验证:
- 即使使用现代 CSS,浏览器界面也无法充分满足您的需求,
- 所需的自定义设置非常重要,足以抵消重新创建内置界面的代价,尤其是失去原生界面免费提供的无障碍语义、键盘处理、IME 和 AT 集成。
可能的自定义示例:
- 使用
::selection自定义突出显示的文字颜色。 - 请勿对内容文本应用
user-select: none,否则会破坏复制粘贴、翻译工具和辅助技术“从此处开始朗读”手势。仅限于 Chrome(拖动手柄、工具栏、多余的按钮标签)。 - 使用
accent-color将页面的强调色应用于任何浏览器生成的界面。 - 使用
color-scheme让浏览器界面适应浅色/深色模式。 - 使用
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>与type为button、submit或reset的 搭配使用。请改用<button>,并将其样式设置为常规元素。 - 滑块:使用
appearance: none+ 拇指伪元素(::-webkit-slider-thumb、::-moz-range-thumb等)和轨道伪元素(::-webkit-slider-runnable-track、::-moz-range-track等)进行更精细的控制。