🎨 Полный курс CSS

От селекторов до анимации — всё, что нужно для стилизации веб-страниц

Введение Синтаксис Селекторы Цвета Текст Блочная модель Позиционирование Flexbox Grid Анимация Адаптивность Советы

📑 Содержание курса

📖 Что такое CSS?

CSS (Cascading Style Sheets) — каскадные таблицы стилей. Язык, который отвечает за внешний вид веб-страницы: цвета, шрифты, отступы, расположение элементов, анимацию и адаптацию под разные экраны.

CSS работает в связке с HTML. HTML задаёт структуру (заголовки, абзацы, картинки), а CSS говорит: «этот заголовок должен быть синим, 24 пикселя, с отступом 20px».

Каскадность означает, что стили могут применяться из разных источников (браузерные, пользовательские, авторские) и комбинироваться по определённым правилам приоритета.

✍️ Синтаксис и способы подключения

Правило CSS

селектор {
    свойство: значение;
    свойство: значение;
}

Пример:

p {
    color: #333;
    font-size: 16px;
    margin-bottom: 1em;
}

Способы подключения

Способ Пример Когда использовать
Внешний файл <link rel="stylesheet" href="style.css"> Основной способ, для всего сайта
Внутренний (в <style>) <style> ... </style> Для одной страницы или небольших правок
Встроенный (inline) <p style="color: red;"> Редко, для единичных исключений

Комментарии

/* Это комментарий в CSS */

🎯 Селекторы и специфичность

Селектор определяет, к каким элементам применятся стили.

Тип Синтаксис Пример
По тегу p { } Все абзацы
По классу .class { } .btn { }
По id #id { } #header { } (уникальный)
Универсальный * { } Все элементы
По атрибуту [type="text"] Инпуты с type="text"
Псевдоклассы :hover, :first-child Состояния элементов
Псевдоэлементы ::before, ::after Создание контента

Комбинаторы

/* Потомок (пробел) */
article p { }

/* Дочерний (>) */
ul > li { }

/* Соседний (+) */
h2 + p { }

/* Братские (~) */
h2 ~ p { }

Специфичность (вес)

При конфликте стилей побеждает более специфичный селектор. Вес считается так: id (100), класс/атрибут/псевдокласс (10), тег/псевдоэлемент (1). Inline-стиль = 1000, !important перебивает всё (но лучше избегать).

🎨 Цвета и единицы измерения

Цвета

Формат Пример
Ключевые слова red, blue, transparent
HEX #ff0000 (красный), #333
RGB / RGBA rgb(255,0,0), rgba(0,0,0,0.5)
HSL / HSLA hsl(0,100%,50%)

Единицы измерения

Единица Описание
px Пиксели (абсолютная)
em Относительно размера шрифта родителя
rem Относительно размера шрифта корневого элемента (html)
% Процент от родительского элемента
vw, vh 1% ширины/высоты окна браузера
ch Ширина символа '0'

🔤 Стилизация текста

Основные свойства

p {
    font-family: 'Arial', sans-serif;
    font-size: 1rem;
    font-weight: bold;    /* normal, bold, 100-900 */
    font-style: italic;
    line-height: 1.5;
    text-align: center;   /* left, right, justify */
    text-decoration: underline;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    word-spacing: 2px;
}

Подключение шрифтов

@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body {
    font-family: 'Roboto', sans-serif;
}

📦 Блочная модель (Box Model)

Каждый элемент в CSS — прямоугольник, состоящий из: контента, внутренних отступов (padding), границы (border) и внешних отступов (margin).

.box {
    width: 200px;
    height: 100px;
    padding: 10px 20px;    /* верх-низ, право-лево */
    border: 2px solid #333;
    margin: 15px auto;     /* авто по горизонтали центрирует */
    box-sizing: border-box; /* включает padding и border в width */
}

Свойство box-sizing: border-box; делает вёрстку предсказуемой — width задаёт полную ширину блока с учётом padding и border.

🧩 Позиционирование и отображение

display

Значение Поведение
block Занимает всю ширину, перенос строки (div, p, h1)
inline В строку, ширина по контенту (span, a)
inline-block Как inline, но можно задать width/height
none Элемент скрыт и не занимает места
flex, grid Включают соответствующие раскладки

position

Значение Описание
static По умолчанию
relative Сдвиг относительно своего места
absolute Позиционируется относительно ближайшего позиционированного предка
fixed Фиксировано относительно окна браузера
sticky "Прилипает" при прокрутке

📏 Flexbox — гибкий контейнер

Flexbox предназначен для одномерных раскладок (строка или колонка).

.container {
    display: flex;
    flex-direction: row;        /* row, column, row-reverse, column-reverse */
    justify-content: space-between; /* главная ось: flex-start, center, space-around */
    align-items: center;        /* поперечная ось: stretch, flex-start, flex-end */
    flex-wrap: wrap;            /* перенос элементов */
    gap: 20px;                  /* расстояние между элементами */
}
.item {
    flex: 1;                    /* коэффициент растяжения */
}

Свойства для дочерних элементов: order, align-self, flex-grow, flex-shrink, flex-basis.

📐 CSS Grid — двумерная сетка

Grid позволяет создавать сложные макеты с рядами и колонками.

.grid {
    display: grid;
    grid-template-columns: 1fr 2fr 1fr;  /* три колонки */
    grid-template-rows: auto 200px;
    gap: 20px;
}
.item {
    grid-column: span 2;   /* занять 2 колонки */
    grid-row: 1 / 3;       /* с первой по третью линию */
}

Функции: repeat(3, 1fr), minmax(100px, auto). Выравнивание: justify-items, align-items.

✨ Переходы и анимация

transition (плавное изменение)

.button {
    background: blue;
    transition: background 0.3s ease, transform 0.2s;
}
.button:hover {
    background: red;
    transform: scale(1.05);
}

animation (ключевые кадры)

@keyframes slideIn {
    from { opacity: 0; transform: translateX(-20px); }
    to   { opacity: 1; transform: translateX(0); }
}
.element {
    animation: slideIn 0.5s ease-out forwards;
}

Параметры: duration, timing-function, delay, iteration-count, direction.

📱 Адаптивный дизайн

Медиа-запросы

@media (max-width: 768px) {
    .container {
        flex-direction: column;
    }
}

Относительные единицы

Используй rem, em, %, vw, чтобы элементы масштабировались.

Метатег viewport

<meta name="viewport" content="width=device-width, initial-scale=1.0">

Без него мобильные браузеры масштабируют страницу как десктопную.

🧠 Лучшие практики

Совет: Используй инструменты разработчика в браузере (F12) для экспериментов с CSS в реальном времени.