3.10. CSS
Разработчику
Аналитику
Тестировщику
Архитектору
Инженеру
Общее о стилях
Что такое CSS?
★ CSS (Cascading Style Sheets) – язык стилей, который определяет внешний вид HTML-документа, отвечающий за цвета, шрифты, расположение элементов, визуальные эффекты на веб-странице.
Какие возможности предоставляет CSS?
- задавать внешний вид элементов: цвета, шрифты, размеры, формы, тени, прозрачность;
- превращает «голый» текст в графически оформленный документ;
- управляет тем, где и как элементы будут отображаться относительно друг друга;
- поддерживает гибкие и адаптивные макеты, которые меняются под разные устройства и ориентации экрана;
- возможность создавать плавные переходы между состояниями элементов;
- добавлять движения, трансформации, эффекты при взаимодействии пользователя;
- реакции на действия пользователя (наведение, клик, фокус) и изменение внешнего вида в ответ;
- управление начертанием текста: размер, межстрочный интервал, гарнитура, вес, стиль;
- возможность рисовать фигуры, градиенты, тени, рамки, маски и другие визуальные элементы без изображений;
- скрывать элементы или убирать их из потока документа, не удаляя из разметки.
При работе с CSS можно встретить и LESS – препроцессор CSS, который расширяет возможности CSS, добавляя переменные, вложенные правила, функции и миксины, что упрощает написание и поддержку стилей. LESS-код компилируется в обычный CSS перед использованием в браузере.
Как устроен CSS?
К примеру, можно детально настроить оформление и сделать кнопку красивой, добавив цветов, теней и других особенностей:
CSS состоит из:
- стилей – наборов свойств (например,
color: red;) - селекторов – указателей, какие элементы стилизовать (
h1,.class,#id); - правил – комбинаций селекторов и стилей.
CSS называется каскадным, потому что стили применяются по определённому порядку:
- Приоритет источника (стиль браузера – авторские стили -
!important); - Специфичность селектора (например,
#idважнее.class); - Порядок объявления (поздние стили переопределяют ранние).
Каскадность — механизм, по которому браузер определяет итоговые стили элемента, учитывая несколько источников правил: стили браузера по умолчанию, стили разработчика, стили пользователя, и директиву !important.
Каскадность включает:
- приоритет источника объявления (например, стили с
!importantполучают максимальный вес); - специфичность селектора (больше деталей в селекторе — выше вес:
#id>.class>tag); - порядок следования правил в коде (позднее объявление переопределяет более раннее при равной специфичности).
Такой подход позволяет переиспользовать и постепенно уточнять стили, не дублируя код.
Представим, что HTML — это каркас дома, а CSS — всё то, что делает этот дом красивым, удобным и живым: краска, мебель, свет, оформление.
Давайте разберёмся, как с помощью CSS «добраться» до нужных частей этого дома, чтобы их изменить.
Когда вы пишете HTML, вы используете теги, например:
<h1>Заголовок</h1>
<p>Абзац текста</p>
<a href="#">Ссылка</a>
Каждый тег — это элемент: <h1>, <p>, <a> и т.д.
Тег — базовая единица разметки HTML, обозначающая определённый тип содержимого или структуру на странице.
Примеры: <p> для абзаца, <h1> для заголовка первого уровня, <div> для универсального контейнера.
Каждый тег становится HTML-элементом в DOM-дереве. Элемент может содержать текст, другие элементы или оставаться пустым, как <br>.
В CSS тег используется как селектор по типу, например p { color: black; }.
Элемент — это основной строительный блок страницы. В CSS вы можете выбирать элементы по их имени и задавать им стиль.
Пример:
p {
color: blue;
}
— это значит: «все абзацы (<p>) сделай синими».
Иногда нужно стилизовать только некоторые элементы. Например, только особые ссылки должны быть красными.
Для этого в HTML есть атрибут class:
<a href="#" class="button">Нажми меня</a>
<a href="#">Обычная ссылка</a>
Теперь в CSS можно выбрать только те элементы, у которых есть класс button:
.button {
background-color: red;
padding: 10px;
text-decoration: none;
}
Классы и селекторы
★ Класс (например, .button) – именованный стиль, который можно применять к разным элементам. Это как ярлык или бирка, которую вы прикрепляете к элементу, чтобы потом легко найти его и применить нужный стиль. Один и тот же класс может быть у нескольких элементов. Класс начинается с точки: .button.
★ Стиль – конкретное свойство (например, font-size: 16px).
CSS применяется к элементам HTML через селекторы.
Селекторы (англ. select – выбор), «выборщики», определяют к каким элементам DOM применять стили. Селектор — синтаксическая конструкция в CSS, которая указывает, к каким элементам применяется набор стилевых правил.
Селекторы могут быть простыми или составными:
- по тегу —
h2; - по классу —
.highlight; - по идентификатору —
#sidebar; - по атрибуту —
[disabled]или[type="email"]; - псевдоклассам —
:hover,:focus,:nth-child(2n); - псевдоэлементам —
::before,::first-line.
Селекторы задают контекст применения правил и позволяют адресовать элементы с высокой точностью.
Идентификатор — уникальное имя элемента, задаваемое в HTML через атрибут id. Каждый идентификатор должен встречаться на странице только один раз.
Пример: <div id="main-navigation">…</div>.
В CSS идентификатор выбирается с помощью символа решётки: #main-navigation { background: white; }.
Идентификаторы применяются для точечной стилизации уникальных компонентов или для внутренних ссылок (<a href="#main-navigation">Перейти</a>).
Атрибут — дополнительная информация, присоединённая к HTML-тегу в виде пары «имя=значение».
Примеры: class="button", href="/home", src="image.jpg", id="search-box".
Атрибуты расширяют поведение и семантику элементов: они могут управлять внешним видом, взаимодействием, доступностью и техническими параметрами.
CSS поддерживает селекторы по атрибутам:
[target]— любой элемент с атрибутомtarget;[type="submit"]— кнопки сtype="submit";[lang^="ru"]— элементы с языком, начинающимся наru.
Комбинирование селекторов — способ создания более точных и контекстно-зависимых правил, где применяется одновременно несколько условий.
Основные типы комбинаций:
-
Последовательное указание — элемент должен соответствовать всем селекторам:
div.button.active—<div class="button active">. -
Дочерний селектор —
div > p— применить стиль к<p>, если он непосредственный дочерний элемент<div>. -
Потомок —
nav a— применить стиль к любой ссылке внутри<nav>, на любом уровне вложенности. -
Соседний (следующий) —
h1 + p— применить стиль к первому<p>, идущему сразу после<h1>. -
Общий сосед —
h1 ~ p— применить стиль ко всем<p>, идущим после<h1>в одном родительском контейнере.
Комбинирование повышает точность адресации и позволяет избегать лишних классов.
Примеры:
- по тегу –
p {…}; - по классу -
.header {…}; - по идентификатору -
#main {…}; - по атрибуту –
[type= "text"] {…}; - комбинированные –
div.button.active {…},div > p(дочерний),h1 + p(соседний). То есть, исходные данные для селекторов – это:
- теги (
<p>,<div>,<h1>) –p { color: red; }; - классы (атрибут
class="button") -.button { … }’ - идентификаторы (атрибут
id="header") -#header { … }; - атрибуты (значения атрибутов).
Соответственно, выбираются данные так - #id, .class, тег.
Пример: у нас есть HTML для стилизации:
<div class="box" id="main-box">Привет, мир!</div>
Подключаем CSS к этому элементу:
/* По тегу, напрямую */
div { font-size: 16px; }
/* По классу, через точку*/
.box { background: yellow; }
/* По ID, через # */
#main-box { border: 1px solid black; }
Логика написания самого селектора и свойств такова:
- выбираем элемент (селектор);
- пишем свойства (параметры стиля).
селектор {
свойство: значение;
свойство: значение;
}
Как работает CSS?
Порядок работы
★ Как работает CSS?
- Браузер загружает HTML и строит DOM (объектную модель документа);
- Браузер загружает CSS и формирует CSSOM (объектную модель CSS);
- DOM и CSSOM объединяются в Render Tree – дерево отрисовки, где каждому элементу присваиваются стили;
- Браузер отображает страницу на основе дерева отрисовки.

CSS предоставляет мощные инструменты для управления внешним видом и поведением элементов:
- Трансформации и анимации — добавляют движение.
- Блочная модель — основа компоновки.
- Позиционирование — контроль над расположением.
- Фон и текст — визуальная выразительность.
- Эффекты — завершающие штрихи.
Блок — базовая единица компоновки в CSS, представляющая любой элемент как прямоугольную область, ограниченную четырьмя сторонами: верх, низ, лево, право.
Блочная модель состоит из:
- контента — внутреннего содержимого (текст, изображение);
- padding — внутренних отступов от контента до границы;
- border — границы вокруг padding;
- margin — внешних отступов от границы до соседей.
Ширина и высота элемента по умолчанию описывают только контентовую область. Свойство box-sizing: border-box позволяет включать padding и border в расчёт ширины/высоты — это удобнее при верстке адаптивных макетов.
Блоки бывают блочными (display: block), строчными (display: inline) и гибридными (display: inline-block, flex, grid).
Трансформация — изменение внешнего вида элемента без влияния на поток документа: его положение, размер и поведение для соседей остаются неизменными.
Основные функции:
translate(x, y)— смещение по горизонтали и вертикали;scale(n)— масштабирование (увеличение/уменьшение);rotate(angle)— поворот на заданный угол;skew(ax, ay)— наклон по осям;matrix()— произвольная аффинная трансформация.
Трансформации исполняются на GPU и почти не нагружают CPU, что делает их оптимальными для интерактивных эффектов. Могут применяться к 2D- и 3D-пространству.
Анимация — последовательное изменение стилевых свойств элемента во времени, создающее ощущение движения или перехода.
CSS-анимации строятся на двух составляющих:
- @keyframes — описание ключевых кадров, где задаются начальное, промежуточные и конечное состояния;
- свойства
animation-*— параметры воспроизведения: длительность, задержка, количество повторов, направление, плавность, имя анимации.
Пример использования: кнопка, которая плавно «прыгает» при наведении, или индикатор загрузки, вращающийся бесконечно.
Анимации управляются целиком через CSS, без JavaScript, если не требуется сложная логика взаимодействия.
Позиционирование — способ размещения элемента на странице относительно других элементов или области просмотра.
CSS предлагает несколько стратегий:
-
static— положение по умолчанию, элемент участвует в обычном потоке документа. -
relative— смещение относительно исходного положения в потоке; сам поток не нарушается. -
absolute— элемент вынимается из потока и позиционируется относительно ближайшего позиционированного предка (сrelative,absolute,fixedилиsticky). Если такого предка нет — относительно<html>. -
fixed— элемент фиксируется относительно окна просмотра, даже при прокрутке страницы. -
sticky— гибридrelativeиfixed: элемент остаётся в потоке, но при прокрутке до заданной точки «прилипает» к границе окна.
Позиционирование управляет координатами через свойства top, right, bottom, left. Оно критически важно для всплывающих подсказок, модальных окон, боковых панелей и шапок сайтов.
Добавление
★ Как добавить CSS в HTML?
- Встроенные стили (в теге через
style=); - Внутри HTML (добавив тег
<style></style>); - Внешний файл:
<link rel="stylesheet" href="style.css">
Как проверять и отлаживать стили
Консоль разработчика и инструменты отладки
Браузеры предоставляют встроенные инструменты разработчика — DevTools — которые позволяют исследовать и изменять стили в реальном времени.
В панели Elements (или «Элементы») отображается DOM-дерево страницы. При выборе любого элемента справа появляется панель Styles, где перечисляются все CSS-правила, применяемые к этому элементу:
- активные правила отмечаются галочкой;
- перечёркнутые свойства — те, что были переопределены другими, более приоритетными правилами;
- рядом с каждым правилом указан источник: имя файла стилей и номер строки;
- можно прямо в панели редактировать значения — изменения мгновенно отражаются на странице;
- есть возможность временно отключать правила, ставя/снимая галочку слева от строки с селектором.
Также доступны:
- вкладка Computed — показывает итоговые вычисленные значения всех CSS-свойств для элемента, сгруппированные по категориям (цвет, размеры, отступы и т.д.);
- интерактивные инструменты: «инспектор элемента» (значок курсора), «режим для устройств» (адаптивный просмотр под разные экраны), «отслеживание медиазапросов».
Эти инструменты критически важны для понимания того, какие стили реально работают, и почему элемент выглядит именно так.
Агент пользователя и стили по умолчанию
Агент пользователя — это браузер. У каждого браузера есть своя реализация так называемых стилей по умолчанию — базовый CSS, который применяется ко всем HTML-элементам, если разработчик не задал своих.
Например:
<h1>по умолчанию крупный, жирный, с отступами сверху и снизу;<ul>имеет отступ слева и маркеры у пунктов;<a>— синий и подчёркнутый.
Эти стили встроены в движок браузера (Blink в Chrome, Gecko в Firefox и т.д.). Они могут немного различаться между браузерами — именно поэтому дизайнеры часто подключают CSS-ресеты (например, normalize.css) — небольшие файлы, сглаживающие различия и приводящие стартовую точку к единому виду.
В DevTools стили агента пользователя отображаются в нижней части панели Styles, в разделе user agent stylesheet. Их можно просмотреть, но не отредактировать напрямую — только переопределить своими правилами.
Таблица стилей
Таблица стилей — это полный набор CSS-правил, загруженных для текущей страницы:
- внешние файлы, подключённые через
<link rel="stylesheet">; - внутренние стили из тега
<style>в<head>; - встроенные стили через атрибут
style="".
Браузер парсит все эти источники, объединяет их в единую CSSOM (CSS Object Model) — древовидную структуру, где каждое правило привязано к элементам DOM.
Таблица стилей не фиксирована: можно динамически добавлять или удалять <style> и <link> через JavaScript — браузер обновит CSSOM и пересчитает отображение.
Важно: таблица стилей — глобальный ресурс страницы. Даже если правило написано в самом конце файла, оно участвует в расчёте стилей для всех элементов, на которые распространяется селектор.
Наследование стилей
Некоторые CSS-свойства передаются от родительского элемента к дочерним — это называется наследованием.
Примеры наследуемых свойств:
color— цвет текста;font-family,font-size,line-height;text-align,letter-spacing;visibility.
Если у <div> задан color: darkblue, то весь текст внутри его дочерних элементов (<p>, <span>, <a> и т.д.) будет тёмно-синим — если только явно не переопределить.
Наследуются только вычисленные значения, и только если дочерний элемент не имеет собственного объявления.
Существуют три ключевых ключевых слова, управляющих наследованием:
inherit— явно указать: «возьми значение у родителя»;initial— сбросить к значению по умолчанию для этого свойства (не путать со стилями браузера);unset— «верни поведение по умолчанию»: если свойство наследуемое — действует какinherit, если нет — какinitial.
Иерархия применения стилей
Браузер строит итоговый внешний вид элемента по строгой иерархии:
-
Источник объявления
Приоритет:!importantв стилях пользователя (если заданы);!importantв авторских стилях (ваши CSS);- обычные авторские стили;
!importantв стилях агента пользователя — почти не встречается;- стили агента пользователя (по умолчанию).
-
Специфичность селектора
Рассчитывается по формуле (в порядке убывания веса):- инлайн-стили (
style="") — вес 1000; - идентификаторы (
#id) — 100 за каждый; - классы, псевдоклассы, атрибуты (
[type],:hover,.btn) — 10 за каждый; - теги и псевдоэлементы (
p,::before) — 1 за каждый.
Пример:#header .nav-item:hover→ 100 + 10 + 10 = 120.
- инлайн-стили (
-
Порядок следования
При равной специфичности выигрывает правило, объявленное позже в таблице стилей — или позже по порядку загрузки файлов.
Порядок записи правил в CSS-файле
CSS не требует соблюдения строгого порядка объявления правил. Можно писать стили в любом порядке — сначала для заголовков, потом для кнопок, затем снова для заголовков, если это удобно для организации кода.
При сборке итоговой таблицы стилей браузер учитывает:
- порядок подключения CSS-файлов в HTML;
- порядок правил внутри одного файла — позже объявленное правило имеет приоритет при равной специфичности.
Это позволяет группировать стили логически: например, вынести все анимации в конец файла, или собрать все адаптивные медиазапросы отдельным блоком. Никаких технических ограничений нет.
Повторное объявление одного и того же свойства
Для одного элемента можно несколько раз задать одно и то же CSS-свойство — в одном правиле, в разных правилах, даже в одном селекторе.
Пример:
.button {
color: red;
font-size: 14px;
color: blue;
}
В этом случае браузер применит последнее объявление в рамках одного блока: color: blue.
Если повторение происходит в разных правилах:
.highlight { color: yellow; }
.button { color: red; }
.highlight.button { color: green; }
…и элемент имеет оба класса — <div class="button highlight">, то сработает правило с наибольшей специфичностью (highlight.button = 20), и цвет будет green.
Если специфичность равна — побеждает позже объявленное правило в порядке загрузки.
Директива !important
!important — модификатор, прикрепляемый к значению свойства:
.title {
color: red !important;
}
Он повышает приоритет этого объявления до максимального уровня в своей категории (авторских стилей).
!important применяется только к одному свойству, а не ко всему блоку. В примере выше color получает высший приоритет, но другие свойства (font-size, margin) — нет.
Когда !important уместен:
- быстрая отладка в DevTools (браузеры добавляют его автоматически при редактировании);
- переопределение сторонних библиотек, где нет контроля над исходным CSS;
- экстренные исправления, когда переписать селектор невозможно.
Рекомендуется избегать !important в основной кодовой базе — это нарушает естественную иерархию каскада, затрудняет поддержку и усложняет поиск конфликтов. Лучше повышать специфичность селектора или перестраивать архитектуру стилей.