CSS (Cascading Style Sheets) — язык, который превращает скелет HTML в красивую страницу. Цвета, шрифты, отступы, анимации, адаптивность — всё это CSS.
Если HTML — это скелет, то CSS — это одежда, причёска и макияж. Без CSS все сайты выглядели бы как документы из 90-х.
CSS описывает, как элементы выглядят: цвет, размер, отступы, расположение, анимации. Один CSS-файл может стилизовать сотни HTML-страниц.
Как CSS находит элементы и какой стиль побеждает
| Селектор | Пример | Что выбирает | Вес |
|---|---|---|---|
| Тип | p, h1, div | Все элементы данного тега | 0-0-1 |
| Класс | .card, .btn | Элементы с атрибутом class | 0-1-0 |
| ID | #header | Один элемент с атрибутом id | 1-0-0 |
| Атрибут | [type="email"] | Элементы с указанным атрибутом | 0-1-0 |
| Псевдокласс | :hover, :first-child | Состояние элемента | 0-1-0 |
| Потомок | nav a | Все <a> внутри <nav> | сумма |
| Дочерний | ul > li | Только прямые дочерние <li> | сумма |
| Универсальный | * | Все элементы | 0-0-0 |
Когда несколько правил применяются к одному элементу, CSS использует специфичность (вес) для определения победителя:
При равной специфичности побеждает последнее правило в коде.
color: red !important; — перебивает ВСЁ, даже inline. Но использовать его — плохая практика. Если нужен !important, значит CSS-архитектура сломана.
Каждый элемент — это коробка: content + padding + border + margin
| Свойство | Что делает | Пример |
|---|---|---|
| width / height | Размер содержимого | width: 300px; |
| padding | Внутренний отступ (от контента до border) | padding: 16px; |
| border | Рамка вокруг элемента | border: 1px solid #ccc; |
| margin | Внешний отступ (от border до соседей) | margin: 20px auto; |
width = только content. С box-sizing: border-box — width включает padding и border. Это гораздо удобнее. Используйте всегда!
Одномерная раскладка: строка или столбец с полным контролем
Родитель получает display: flex. Дети автоматически выстраиваются в строку (по умолчанию).
| Свойство | Значения | Что делает |
|---|---|---|
| flex-direction | row | column | Направление: строка или столбец |
| justify-content | flex-start | center | space-between | space-around | Выравнивание по главной оси |
| align-items | stretch | center | flex-start | flex-end | Выравнивание по поперечной оси |
| flex-wrap | nowrap | wrap | Перенос на новую строку |
| gap | 10px, 1rem | Расстояние между элементами |
| Свойство | Что делает |
|---|---|
| flex-grow | Какую долю свободного пространства занять (0 = не растягиваться) |
| flex-shrink | Насколько сжиматься при нехватке места |
| flex-basis | Базовый размер до распределения свободного места |
| align-self | Индивидуальное выравнивание (переопределяет align-items) |
Строки И столбцы одновременно — для сложных макетов
Родитель: display: grid. Задаёте колонки и строки:
fr — доля свободного пространства. 1fr 2fr 1fr = три колонки, средняя вдвое шире.
| Функция | Пример | Назначение |
|---|---|---|
| repeat() | repeat(3, 1fr) | Повторить паттерн N раз |
| minmax() | minmax(200px, 1fr) | Минимум и максимум размера |
| auto-fit | repeat(auto-fit, minmax(200px, 1fr)) | Адаптивная сетка без медиа-запросов! |
| grid-area | 1 / 1 / 2 / 3 | Элемент занимает несколько ячеек |
transition для плавных изменений, @keyframes для сложных анимаций
transform и opacity — они обрабатываются GPU. Анимация width, height, margin вызывает перерисовку и тормозит.
Медиа-запросы: одна страница для десктопа, планшета и телефона
| Устройство | Ширина | Особенности |
|---|---|---|
| Десктоп | > 1024px | Полный макет, hover-эффекты |
| Планшет | 768–1024px | Упрощённый макет, меньше колонок |
| Телефон | < 768px | Одна колонка, крупные кнопки (44px+) |
@media (min-width: ...) для больших экранов. Это называется mobile-first подход.
Измените свойства flex-контейнера — блоки перестроятся в реальном времени. Справа — готовый CSS-код.
CSS поддерживает 140 именованных цветов. Кликните на цвет — hex-код скопируется. Используйте поиск для фильтрации.
Введите CSS-селектор — калькулятор покажет его специфичность (inline, ID, классы, типы).
Редактируйте HTML и CSS — превью обновляется мгновенно. Переключайте ширину, чтобы проверить адаптивность.