1. Основы CSS: селекторы, блочная модель и позиционирование элементов
Основы CSS: селекторы, блочная модель и позиционирование элементов
Добро пожаловать в курс «Основы веб-разработки: CSS и JavaScript». Если HTML — это скелет веб-страницы, определяющий её структуру и содержание, то CSS (Cascading Style Sheets) — это её кожа, одежда и макияж. Именно CSS превращает скучный список заголовков и параграфов в красивый, удобный и интерактивный интерфейс.
В этой статье мы разберем фундаментальные принципы, на которых строится вся визуальная часть веба: как выбирать элементы для стилизации, как браузер рассчитывает размеры этих элементов и как разместить их в нужном месте экрана.
Что такое CSS и как он работает?
CSS — это язык таблиц стилей. Его основная задача — сказать браузеру, как именно нужно отображать тот или иной HTML-элемент. Браузер читает ваш HTML-код сверху вниз, строит структуру документа (DOM), а затем применяет к ней правила CSS.
Синтаксис CSS прост и логичен. Он состоит из правил. Каждое правило имеет две основные части:
В этом примере h1 — это селектор, а внутри фигурных скобок находятся объявления. Свойство color получает значение blue, а font-size — значение 24px.
Селекторы: искусство выбора
Чтобы применить стиль, нужно сначала точно «прицелиться» в нужный элемент. CSS предоставляет для этого мощный набор инструментов — селекторов.
Основные виды селекторов
Существует несколько базовых способов выбрать элемент:
* Селектор по тегу: Выбирает все элементы с определенным именем тега. Например, p выберет все абзацы на странице.
* Селектор по классу: Выбирает элементы, у которых есть определенный атрибут class. В CSS обозначается точкой. Например, .button выберет все элементы с классом button. Это самый часто используемый тип селектора, так как он позволяет гибко стилизовать группы элементов.
* Селектор по идентификатору (ID): Выбирает единственный элемент с уникальным атрибутом id. В CSS обозначается решеткой. Например, #header выберет элемент с id="header". Используйте их с осторожностью, так как ID должен быть уникальным на странице.
Универсальный селектор: Обозначается звездочкой . Он выбирает абсолютно все элементы на странице. Часто используется для сброса стандартных отступов браузера.
!Иллюстрация работы различных CSS-селекторов на примере структуры веб-страницы
Комбинаторы и вложенность
Часто нам нужно выбрать элемент, который находится внутри другого. Для этого используются комбинаторы:
div p выберет все абзацы p, которые находятся внутри div (на любом уровне вложенности).div > p выберет только те абзацы, которые являются непосредственными детьми div.Вес селекторов (Специфичность)
Что произойдет, если к одному элементу применяются два противоречащих правила? Например, в одном файле написано, что текст красный, а в другом — синий. Браузер решает этот конфликт с помощью механизма специфичности.
Представьте это как систему баллов:
* Стили в атрибуте style (инлайн-стили) — самые сильные.
* ID селекторы (#id) — очень сильные.
* Классы (.class), псевдоклассы и атрибуты — средняя сила.
* Теги (div, p) — самая слабая сила.
Если специфичность одинакова, побеждает то правило, которое написано в коде ниже.
Блочная модель (Box Model)
Это, пожалуй, самая важная концепция для понимания размеров и отступов в CSS. Каждый элемент на веб-странице — это прямоугольный ящик (box). Даже если он выглядит круглым или имеет прозрачный фон, для браузера это все равно прямоугольник.
!Визуализация блочной модели CSS, показывающая слои Content, Padding, Border и Margin
Блочная модель состоит из четырех компонентов (изнутри наружу):
Расчет размеров элемента
Понимание того, как рассчитывается общая ширина элемента, критически важно для верстки. В стандартной модели (когда свойство box-sizing имеет значение content-box), если вы задаете элементу width: 100px, это ширина только контента.
Формула полной ширины элемента в пространстве выглядит так:
Где:
* — полная ширина, занимаемая элементом на странице.
* — ширина контента (заданная свойством width).
* — левый и правый внутренние отступы (padding).
* — толщина левой и правой границ (border).
* — левый и правый внешние отступы (margin).
Это часто вызывает путаницу: вы задали ширину 100 пикселей, добавили рамку и отступы, и вдруг элемент перестал помещаться в родительский контейнер.
Свойство box-sizing
Чтобы упростить жизнь разработчикам, существует свойство box-sizing: border-box. При его использовании значение width включает в себя и контент, и padding, и border. Это делает верстку гораздо более предсказуемой.
> Большинство современных проектов начинают CSS с глобального сброса, устанавливая box-sizing: border-box для всех элементов.
Позиционирование элементов
По умолчанию элементы на странице располагаются в «нормальном потоке» (normal flow): блочные элементы (как div, p, h1) идут сверху вниз, занимая всю доступную ширину, а строчные (как span, a) — слева направо.
Свойство position позволяет вырвать элементы из этого скучного порядка. Рассмотрим его значения:
1. Static (Статичное)
Это значение по умолчанию. Элемент находится в нормальном потоке. Свойства top, right, bottom, left и z-index на него не влияют.
2. Relative (Относительное)
Элемент остается в нормальном потоке, занимая свое законное место. Однако, вы можете сдвинуть его визуально относительно этого места, используя координаты top, left и т.д.
Важный нюанс: место, где элемент должен был быть, остается зарезервированным (пустым), а сам элемент сдвигается, возможно, перекрывая соседей.
3. Absolute (Абсолютное)
Элемент полностью удаляется из нормального потока. Другие элементы ведут себя так, будто «абсолютного» элемента не существует — они занимают его место.
Позиционирование происходит относительно ближайшего предка, у которого position не равно static. Если такого предка нет, элемент позиционируется относительно окна браузера (точнее, исходного содержащего блока).
!Сравнение поведения элементов при относительном и абсолютном позиционировании
4. Fixed (Фиксированное)
Похоже на абсолютное, но элемент позиционируется относительно окна браузера (viewport). При прокрутке страницы такой элемент остается на месте. Это идеально подходит для закрепленных шапок сайта (sticky headers) или кнопок «Наверх».
5. Sticky (Липкое)
Гибрид relative и fixed. Элемент ведет себя как обычный (relative), пока пользователь не доскроллит до него. В этот момент он «прилипает» к указанной позиции (например, к верху экрана) и движется вместе с прокруткой, пока не закончится родительский блок.
Работа с Z-Index
Когда мы начинаем двигать элементы и накладывать их друг на друга (особенно при absolute и fixed), возникает вопрос: кто будет сверху?
За это отвечает свойство z-index. Оно принимает целые числа (положительные, отрицательные или ноль). Элемент с большим z-index будет перекрывать элемент с меньшим z-index.
Важно: z-index работает только для элементов, у которых position отличается от static.
Заключение
Мы рассмотрели три кита CSS: селекторы позволяют нам выбирать, что красить; блочная модель объясняет, как элементы занимают пространство; а позиционирование дает власть над расположением блоков. Эти знания — фундамент, на котором вы будете строить любые интерфейсы, от простых блогов до сложных веб-приложений. В следующих статьях мы углубимся в современные методы верстки, такие как Flexbox и Grid, которые делают процесс размещения элементов еще более гибким.