Контрастность цветов и доступность: руководство по WCAG
Полное руководство по требованиям WCAG к контрастности цветов, соотношениям для обычного и крупного текста, а также инструментам проверки доступности.
Каждый раз, когда вы щуритесь на веб-сайте из-за слишком светлого текста или с трудом разбираете подпись кнопки, сливающейся с фоном, вы сталкиваетесь с провалом контрастности. Для большинства людей это просто небольшое неудобство. Для значительной части населения — людей с нарушениями цветового зрения, слабовидящих, людей с возрастными изменениями зрения или тех, кто работает с экраном на ярком солнце, — это делает контент по-настоящему недоступным. Контрастность цветов — один из наиболее значимых и наиболее часто нарушаемых аспектов веб-доступности, и при этом один из самых простых для исправления, как только вы разберётесь в правилах. В этом руководстве объясняется стандарт, формулы расчёта, типичные ошибки и то, как использовать Проверку контрастности цветов BrowseryTools, чтобы мгновенно проверить любую пару цветов прямо в браузере.
Почему контрастность важна
Масштаб затронутой аудитории больше, чем обычно предполагают дизайнеры. По данным Всемирной организации здравоохранения, около 2,2 миллиарда человек в мире имеют те или иные нарушения зрения. Аномалии цветового зрения — широко известные как цветовая слепота — затрагивают примерно 8% мужчин и 0,5% женщин среди населения северноевропейского происхождения, что составляет около 300 миллионов человек, испытывающих трудности с различением определённых цветов.
Помимо постоянных нарушений, контрастность ситуативно влияет на всех:
- Чтение телефона на ярком уличном солнце полностью «смывает» текст с низкой контрастностью.
- Старые или бюджетные мониторы имеют сниженную яркость и худшую точность цветопередачи.
- Люди с мигренью и светочувствительностью часто используют дисплеи с уменьшенной яркостью.
- Блики от окон или верхнего освещения фактически снижают воспринимаемую контрастность.
- Пользователи в спешке — по сути, все — быстрее воспринимают контент с высокой контрастностью.
Хорошая контрастность — не узкая уступка отдельной аудитории. Она улучшает опыт каждого пользователя, на каждом устройстве, в любых условиях освещения.
Что такое коэффициент контрастности?
Коэффициент контрастности — стандартизированное число, выражающее различие двух цветов по относительной яркости (светимости). Он всегда выражается в виде соотношения: более светлый цвет делится на более тёмный, причём к каждому добавляется 0,05 — чтобы избежать деления на ноль и учесть окружающий свет реальных дисплеев.
Диапазон — от 1:1 (два одинаковых цвета — нулевая контрастность, полная нечитаемость) до 21:1 (чёрный на белом — максимально возможная контрастность). Чем выше коэффициент, тем заметнее различие между двумя цветами.
Как рассчитывается коэффициент контрастности
Формула, используемая WCAG (и всей экосистемой веб-стандартов), опирается на понятие относительной светимости — меры того, сколько света, по ощущениям, излучает цвет с учётом особенностей человеческого восприятия. Расчёт выполняется в два шага.
Шаг 1: вычислить относительную светимость (L) для каждого цвета.
Сначала каждый канал RGB переводится из диапазона 0–255 в линейную шкалу 0–1, затем применяется гамма-формула для компенсации способа кодирования яркости на дисплее:
// Для каждого значения канала c в [0, 1]:
if c <= 0.04045:
c_linear = c / 12.92
else:
c_linear = ((c + 0.055) / 1.055) ^ 2.4
L = 0.2126 × R_linear + 0.7152 × G_linear + 0.0722 × B_linearКоэффициенты 0,2126, 0,7152 и 0,0722 отражают чувствительность человеческого зрения: наш глаз наиболее чувствителен к зелёному, умеренно — к красному, и наименее — к синему.
Шаг 2: вычислить коэффициент контрастности.
Коэффициент контрастности = (L_lighter + 0.05) / (L_darker + 0.05)
Где L_lighter — относительная светимость более светлого цвета, а L_darker — относительная светимость более тёмного цвета.
Примеры расчётов
- Чёрный (#000000) на белом (#FFFFFF): L(белый) = 1,0; L(чёрный) = 0,0. Коэффициент = (1,0 + 0,05) / (0,0 + 0,05) = 1,05 / 0,05 = 21:1. Максимально возможная контрастность.
- Серый #767676 на белом (#FFFFFF): L(#767676) ≈ 0,216. Коэффициент = (1,0 + 0,05) / (0,216 + 0,05) ≈ 1,05 / 0,266 ≈ 4,54:1. Едва проходит уровень WCAG AA для обычного текста.
- Серый #999999 на белом (#FFFFFF): L(#999999) ≈ 0,319. Коэффициент = (1,0 + 0,05) / (0,319 + 0,05) ≈ 1,05 / 0,369 ≈ 2,85:1. Не проходит уровень WCAG AA для текста любого размера.
WCAG: стандарт, определяющий требования к доступности
Руководство по обеспечению доступности веб-контента (WCAG) публикуется Консорциумом Всемирной паутины (W3C) и является международно признанным стандартом веб-доступности. Актуальная версия, используемая в большинстве нормативных актов, — WCAG 2.1 (2018 год). WCAG 3.0 находится в разработке и в конечном счёте заменит её более нюансированной системой измерения, но WCAG 2.1 остаётся действующим стандартом для целей соответствия.
WCAG структурирует требования по трём уровням соответствия: A (минимальный), AA (стандартный) и AAA (расширенный). Уровень AA требуется большинством правовых систем. Уровень AAA является желательным, но не обязательным для всего сайта — только для отдельных контекстов.
Требования WCAG 2.1 по контрастности — кратко
- Уровень AA — обычный текст: минимальный коэффициент контрастности 4,5:1
- Уровень AA — крупный текст: минимальный коэффициент контрастности 3:1(крупный текст — 18 pt / 24 px обычного начертания или 14 pt / ~18,67 px жирного начертания)
- Уровень AA — элементы интерфейса и графические объекты: минимальный коэффициент контрастности 3:1(рамки кнопок, обводка полей ввода, значки, несущие смысловую нагрузку)
- Уровень AAA — обычный текст: минимальный коэффициент контрастности 7:1
- Уровень AAA — крупный текст: минимальный коэффициент контрастности 4,5:1
Важно понимать, на что требования по контрастности не распространяются: декоративные изображения без информационного содержания, логотипы и фирменные знаки, а также текст, входящий в состав неактивного элемента интерфейса (например, заблокированной кнопки), освобождены от требований WCAG 2.1. Цель стандарта — защита информационного контента, а не сугубо декоративных элементов.
Примеры пар цветов: прошедшие и не прошедшие проверку
Коэффициент контрастности пары цветов определяется исключительно относительной светимостью двух цветов, а не тем, какой из них «красивее» или кажется похожим на другой на взгляд. Ниже приведены репрезентативные примеры из разных диапазонов:
| Цвет текста | Цвет фона | Коэффициент | AA обычный | AAA обычный |
|---|---|---|---|---|
#000000 (чёрный) | #FFFFFF (белый) | 21:1 | Прошёл | Прошёл |
#1a1a2e (тёмно-синий) | #FFFFFF (белый) | 18,1:1 | Прошёл | Прошёл |
#595959 (тёмно-серый) | #FFFFFF (белый) | 7,0:1 | Прошёл | Прошёл |
#767676 (средне-серый) | #FFFFFF (белый) | 4,54:1 | Прошёл | Не прошёл |
#FFFFFF (белый) | #4f46e5 (индиго) | 5,9:1 | Прошёл | Не прошёл |
#999999 (светло-серый) | #FFFFFF (белый) | 2,85:1 | Не прошёл | Не прошёл |
#FFFFFF (белый) | #ffdd00 (жёлтый) | 1,29:1 | Не прошёл | Не прошёл |
#0000ee (синяя ссылка) | #6b21a8 (фиолетовый) | 1,7:1 | Не прошёл | Не прошёл |
Типичные ошибки контрастности
В аудитах доступности по всему вебу снова и снова встречаются одни и те же ошибки. Знание их «по именам» помогает замечать их в собственной работе.
Светло-серый текст на белом фоне
Это наиболее распространённый провал контрастности в современном вебе. Тренд на минимализм породил целое поколение интерфейсов, в которых основной текст, подписи, метаданные и placeholder-текст отображаются оттенками вроде #aaaaaa, #bbbbbbили #cccccc на белом фоне. Такие комбинации, как правило, дают коэффициент контрастности 1,5–2,5:1 — значительно ниже минимума 4,5:1. Дизайнер видит это на откалиброванном мониторе в затемнённой комнате; конечный пользователь с телефоном на послеполуденном солнце — нет.
Белый текст на цветных кнопках
Белый текст на жёлтом (#ffdd00), ярко-зелёном (#84cc16) или светло-оранжевом (#fb923c) фоне не проходит WCAG AA ни при каком размере текста. Такие сочетания визуально эффектны, но контрастность слишком низка. Тёмный текст (чёрный или очень тёмно-серый) на этих ярких фонах — доступное решение, при котором коэффициент обычно превышает 10:1.
Текст-подсказка в полях ввода
Браузерный placeholder-текст по умолчанию отображается примерно при 40% непрозрачности основного цвета текста или как средне-серый наподобие #aaaaaa. Это почти повсеместно не проходит WCAG AA. Placeholder-текст подпадает под то же требование 4,5:1, что и обычный текст, поскольку несёт информацию о том, что следует ввести.
Синие ссылки на цветном или тёмном фоне
Традиционный цвет гиперссылки (#0000ee) отлично контрастирует на белом фоне (8,6:1), но теряет контрастность на цветных фонах. На среднефиолетовом фоне тот же синий цвет ссылки даёт лишь около 1,7:1. Цвета ссылок нужно проверять не только на фоне страницы, но и на фоне любых цветных секций или карточек, в которые они помещены.
Заблокированные состояния и индикаторы фокуса
Хотя WCAG 2.1 освобождает неактивные элементы интерфейса от требований по контрастности, индикаторы фокуса — видимое кольцо или обводка, которая появляется при переходе пользователя к интерактивному элементу с помощью Tab, — должны соответствовать коэффициенту 3:1 по WCAG 2.2. Многие сайты скрывают стандартное кольцо фокуса через outline: noneи не предоставляют замены — это нарушение доступности для пользователей клавиатуры.
Методы выбора доступных цветов
Начинайте с тёмного на светлом
Самый надёжный вариант для текста — почти чёрный текст на белом или очень светло-сером фоне. Коэффициенты выше 10:1 легко достижимы и дают большую свободу в выборе размера и насыщенности шрифта. Оставьте светлые схемы на тёмном фоне (тёмная тема) для второстепенных поверхностей и проверяйте контрастность в обеих темах.
Проверяйте все интерактивные состояния
Кнопка в состоянии по умолчанию может соответствовать уровню AA, тогда как при наведении — с осветлённым фоном — падать ниже 4,5:1. Проверяйте отдельно состояния по умолчанию, при наведении, в фокусе, активное и заблокированное. Заблокированное состояние освобождено от требования, все остальные должны его выполнять.
Правило 60-30-10 в доступном применении
Цветовое правило 60-30-10 (60% — доминирующий цвет, 30% — второстепенный, 10% — акцентный) полезно для визуальной иерархии. Применяя его доступно, убедитесь, что текст в каждой из трёх цветовых зон соответствует порогу контрастности именно для этой зоны. Акцентный цвет при 10% чаще всего является проблемным: яркие акценты в паре с белым или тёмным текстом могут не пройти проверку при определённых сочетаниях тона и насыщенности.
Используйте проверку контрастности до начала вёрстки
Дешевле всего исправить проблему контрастности ещё до написания кода. При выборе цветов в инструменте дизайна немедленно проверяйте запланированные пары текст/фон. Изменение светлоты цвета на 10–15% нередко переводит провальную комбинацию в соответствие стандарту без ощутимого изменения визуального характера дизайна.
Правовые требования
Соответствие WCAG во многих юрисдикциях не является добровольным. Правовые системы, ссылающиеся на WCAG AA, включают:
- США — Закон об американцах с инвалидностью (ADA): ADA запрещает дискриминацию по инвалидности в местах общественного обслуживания. Федеральные суды и Министерство юстиции распространили это понятие на коммерческие веб-сайты. Ежегодно в федеральных судах США подаются тысячи исков о нарушении ADA в сфере доступности, причём нарушения контрастности часто упоминаются в досудебных претензиях.
- Европейский союз — EN 301 549: Директива ЕС о веб-доступности обязывает государственные веб-сайты и мобильные приложения соответствовать WCAG 2.1 уровня AA. EN 301 549 — это технический стандарт, используемый при государственных закупках. Требования к частному сектору в регулируемых отраслях также растут.
- Канада — AODA (Закон об доступности для жителей Онтарио с ограниченными возможностями): Онтарио обязывает частные организации с 50 и более сотрудниками и все государственные структуры соответствовать WCAG 2.0 уровня AA.
- Великобритания — Закон о равенстве 2010 года: Поставщики услуг обязаны вносить разумные коррективы для людей с инвалидностью, и правительство Великобритании трактует это как включение доступности веб-сайтов.
Помимо правового риска, многие корпоративные клиенты и государственные процедуры закупок теперь требуют соответствия WCAG AA в контрактах с поставщиками. Доступность превращается в коммерческое требование, а не только в этическое.
Ключевое требование для запоминания
WCAG 2.1 уровня AA требует коэффициента контрастности 4,5:1 для обычного текста и 3:1 для крупного текста (18 pt и выше или 14 pt и выше жирным). Обводка элементов интерфейса и смысловые значки также требуют 3:1. Несоответствие этим порогам означает несоответствие наиболее широко применяемому стандарту доступности в вебе.
Кто выигрывает помимо людей с инвалидностью
Доступная контрастность — это хороший дизайн для всех. Исследования в области UX неизменно показывают, что высококонтрастный текст читается быстрее и с меньшим числом ошибок во всех группах пользователей. Среди тех, кто выигрывает больше всего:
- Люди с нарушениями цветового зрения (красно-зелёным, сине-жёлтым или монохроматизмом)
- Пожилые люди, у которых чувствительность к контрасту естественно снижается с возрастом
- Слабовидящие, не использующие экранное увеличение
- Пользователи в условиях высокой внешней освещённости (на улице, у окна)
- Пользователи с некачественными, устаревшими или бюджетными дисплеями
- Все, кто испытывает когнитивную нагрузку — при усталости или рассеянности высокая контрастность снижает ошибки чтения
Как использовать Проверку контрастности BrowseryTools
Проверка контрастности цветов BrowseryTools делает тривиальной проверку любой комбинации цветов на соответствие стандартам WCAG:
- Введите HEX-коды: введите или вставьте любой допустимый шестнадцатеричный код цвета (3 или 6 цифр, с символом
#или без него) в поля переднего плана и фона. - Мгновенный результат: коэффициент контрастности рассчитывается и отображается в режиме реального времени по мере ввода — никаких кнопок нажимать не нужно.
- Бейджи AA и AAA: наглядные бейджи «Прошёл/Не прошёл» отображаются для уровня AA (обычный и крупный текст) и уровня AAA (обычный и крупный текст) — видно, каким порогам соответствует ваша пара.
- Живой предпросмотр: инструмент отображает образец текста на выбранном фоне, чтобы вы видели комбинацию так, как её увидит пользователь.
- Используйте палитру цветов: если конкретного HEX-значения нет, встроенная палитра позволяет выбирать цвета визуально и сразу видеть, как меняется коэффициент при перемещении по цветовому пространству.
Мгновенная проверка любой комбинации цветов на WCAG AA и AAA
Введите два HEX-кода и получите коэффициент контрастности, статус и живой предпросмотр текста. Регистрация не требуется. Ничего не загружается.
Открыть Проверку контрастности →Try the Tools — 100% Free, No Sign-Up
Everything runs in your browser. No uploads. No accounts. No ads.
Explore All Tools →