CSS-свойство `appearance`
Базовая поддержка Широко поддерживается
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и во многих версиях браузеров. Она поддерживается браузерами с марта 2022 года.
Свойство appearance CSS задаёт отображаемый вид элементов заменяемых виджетов пользовательского интерфейса, например элементов управления формы. Чаще всего такие элементы оформляются в соответствии с темой операционной системы и получают нативный стиль, зависящий от платформы, либо примитивный вид, стили которого можно переопределить с помощью CSS.
Попробуйте
appearance: auto;
appearance: none;
appearance: textfield;
<section id="default-example">
<div class="background" id="example-element">
<input type="search" value="search" aria-label="unlabeled search" />
<input type="checkbox" aria-label="unlabeled checkbox" />
<input type="radio" aria-label="unlabeled radio button" />
<button>Button</button>
</div>
</section>
input,
button {
appearance: inherit;
}
Синтаксис
/* CSS Basic User Interface Module Level 4 values */ appearance: none; appearance: auto; appearance: menulist-button; appearance: textfield; appearance: base-select; /* Global values */ appearance: inherit; appearance: initial; appearance: revert; appearance: revert-layer; appearance: unset; /* <compat-auto> values have the same effect as 'auto' */ appearance: button; appearance: checkbox;
Значения
Свойство appearance можно применять ко всем элементам и псевдоэлементам, но эффект заданного значения, если он есть, зависит от элемента, к которому оно применяется.
-
none - Придаёт виджету примитивный вид, позволяя оформлять его с помощью CSS, но сохраняя нативную функциональность. Это значение не влияет на элементы, не являющиеся виджетами.
-
auto - Задаёт интерактивным виджетам отображение в нативном для ОС виде. Для элементов, не имеющих нативного стиля ОС, ведёт себя как
none. -
base-select - Применяется только к элементу
<select>и псевдоэлементу::picker(select), позволяя полностью задавать их стили. -
<compat-special> - На некоторых элементах действует аналогично
auto.-
textfield - Заставляет некоторые типы
<input>выглядеть как элемент типаtext. - Если задано для элемента
<select>, стиль раскрывающегося списка соответствует его состоянию по умолчанию.
-
-
<compat-auto> - Добавлено для обратной совместимости; возможные значения:
button,checkbox,listbox,menulist,meter,progress-bar,push-button,radio,searchfield,slider-horizontal,square-buttonиtextarea. Все эти значения ведут себя какauto: вместо них используйтеauto.
Примечание: Спецификация также определяет значение base. Пока ни один браузер его не поддерживает.
Нестандартные значения
Некоторые браузеры также поддерживают нестандартные значения:
-
slider-vertical - При применении к элементам
<input type="range">делает ползунок вертикальным. Чтобы создать вертикальный ползунок, вместо этого задайте дляwriting-modeзначениеvertical-lr, а дляdirection—rtl. - Отображает логотип Apple Pay, если задано для элемента
<button>,<a>или<input>типаbuttonилиreset.
Описание
Свойство appearance позволяет отображать элементы в нативном для ОС стиле, соответствующем теме операционной системы, а также удалять любое нативное для платформы оформление с помощью значения none. Задание appearance: none или иное изменение внешнего вида виджетов пользовательского интерфейса не меняет функциональность элемента.
Хотя большинство элементов документа можно полностью стилизовать с помощью CSS, элементы управления пользовательского интерфейса (виджеты) обычно отображаются браузером с использованием нативных стилей пользовательского интерфейса операционной системы. Этот нативный вид различается в разных операционных системах и браузерах. В таком состоянии по умолчанию возможности стилизации виджетов с помощью CSS ограничены или отсутствуют. Элементы с таким нативным видом пользовательского интерфейса определены в HTML.
Свойство appearance позволяет управлять внешним видом HTML-виджетов, которые по умолчанию выглядят как нативные элементы управления операционной системы. В частности, значение none подавляет некоторые нативные особенности внешнего вида виджета. В результате он приобретает примитивный вид, который можно стилизовать с помощью CSS, сохраняя функциональность и поддержку нативного взаимодействия с пользователем.
Некоторые виджеты полностью исчезают, если задать им значение appearance: none. Однако скрытые элементы управления по-прежнему интерактивны. Например, щелчок по элементу <label>, связанному с флажком appearance: none, переключит состояние флажка.
Поскольку none может скрыть виджет, добавляется значение base, позволяющее задавать виджетам базовый внешний вид. При поддержке этого значения base гарантирует, что виджеты сохранят нативный вид, и при этом CSS можно будет использовать для изменения стилей виджета, которые нельзя изменить по умолчанию. В отличие от none, из-за которого переключатели и флажки могут исчезнуть, base придаёт виджету примитивный вид с пригодными для использования и совместимыми между браузерами стилями по умолчанию, а также позволяет в значительной степени настраивать его с помощью CSS. Это значение base пока не поддерживается, однако многие значения <compat-auto> обеспечивают похожие возможности, но предназначены для конкретных типов и не являются универсальными.
Настраиваемые элементы select
Значение base-select, применяемое только к элементу <select> и псевдоэлементу ::picker(select), позволяет стилизовать элементы <select> и средство выбора (содержащее элементы <option>). Средство выбора отображается на верхнем слое, подобно всплывающему окну. Если задано base-select, средство выбора можно позиционировать относительно элемента select (или других элементов), используя возможности якорного позиционирования CSS. Кроме того, значение base-select не позволяет <select> отображаться за пределами окна браузера или запускать встроенные компоненты мобильной операционной системы. Его размер также больше не определяется шириной самого широкого элемента <option>.
Дополнительную информацию см. в разделе Настраиваемые элементы select.
Непрефиксные нестандартные значения
До стандартизации свойства с префиксами -moz-appearance и -webkit-appearance позволяли отображать элементы в виде таких виджетов, как кнопки или флажки. В устаревших таблицах стилей могут встречаться следующие нестандартные значения, чаще всего в качестве значений псевдоэлементов с префиксом компонентов shadow DOM.
Нестандартные значения
- `attachment` - `borderless-attachment` - `button-bevel` - `caps-lock-indicator` - `caret` - `checkbox-container` - `checkbox-label` - `checkmenuitem` - `color-well` - `continuous-capacity-level-indicator` - `default-button` - `discrete-capacity-level-indicator` - `inner-spin-button` - `image-controls-button` - `list-button` - `listitem` - `media-enter-fullscreen-button` - `media-exit-fullscreen-button` - `media-fullscreen-volume-slider` - `media-fullscreen-volume-slider-thumb` - `media-mute-button` - `media-play-button` - `media-overlay-play-button` - `media-return-to-realtime-button` - `media-rewind-button` - `media-seek-back-button` - `media-seek-forward-button` - `media-toggle-closed-captions-button` - `media-slider` - `media-sliderthumb` - `media-volume-slider-container` - `media-volume-slider-mute-button` - `media-volume-slider` - `media-volume-sliderthumb` - `media-controls-background` - `media-controls-dark-bar-background` - `media-controls-fullscreen-background` - `media-controls-light-bar-background` - `media-current-time-display` - `media-time-remaining-display` - `menulist-text` - `menulist-textfield` - `meterbar` - `number-input` - `progress-bar-value` - `progressbar` - `progressbar-vertical` - `range` - `range-thumb` - `rating-level-indicator` - `relevancy-level-indicator` - `scale-horizontal` - `scalethumbend` - `scalethumb-horizontal` - `scalethumbstart` - `scalethumbtick` - `scalethumb-vertical` - `scale-vertical` - `scrollbarthumb-horizontal` - `scrollbarthumb-vertical` - `scrollbartrack-horizontal` - `scrollbartrack-vertical` - `searchfield-decoration` - `searchfield-results-decoration` - `searchfield-results-button` - `searchfield-cancel-button` - `snapshotted-plugin-overlay` - `sheet` - `sliderthumb-horizontal` - `sliderthumb-vertical` - `textfield-multiline`Авторам рекомендуется использовать только стандартные ключевые слова.
Формальное определение
| Начальное значение | none |
|---|---|
| Применяется к | всем элементам |
| Наследуется | нет |
| Вычисленное значение | как указано |
| Тип анимации | дискретный |
Формальный синтаксис
appearance = none | auto | <compat-auto> | <compat-special> <compat-auto> = searchfield | textarea | checkbox | radio | menulist | listbox | meter | progress-bar | button <compat-special> = textfield | menulist-button
Примеры
Базовый пример
В этом примере показано базовое использование свойства appearance, изменяющего внешний вид элемента <input> в некоторых браузерах.
HTML
Мы добавляем два элемента управления формы number и соответствующие им подписи.
<p>
<label>Enter a number: <input type="number" min="0" max="10" /></label>
</p>
<p>
<label
>Enter a number: <input type="number" min="0" max="10" class="text"
/></label>
</p>
CSS
Мы задаём элементу с классом text вид текстового поля.
.text {
appearance: textfield;
}
Результаты
В зависимости от браузера, если элемент управления отображается как текстовое поле, индикатор прокрутки может визуально исчезнуть. Свойство appearance не влияет на функциональность: например, хотя щёлкнуть по индикатору прокрутки уже нельзя, клавиши со стрелками вверх и вниз по-прежнему увеличивают и уменьшают значение.
Значение appearance — none
В следующем примере показано, как удалить стили по умолчанию у флажка, переключателя и элемента <select> и применить собственные стили.
HTML
Мы добавляем пары флажков, переключателей и элементов <select> вместе с соответствующими подписями:
<label><input type="checkbox" /> Default unchecked </label>
<label><input type="checkbox" checked /> Default checked </label>
<hr />
<label><input type="radio" name="radio" /> Default unchecked </label>
<label><input type="radio" name="radio" checked /> Default checked </label>
<hr />
<label
>Unstyled select
<select>
<option>Option 1</option>
<option>Option 2</option>
</select>
</label>
<label
>Styled select
<select class="none">
<option>Option 1</option>
<option>Option 2</option>
</select>
</label>
CSS
label {
display: block;
margin: 0.5em 0;
}
Мы применяем стили к обоим элементам <input> типа checkbox; эти стили создают красный квадрат, если элемент можно стилизовать. Мы задаём appearance: none для состояния пользовательского интерфейса :checked всех элементов input (checkbox и radio), а также элементов с классом .none. Это удаляет все стили переключателя и флажка, кроме отступов, и позволяет применять любые заданные стили. Для переключателей и элементов <select> не предусмотрены альтернативные стили на случай, если задано none.
[type="checkbox"] {
width: 1em;
height: 1em;
display: inline-block;
background: red;
}
input:checked,
.none {
appearance: none;
}
Результат
Значение appearance: none позволяет стилизовать элементы пользовательского интерфейса, но также может привести к тому, что виджет станет невидимым. Непомеченный флажок, у которого значение appearance по умолчанию равно auto, выглядит как обычный флажок. Задание appearance: none для состояния :checked позволяет стилизовать его.
Как и непомеченный флажок, непомеченный переключатель выглядит как нативный элемент пользовательского интерфейса, потому что он им и является. В отмеченном состоянии, когда применено appearance: none, переключатель исчезает; его функциональность сохраняется, и на отображение страницы влияют только его отступы.
Настройка внешнего вида элемента select
С помощью свойства appearance можно включить пользовательскую функциональность элемента select и стилизовать элемент <select> и его средство выбора — часть элемента управления формы, которая появляется поверх страницы.
HTML
Мы добавляем три элемента <select> с одинаковым набором дочерних элементов <option>. Как и для каждого элемента <select>, мы также добавляем связанные элементы <label>. В третьем варианте содержится больше текста, чтобы показать влияние base-select на ширину элемента <select>:
<label for="ice-cream1"
>Default flavor:
<select id="ice-cream1">
<option>Asparagus</option>
<option>Dulce de leche</option>
<option>Pistachio, rum raisin, and coffee</option>
</select>
</label>
<label for="ice-cream2"
>Base select flavor:
<select id="ice-cream2" class="baseSelect">
<option>Asparagus</option>
<option>Dulce de leche</option>
<option>Pistachio, rum raisin, and coffee</option>
</select>
</label>
<label for="ice-cream3"
>Menulist button flavor:
<select id="ice-cream3" class="menulistButton">
<option>Asparagus</option>
<option>Dulce de leche</option>
<option>Pistachio, rum raisin, and coffee</option>
</select>
</label>
CSS
Мы выбираем средства выбора всех элементов <select> с помощью псевдоэлемента ::picker() с параметром select. Для всех средств выбора и одного элемента <select> мы задаём значение appearance, равное base-select. Для последнего элемента <select> задаём значение menulist-button. Для первого элемента <select> по умолчанию используется состояние auto:
.baseSelect,
::picker(select) {
appearance: base-select;
}
.menulistButton {
appearance: menulist-button;
}
label {
display: block;
}
Мы задаём значения свойствам background-color и border элементов <select> и их средств выбора, чтобы продемонстрировать эффект значений appearance:
select {
border: 1px solid red;
background-color: orange;
}
::picker(select) {
background-color: yellow;
border: none;
}
Результаты
Стили background-color и border заданы для всех элементов <select> и их средств выбора, однако стили ::picker(select) влияют только на средство выбора, для которого и у элемента select, и у самого средства выбора свойство appearance задано в значение base-select. Первый и третий элементы select выглядят одинаково, потому что menulist-button — это ключевое слово для совместимости.
Обратите внимание: по умолчанию строчный размер элемента <select> обычно совпадает со строчным размером элемента <option>, содержащего больше всего текста. При открытии раскрывающееся средство выбора отображается поверх страницы и не ограничивается окружающим содержимым, поэтому оно полностью видно. После задания base-select это уже не так.
Спецификации
Совместимость с браузерами
| Настольные ПК | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari в iOS | Samsung Internet | Android WebView | WebView в iOS | |
appearance |
84
1
|
84
12
|
80
64
1
|
70
15
|
15.4
3
|
84
18
|
80
64
4
|
60
14
|
15.4
1
|
14.0
1.0
|
84
4.4
|
15.4
1
|
auto |
83 |
83 |
80 |
69 |
15.4 |
83 |
80 |
59 |
15.4 |
13.0 |
83 |
15.4 |
base-select |
135 |
135 |
149 |
120 |
27 |
135 |
Нет |
89 |
27 |
29.0 |
135 |
27 |
button |
1 |
12 |
1 |
15 |
3 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
checkbox |
1 |
12 |
1 |
15 |
3 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
listbox |
1 |
12 |
1 |
15 |
3 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
menulist |
1 |
12 |
1 |
15 |
3 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
menulist-button |
1 |
12 |
80
1–80См. ошибку 1481615. |
15 |
3 |
18 |
80
4–80См. ошибку 1481615. |
14 |
1 |
1.0 |
4.4 |
1 |
meter |
1 |
12 |
1 |
15 |
3 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
none |
1 |
12 |
54
1–54Не работает с<input type="checkbox"> и <input type="radio">. |
15 |
3 |
18 |
54
4–54Не работает с<input type="checkbox"> и <input type="radio">. |
14 |
3 |
1.0 |
4.4 |
3 |
progress-bar |
1 |
12 |
1 |
15 |
3 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
radio |
1 |
12 |
1 |
15 |
3 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
searchfield |
1 |
12 |
1 |
15 |
3 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
textarea |
1 |
12 |
1 |
15 |
3 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
textfield |
1 |
12 |
1 |
15 |
3 |
18 |
4 |
14 |
1 |
1.0 |
4.4 |
1 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/appearance