3.10. Блочная модель и каскадность
Разработчику
Аналитику
Тестировщику
Архитектору
Инженеру
Блочная модель
Что такое блок?
Блок — базовая единица компоновки в CSS, представляющая любой элемент как прямоугольную область, ограниченную четырьмя сторонами: верх, низ, лево, право.
Блочная модель состоит из:
- контента — внутреннего содержимого (текст, изображение);
- padding — внутренних отступов от контента до границы;
- border — границы вокруг padding;
- margin — внешних отступов от границы до соседей.
Ширина и высота элемента по умолчанию описывают только контентовую область. Свойство box-sizing: border-box позволяет включать padding и border в расчёт ширины/высоты — это удобнее при верстке адаптивных макетов.
Блоки бывают блочными (display: block), строчными (display: inline) и гибридными (display: inline-block, flex, grid).
Каждый элемент веб-страницы воспринимается браузером как прямоугольник, состоящий из четырёх областей:
- Контент — текст, изображения, другие вложенные элементы.
- Padding (внутренний отступ) — пространство между контентом и границей.
- Border (граница) — линия вокруг padding.
- Margin (внешний отступ) — пространство вне границы, отделяющее элемент от соседей.
По умолчанию свойства width и height задают размер только контентной области. Это означает, что итоговая ширина элемента равна:
ширина = width + левый padding + правый padding + левая граница + правая граница
Свойство box-sizing: border-box изменяет это поведение: width и height начинают включать padding и border. Это упрощает расчёт размеров и широко используется в современной вёрстке.
display
Свойство display определяет, как элемент отображается в потоке документа. Основные значения:
block— элемент занимает всю ширину строки, начинается с новой строки.inline— элемент занимает только необходимое пространство, не переносится на новую строку.inline-block— сочетает черты inline и block: не переносится, но допускает установку ширины, высоты, отступов.flex— создаёт flex-контейнер для гибкого позиционирования дочерних элементов.grid— создаёт grid-контейнер для двумерной компоновки.none— полностью убирает элемент из потока и делает его невидимым.
Принцип каскада
Что означает каскадность?
CSS называется каскадным, потому что стили применяются по определённому порядку:
- Приоритет источника (стиль браузера – авторские стили -
!important); - Специфичность селектора (например,
#idважнее.class); - Порядок объявления (поздние стили переопределяют ранние).
Каскадность — механизм, по которому браузер определяет итоговые стили элемента, учитывая несколько источников правил: стили браузера по умолчанию, стили разработчика, стили пользователя, и директиву !important.
Каскадность включает:
- приоритет источника объявления (например, стили с
!importantполучают максимальный вес); - специфичность селектора (больше деталей в селекторе — выше вес:
#id>.class>tag); - порядок следования правил в коде (позднее объявление переопределяет более раннее при равной специфичности).
Такой подход позволяет переиспользовать и постепенно уточнять стили, не дублируя код.
Пример каскадности
<!DOCTYPE html>
<html>
<head>
<style>
/* Правило 1 */
.box {
color: red;
font-size: 16px;
}
/* Правило 2 */
.box {
color: green;
}
/* Правило 3 */
.box {
color: blue;
}
</style>
</head>
<body>
<div class="box">Текст внутри блока</div>
</body>
</html>
Все три правила имеют одинаковую специфичность селектора.
Браузер обрабатывает объявления свойств в порядке их следования в документе.
Приоритет получает свойство, расположенное ниже в исходном коде.
В результате рендеринга текст отображается синим цветом, так как это значение указано в последнем правиле. Остальные объявления свойства color перезаписываются последующими параметрами.
Как принимается решение?
Решение принимается на основе трёх факторов:
-
Источник объявления — порядок приоритета:
- стили с
!importantв авторских таблицах; - обычные авторские стили;
- стили пользователя (если заданы);
- стили браузера по умолчанию.
- стили с
-
Специфичность селектора — чем точнее селектор, тем выше его вес. Расчёт ведётся по системе:
- инлайн-стили (
style="") — 1000; - идентификаторы (
#id) — 100; - классы, атрибуты, псевдоклассы — 10;
- теги и псевдоэлементы — 1.
- инлайн-стили (
-
Порядок следования — при равной специфичности побеждает правило, объявленное позже.
Получается, что можно писать код в каком угодно порядке, добавлять элементы как в начале, так и в конце, поэтому на практике встречается такой код, когда каждое обновление добавлялось в конце файла.