edubun
Русский

Оформляем небольшую страницу

Страница пекарни из курса HTML получает цвета, отступы и раскладку примерно из 40 строк CSS, а HTML не меняется вообще.

Начинай с решений, а не с правил

Прежде чем писать правила, прими несколько решений: один акцентный цвет, цвет текста и фон с достаточным контрастом, один список шрифтов, базовый размер и шаг отступов, который повторяется везде (например, 8, 16 и 24 пикселя). Страница, которая повторно использует несколько значений, выглядит спокойной и продуманной; страница, где у каждого блока свой чуть другой отступ, выглядит неряшливо, даже если никто не может сказать почему. В CSS для этого есть специальная возможность, пользовательские свойства.

Пользовательские свойства

Пользовательское свойство является придуманным тобой именем, которое начинается с двух дефисов и хранит значение: --accent: #1a5fb4;. Задай свои решения один раз в :root, то есть на элементе html, и используй их где угодно через var(): background: var(--accent);. Пользовательские свойства наследуются, как текстовые, поэтому каждый элемент может прочитать те, что заданы в корне. Чтобы поменять акцентный цвет всего сайта, теперь достаточно изменить одну строку. Свойство можно переопределить и внутри медиазапроса, например чтобы поменять цвета для prefers-color-scheme: dark.

:root {
  --accent: #1a5fb4;     /* 6.29:1 on white */
  --ink: #222;
  --paper: #fffdf8;
  --space: 16px;
}
body {
  margin: 0;
  font-family: system-ui, sans-serif;
  line-height: 1.6;
  color: var(--ink);
  background: var(--paper);
}
header { display: flex; justify-content: space-between; align-items: center;
         flex-wrap: wrap; gap: var(--space); padding: var(--space); }
nav ul { display: flex; gap: var(--space); list-style: none; margin: 0; padding: 0; }
main { max-width: 60rem; margin: 0 auto; padding: var(--space); }
.cards { display: grid; gap: var(--space);
         grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }
.card { padding: var(--space); border: 1px solid #ddd; border-radius: 8px; }
img { max-width: 100%; height: auto; }
.btn { background: var(--accent); color: white; border: 0;
       padding: 8px var(--space); border-radius: 6px; font: inherit; }
.btn:hover { background: #154c90; }
.btn:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; }
Полная небольшая таблица стилей для страницы пекарни. #154c90 является чуть более тёмным оттенком акцентного цвета.

Читаем таблицу стилей сверху вниз

Таблица стилей выше использует что-то почти из каждого урока. В корне хранятся решения. body один раз задаёт шрифт, высоту строки и цвета, а наследование переносит их в каждый абзац. Шапка является флекс-строкой с переносом, поэтому на узком телефоне меню опускается под название, а не сжимается. У main есть max-width и margin: 0 auto, которые сохраняют строки удобными для чтения и выравнивают содержимое по центру на широких экранах. Карточки используют шаблон сетки с auto-fill, поэтому перестраиваются из одного столбца в несколько без медиазапроса, а изображения гибкие. У кнопки есть цвет при наведении и, что не менее важно, заметный контур фокуса для пользователей клавиатуры.

Проверь на настоящих экранах

Проверять CSS значит смотреть. Открой страницу в узком окне (320 пикселей для проверки перекомпоновки по WCAG) и в широком и поищи горизонтальную прокрутку и текст, который касается краёв. Увеличь масштаб до 200 процентов. Пройди страницу клавишей Tab и убедись, что всегда видно, где фокус. Проверь контраст текста и кнопок в инструментах разработчика. Включи в системе тёмный режим или уменьшение движения, если ты делал под них стили. Инструменты разработчика в браузере позволяют менять любое значение на лету и видеть блочную модель любого элемента, и это самый быстрый способ понять, почему что-то находится там, где находится.

Дальше те же детали масштабируются до любого сайта. Большие проекты делят таблицу стилей на файлы, называют классы по тому, чем является компонент (card, button, site header), и хранят короткий список общих пользовательских свойств, но правила в основе остаются теми же, что в этих девяти уроках.

пользовательское свойство--name: значение; читается через var(--name)
:rootЭлемент html; здесь хранятся общие значения
var()Использует значение пользовательского свойства
:hoverУказатель над элементом
:focus-visibleВидимый фокус клавиатуры; убрав outline, обязательно задай ему стиль
шкала отступовНесколько повторяющихся значений отступов, например 8, 16, 24
  1. С чего начинается имя пользовательского свойства?
    • С двух дефисов
    • Со знака доллара
    • Со знака @
  2. Как использовать значение --accent?
    • var(--accent)
    • get(--accent)
    • $accent
  3. Зачем задавать общие значения в :root?
    • Пользовательские свойства наследуются, поэтому их может прочитать каждый элемент
    • Только :root принимает пользовательские свойства
    • Так они работают быстрее
  4. Каков коэффициент контраста #1a5fb4 на белом, с округлением до двух знаков после запятой?
  5. Зачем шапке flex-wrap: wrap?
    • На узких экранах меню опускается под название, а не сжимается
    • Чтобы скрыть меню
    • Чтобы сделать текст жирным
  6. Что всегда должно быть у кнопки для пользователей клавиатуры?
    • Заметный стиль фокуса
    • Анимация при наведении
    • Тень
  7. Какая раскладка позволяет карточкам переходить от одного столбца к нескольким без медиазапроса?
    • repeat(auto-fill, minmax(180px, 1fr))
    • grid-template-columns: 180px
    • display: block
  8. --space равно 16px. Сколько пикселей в calc(var(--space) * 1.5)?
  9. Зачем везде повторно использовать несколько значений отступов?
    • Страница выглядит единообразно, и её легче менять
    • Этого требуют браузеры
    • Это улучшает контраст
Главное
  • Сначала реши, какие будут цвета, шрифты и шкала отступов; сохрани их как пользовательские свойства в :root.
  • body один раз задаёт стили текста; flex для шапки, grid для карточек, гибкие изображения.
  • Проверяй при 320px, при масштабе 200%, клавишей Tab и в инструментах разработчика.
Источники курса (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