edubun
Русский

Цвет и единицы измерения

У светло-серого текста #bbbbbb на белом коэффициент контраста 1.92 к 1. WCAG требует не меньше 4.5 к 1 для обычного текста.

Способы записать цвет

CSS принимает цвета в нескольких записях, и все они сводятся к одному: количеству красного, зелёного и синего света на экране. Именованные цвета, например red, navy или rebeccapurple, легко читать, но их немного. Шестнадцатеричная запись задаёт красный, зелёный и синий двумя шестнадцатеричными цифрами каждый, от 00 до ff (от 0 до 255): #1a5fb4 означает 26 красного, 95 зелёного и 180 синего, то есть средний синий. rgb(26 95 180) говорит то же в десятичной записи. hsl(210 80% 40%) описывает цвет через тон (угол на цветовом круге, где 0 соответствует красному, 120 зелёному, 240 синему), насыщенность и светлоту, поэтому светлый или тёмный оттенок того же тона легко получить, изменив одно число.

color: navy;
color: #1a5fb4;              /* same as #1A5FB4 */
color: #36c;                 /* short form of #3366cc */
color: rgb(26 95 180);
color: rgb(26 95 180 / 50%); /* half transparent */
color: hsl(210 80% 40%);
background-color: transparent;
Старая запись через запятые, rgb(26, 95, 180), по-прежнему работает везде.

Четвёртое значение после косой черты задаёт альфа-канал: rgb(0 0 0 / 50%) означает чёрный с непрозрачностью наполовину, так что всё, что позади, просвечивает. color задаёт цвет текста, background-color заливку позади элемента, а border-color его рамку. Ключевое слово currentColor означает цвет текста элемента, это удобно для значков и рамок, которые должны совпадать с текстом.

Контраст обязателен

Текст, который по светлоте слишком близок к фону, многим трудно читать: людям со слабым зрением, пожилым читателям и всем, кто смотрит в телефон на солнце. WCAG 2.2, руководство W3C по доступности, измеряет это коэффициентом контраста от 1 к 1 (никакой разницы) до 21 к 1 (чёрное на белом). Критерий успеха 1.4.3 требует не меньше 4.5 к 1 для обычного текста и 3 к 1 для крупного, который WCAG определяет как не меньше 18 пунктов, или 14 пунктов жирным. Тёмно-серый #767676 на белом проходит впритык с 4.54 к 1; #777777 чуть не проходит с 4.48. Инструменты разработчика в браузере показывают коэффициент, когда ты изучаешь текстовый элемент, так что гадать не нужно.

Кроме того, цвет никогда не должен быть единственным способом показать информацию. Форма, которая отмечает ошибки только красной рамкой, бесполезна для тех, кто плохо различает красный; добавь ещё сообщение или значок.

Абсолютные и относительные единицы

Длинам нужна единица измерения, кроме нуля. px является CSS-пикселем, фиксированной единицей; на экранах высокой плотности один CSS-пиксель занимает несколько физических пикселей, поэтому на глаз он остаётся примерно одного размера. Относительные единицы зависят от чего-то другого. em зависит от размера шрифта самого элемента, поэтому padding: 0.5em у текста в 20 пикселей равен 10 пикселям. rem зависит от размера шрифта корня (html), который в браузерах равен 16 пикселям, если читатель его не менял, поэтому 1.25rem обычно равен 20 пикселям. % зависит от родителя, обычно от его ширины. vw и vh являются сотыми долями ширины и высоты области просмотра, а ch примерно равен ширине цифры ноль в текущем шрифте.

Что выбрать? Размер текста в rem уважает читателя: если человек включил в браузере крупный текст, всё, что задано в rem, увеличится вместе с ним, а текст с размером в px может и не увеличиться. Внутренний отступ в em растёт вместе с текстом, который он окружает. Пиксели хороши для того, что не должно масштабироваться, например для рамки в 1 пиксель.

шестнадцатеричный цвет#rrggbb, каждая пара от 00 до ff
hsl()Угол тона, насыщенность в %, светлота в %
альфаНепрозрачность, после косой черты: rgb(0 0 0 / 50%)
коэффициент контраста4.5:1 для обычного текста, 3:1 для крупного (WCAG 1.4.3)
pxCSS-пиксель, фиксированная единица
emОтносительно размера шрифта элемента
remОтносительно размера шрифта корня (по умолчанию 16px)
vw / vh1% ширины / высоты области просмотра
  1. Сколько красного в #ff8000 по шкале от 0 до 255?
  2. Сколько зелёного в #ff8000?
  3. Какой угол тона в hsl() соответствует чистому зелёному?
  4. Какой минимальный коэффициент контраста WCAG 1.4.3 требует для обычного текста?
    • 4.5 to 1
    • 3 to 1
    • 7 to 1
  5. Проходит ли #777777 на белом требование 4.5 к 1?
    • Нет, у него 4.48 к 1
    • Да, у него 4.54 к 1
    • Да, проходит любой серый
  6. Размер шрифта корня 16px. Сколько пикселей в 1.5rem?
  7. У элемента font-size: 20px и padding: 0.5em. Сколько пикселей составляет внутренний отступ?
  8. Ширина области просмотра 400px. Какова ширина 50vw?
  9. Почему размер текста лучше задавать в rem, а не в px?
    • Он следует настройке размера текста в браузере читателя
    • Он всегда меньше
    • Он быстрее загружается
  10. Форма отмечает ошибки только красной рамкой. Чего не хватает?
    • Сообщения или значка, потому что одного цвета недостаточно
    • Более тёмного красного
    • Ничего
Главное
  • Цвета: именованные, шестнадцатеричные, rgb() и hsl(); косая черта добавляет альфу.
  • WCAG 1.4.3: 4.5:1 для обычного текста, 3:1 для крупного; никогда не полагайся только на цвет.
  • px фиксирован; em следует размеру шрифта элемента; rem следует корню (по умолчанию 16px).
Источники курса (6)
  • W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
  • MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
  • W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
  • W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
  • 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
  • every code exercise checked with a Playwright probe against a reference solution.

Проверено: 2026-10-17