Доступный цвет
Не используйте только цвет, чтобы указать на наличие компонента пользовательского интерфейса или его состояние. Для этого лучше использовать значки и/или форму. Не обозначайте успех или ошибки ТОЛЬКО цветом. Используйте значки или текст.
<!-- Good: Denotes state without colors alone -->
<div class="error-msg">
<span aria-hidden="true">❌</span>
<span>The password entered was invalid.</span>
</div>
Контрастность
- Минимальные стандарты контрастности. Поддерживайте соотношение 4,5:1 для обычного текста и 3:1 для крупного текста или значков.
- Обеспечьте достаточный контраст нетекстовых элементов. Коэффициент контрастности границ и состояний компонентов пользовательского интерфейса должен быть не менее 3:1.
- К ним относятся визуальные элементы (границы, фоны, тени, подчеркивания), которые образуют границу или указывают на наличие компонента пользовательского интерфейса (например, границы поля ввода).
- Это также относится к визуальным элементам, указывающим на активное состояние компонента (например, флажкам или переключателям).
- Предостережение. Соблюдение коэффициента контрастности 3:1 для нетекстовых элементов может быть сложной задачей при минималистичном дизайне. Мягкие градиенты или едва заметные внутренние и внешние тени могут смягчить визуальные границы, не нарушая требований к специальным возможностям.
- Используйте
prefers-contrastтолько при необходимости.@media (prefers-contrast: more)подходит для дизайнов с низкоконтрастными акцентами (например, тонкими границами или приглушенным второстепенным текстом), которые нужно усилить. Большинству сайтов, которые уже соответствуют базовому уровню контрастности, это не нужно.
Светлая и тёмная цветовые схемы
- Поддержка светлой и темной цветовых схем. Используйте медиазапрос
@media (prefers-color-scheme: dark)и свойство CSScolor-scheme, чтобы элементы управления формами, полосы прокрутки и другие элементы интерфейса, отрисовываемые агентом пользователя, соответствовали выбранной теме. Подробнее о тёмной теме…
Режим принудительных цветов
- Поддержка режима принудительного использования цветов. В режиме принудительного использования цветов (высокая контрастность в Windows) браузер заменяет цвета, заданные автором, системными ключевыми словами и удаляет
background-image,box-shadowиborder-image. Определите резервные системные цвета для токенов цвета с помощью@media (forced-colors: active). - Используйте
forced-color-adjust: none, только если цвет является важной информацией (например, для подсветки синтаксиса или в палитре). НЕ используйтеforced-color-adjust: noneтолько для сохранения эстетики. - Не полагайтесь на
background-image,box-shadowилиborder-imageдля передачи границ, разделителей или состояния. Они исчезают в принудительных цветах (и часто при печати тоже). Если это необходимо, убедитесь, что в режиме принудительных цветов есть альтернатива, напримерoutlineилиborderс ключевыми словами системных цветов (CanvasText,LinkText,ButtonText,Highlight,GrayTextи т. д.).
Создание оттенков
Прежде чем генерировать оттенки динамически, проверьте, можно ли использовать существующий, предопределенный токен дизайна. Это позволяет дизайнерам лучше контролировать внешний вид и обеспечивает единообразие.
Если вам нужно динамически генерировать более светлые или темные цвета:
- НЕ настраивайте только канал яркости в
oklch/oklabилиlch/lab, напримерoklab(from var(--primary) 0.9 a b). Теоретически это правильный способ, но браузеры пока не поддерживают сопоставление цветовой гаммы, поэтому результат может быть непредсказуемым. - Вы можете использовать
color-mix(), чтобы смешивать цвета с белым или черным (желательно вoklab). Это позволяет сохранить цвет в гамме, но может привести к чрезмерной десатурации и получению размытых оттенков. - Вы МОЖЕТЕ комбинировать настройку яркости с любым другим методом (например,
color-mix(in oklab, oklch(from var(--primary) 0.9 c h), white 30%)), чтобы найти баланс между ними, но не увеличивайте яркость более чем на 30 %.