Interaction
appearance
appearance sets whether form controls are drawn with the look the browser provides. With none, things like the arrow on a select disappear, so you can style it from scratch with CSS.
Syntaxnone | auto | <compat-auto> | <compat-special> …
none | auto | <compat-auto> | <compat-special>
<compat-auto> = searchfield | textarea | checkbox | radio | menulist | listbox | meter | progress-bar | button
<compat-special> = textfield | menulist-buttonPreview
Favorite color
Presets
Drag the bottom-right corner to resize
Code
.box > :nth-child(2) {
appearance: none;
}Controls
appearancenone
Favorite color
About
Values
auto: draws controls such as buttons, selects and checkboxes with the look the browser provides. On elements that aren’t controls it is the same asnone.none: skips the control look and draws a plain CSS box.
The initial value is none, but the browser’s default styles set auto on controls, so they are normally drawn with auto. The preview sets it on the select (the second child). With none, the arrow on the right disappears.
When to use it
To give checkboxes or selects your own design, first remove what the browser draws with appearance: none, then add your own border, background and arrow image.
Watch out
- The control still works with
none: you can still pick options or check it, and keyboard use and screen readers are unchanged. But the arrow or check mark is gone, so add back a look that shows what kind of control it is. - With
none, checkboxes and radio buttons in Chrome lose their border and size and become invisible. Give them awidth,heightandborder, and style the:checkedstate too. - Values such as
checkboxandmenulist-buttonare left over from when each browser had its own version, and act almost likeauto(textfieldchanges the look of search fields slightly, andmenulist-buttondoes the same for selects). - The spec also has
base-select, which lets you rebuild a select down to its list of options (::picker(select)) with CSS. It works in Chrome and Edge 135 and Safari 27, but the syntax view on this page does not include it, so it is left out of the syntax and the preview (as isbase, also in the spec).