Селекторы и каскад: оформление в отдельном файле

Зачем:Вы отделите оформление от содержимого и поймёте, почему «моё правило не работает». После урока вы подключаете файл стилей, выбираете нужные элементы и предсказываете, какое из двух правил победит.

30 минут

Озвучено синтезом речи (Qwen3-TTS), голос не принадлежит человеку.

CSS — язык оформления страницы в отдельном файле. Селектор выбирает элементы, а каскад решает, какое правило победит: по важности, специфичности и порядку.

Вид отдельно от смысла

В первой части вы собрали страницу из смысловых элементов, и в браузере она выглядит, как лист из учебника: чёрное на белом, синие ссылки, Times New Roman. Это и есть «страница без оформления», такой её видят сегодня и поисковики, и программы чтения с экрана. Теперь дадим ей вид, и для этого есть отдельный язык: CSS, Cascading Style Sheets, «каскадные таблицы стилей».

Идею отделить вид от смысла в октябре 1994 года, ещё до появления Netscape 2, предложил Хокон Виум Ли, инженер CERN, коллега Тима Бернерса-Ли. Он назвал стили «каскадными»: страницу оформляют сразу несколько источников (браузер, читатель, автор сайта), и надо решить, чьё слово главное. Эту «лесенку приоритетов» вы разберёте в этом уроке. В декабре 1996 года CSS 1 стал рекомендацией W3C, но браузеры годами понимали его по-разному, и работать с ним по-настоящему удалось только в середине 2000-х, когда в 2003 году появился сайт CSS Zen Garden: один и тот же HTML, сотни непохожих оформлений.

Три способа подключить стили

  1. Отдельный файл: в head строка <link rel="stylesheet" href="styles.css">. Все страницы сайта ссылаются на один файл, вид меняется в одном месте, а браузер сохраняет файл и не скачивает его снова. Так делают почти всегда.
  2. Элемент <style> в head: стили лежат в самой странице. Годится для маленького примера или для стилей одной страницы.
  3. Атрибут style="…" у элемента: оформление прямо на нём. Это худший способ: правило нельзя переиспользовать, оно сильнее почти всего остального и портит порядок. Пользуйтесь им редко (например, когда значение вычисляет скрипт).

Помните из урока про рендеринг: CSS блокирует отрисовку, пока браузер его не получил. Поэтому файл стилей подключают в самом начале и держат небольшим.

Правило и селектор

Правило CSS состоит из селектора (кому), а в фигурных скобках пар «свойство: значение;» (что сделать):

.card {
  padding: 1rem;
  border: 1px solid #c9c4b6;
}

Основные селекторы:

  • по тегу: p, h2, a это все такие элементы;
  • по классу: .card это все элементы с class="card". Это главный инструмент: класс можно дать любому элементу и использовать сколько угодно раз;
  • по id: #top это единственный элемент с id="top";
  • потомок: nav a это ссылки внутри nav, на любой глубине; прямой потомок: ul > li;
  • список: h2, h3 это и те, и другие;
  • по состоянию: a:hover (под курсором), a:focus-visible (в фокусе при работе с клавиатуры), li:first-child;
  • по атрибуту: a[href^="tel:"] это ссылки, у которых адрес начинается с «tel:».
Проверьте себя: что выбирает селектор .card?

Все элементы страницы с class=“card”: классом можно пользоваться много раз, в отличие от id.

Наследование

Некоторые свойства передаются от родителя к потомкам сами: цвет текста, шрифт, размер шрифта, межстрочный интервал. Поэтому шрифт и цвет страницы задают один раз у body, а не для каждого абзаца. Другие свойства не наследуются: отступы и рамки принадлежат самому блоку, и дети их не получают. Было бы странно, если бы рамка вокруг абзаца появлялась и вокруг каждого слова.

Каскад: кто победит

Когда на один элемент действует несколько правил, браузер решает по лесенке:

  1. Важность и источник. Правило с !important сильнее обычных. Им лучше не пользоваться: оно ломает лесенку, и бороться с ним можно только таким же.
  2. Специфичность. Чем точнее селектор, тем он сильнее. Её считают тремя числами: (id, классы, теги). #cta это (1, 0, 0), .button это (0, 1, 0), nav a это (0, 0, 2). Сравнивают слева направо: один id сильнее любого числа классов, один класс сильнее любого числа тегов.
  3. Порядок. Если сила равна, побеждает то правило, что ниже по файлу.

Именно так обычно «не работает правило»: вы написали a { color: red } для ссылки, а где-то выше nav a { color: green } (0, 0, 2) оказалось сильнее. Или вы написали правило выше, чем нужно. Попробуйте сами на схеме: правила красят одну и ту же ссылку, и схема считает, кто победит. Поменяйте селекторы и поставьте галочки !important.

Все правила красят одну и ту же ссылку

Элемент: <a class="button" id="cta"> внутри nav внутри header. У каждого правила одно свойство: color.

№Селекторcolor!importantСчёт (id, класс, тег)Итог
1—не селектор
2—не селектор
3—не селектор

Ни одно правило не подходит, и ссылка останется цвета по умолчанию. Порядок такой: сначала !important, потом специфичность, потом то, что ниже по файлу.

Практичные правила, которым следуют сегодня:

  • оформляйте классами и держите специфичность низкой: так правила легко перебить;
  • не оформляйте через id: он слишком сильный, и перебить его можно только другим id;
  • не вкладывайте селекторы глубже двух-трёх уровней;
  • !important оставьте для крайних случаев. В уроке про современный CSS вы увидите лучшее средство: слои, которые заменяют большую часть таких драк.
Проверьте себя: что сильнее, один id или десять классов?

Один id: специфичность сравнивают слева направо, и один id (1, 0, 0) побеждает любое число классов (0, 10, 0).

Палитра по тону

В вашем брифе есть поле «тон». Оно подскажет, из чего собрать палитру: два-три цвета и нейтральный. Вот отправные точки; цифры можно менять, но проверьте контраст (в уроке про цвет вы научитесь это делать):

ТонЧто чувствуетсяИдея палитры
деловойсобранность, довериетёмно-синий, серый, белый; шрифт с засечками в заголовках
тёплыйзабота, уюттерракота и кремовый фон, тёмно-коричневый текст
смелыйэнергияпочти чёрный фон или текст и один яркий акцент
спокойныйясность, воздухприглушённый зелёный или бирюзовый на светлом тёплом фоне

Практика

Вы в 2005 году. Страницу собрали из смыслов, теперь надо её одеть. Файл стилей styles.css уже ждёт вас во второй вкладке. Подключите его в head, а потом по очереди оформите body, шапку, кнопку и карточки. Не поддавайтесь соблазну написать style="…" прямо на элементе: проверка это заметит, и вы потеряете смысл упражнения.

В шапке нужно, чтобы текст читался на её фоне. Подберите цвета по вашему тону: контраст проверит программа.

Что было не так с 2005 годом

Главная беда была не в CSS, а в браузерах. Internet Explorer 6, самый массовый, читал CSS по-своему, и авторы писали «хаки» (хитрые строки, которые понимал один браузер и игнорировали другие) и условные комментарии для разных версий. Модный стиль «веб 2.0» с глянцевыми градиентами, тенями и закруглёнными кнопками тоже ушёл: он был привязан к тому, как тогда рисовали картинки. Остаётся то, что работает до сих пор: HTML для смысла, CSS для вида, классы как язык между ними.

Практика

Готовлю вашу страницу…

Тест

Вопрос 1 из 6

Зачем выносить оформление в отдельный файл styles.css?

Один ответ

Карточки

Эти карточки попадут в повторение, когда вы завершите урок.

  • В чём идея CSS?

    Ответ

    Отделить вид от смысла: HTML говорит, что есть что, а CSS в отдельном файле, как это выглядит. Предложил Хокон Ли в 1994 году.

  • Как подключить файл стилей?

    Ответ

    В head: <link rel="stylesheet" href="styles.css">. Не пишите стили в атрибуте style: их нельзя переиспользовать.

  • Из чего состоит правило CSS?

    Ответ

    Селектор (кому), фигурные скобки, а в них пары «свойство: значение;». Например: .card { padding: 1rem; }.

  • Как каскад решает, какое правило победит?

    Ответ

    Сначала !important, потом специфичность (id сильнее класса, класс сильнее тега), а при равной силе то правило, что ниже по файлу.

  • Что такое наследование?

    Ответ

    Некоторые свойства (color, font-family) передаются потомкам. Отступы и рамки нет. Поэтому шрифт и цвет текста задают у body.

Источники

Дальше

Теперь вы знаете: селекторы, каскад, наследование и порядок правил, специфичность, отдельный файл стилей: разделение содержимого и оформления.