Введение в CSS
CSS отвечает за внешний вид. Учимся подключать стили и писать первые правила.
Что такое CSS
CSS (Cascading Style Sheets) — каскадные таблицы стилей. Ключевое слово здесь «каскад»: правила применяются по порядку и дополняют друг друга. Одно правило выглядит так:
селектор {
свойство: значение;
свойство: значение;
}
p {
color: #38bdf8;
font-size: 16px;
}
Каждое существующее правило — либо как есть, либо «каскадом» передаётся потомкам.
Три способа подключения
| Способ | Пример | Когда применять |
|---|---|---|
| Отдельный файл | <link rel="stylesheet" href="style.css"> | Всегда, в продакшене |
Тег <style> | в <head> | Прототипы, одноразовые страницы |
Атрибут style | <p style="color:red"> | Почти никогда |
style перебивает тег <style>, а тот — внешний файл. Лучший подход — внешний файл и минимум «инлайна».Базовые свойства
Самые частые инструменты оформления текста:
header {
background-color: #1e293b;
color: #e2e8f0;
}
h1 {
font-family: "Segoe UI", sans-serif;
font-size: 32px;
font-weight: 700;
text-align: center;
}
.link {
color: #38bdf8;
text-decoration: none;
}
.link:hover {
text-decoration: underline;
}
Раскроем каждое:
color/background-color— цвет текста и фона;font-family— шрифт (с запасным вариантом);font-size— размер шрифта;font-weight— насыщенность (жирность);text-align— выравнивание;text-decoration— подчёркивание и прочее;:hover— псевдокласс для состояния «на курсоре».
Цвета в CSS
p { color: red; } /* по имени */
p { color: #ff0000; } /* hex */
p { color: rgb(255, 0, 0); } /* rgb */
p { color: rgba(255, 0, 0, 0.5); } /* + прозрачность */
Единицы измерения
| Единица | От чего зависит | Пример |
|---|---|---|
px | пиксели экрана | границы, бордеры |
% | размер родителя | ширина блоков |
rem | размер корневого font-size | шрифты, отступы |
em | размер родительского шрифта | внутренние отступы |
vh / vw | высота/ширина окна | герой-секции |
font-size: 16px на <html> и дальше работают в rem — так размеры масштабируются при изменении шрифта пользователем.Живой пример
Стилизуем карточку за один шаг. Слева «голый» HTML, справа — то же, но с CSS:
с CSS 🎨
Наследование и каскад
Некоторые свойства передаются от родителя детям автоматически. Классика — цвет и шрифт:
body {
color: #e2e8f0; /* унаследуется всеми текстами */
font-family: Arial, sans-serif;
}
А вот margin, padding, border и background не наследуются — просто потому, что иначе отступы «поехали» бы по всей странице.
| Свойство | Наследуется? |
|---|---|
color, font-*, text-align, line-height | да |
margin, padding, width, height | нет |
border, background, display | нет |
Reset и Normalize
У браузеров разные стили «по умолчанию»: у одних у <ul> большие отступы, у других маленькие. Чтобы стартовать с чистого листа, подключают сброс:
/* Классический reset — решительно всё обнуляем */
*, *::before, *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: sans-serif;
}
CSS-переменные (custom properties)
В CSS можно объявлять собственные переменные — они задаются в двойном дефисе и работают везде ниже по дереву:
:root {
--accent: #38bdf8;
--gap: 16px;
--radius: 12px;
}
.card {
color: var(--accent);
border-radius: var(--radius);
padding: var(--gap);
}
:root, и вся страница перекрашивается. На этом строятся переключатели «тёмная тема».Адаптивные размеры: clamp()
Функция clamp() задаёт размер с минимумом, желаемым значением и максимумом. Идеальна для шрифтов, растущих с шириной окна:
h1 {
font-size: clamp(1.5rem, 3vw + 1rem, 3rem);
}
Это означает: не меньше 1.5rem, стремиться к 3vw + 1rem, но не больше 3rem. Никаких media queries для одного заголовка.
vw старается подстроиться под ширину окна. Но ставить огромные clamp() значения легко перестараться на огромных мониторах — всегда ограничивайте максимум.Приоритет правил и !important
Когда два правила спорят, побеждает: инлайн-стиль > селектор по id > класс > тег. Если результат всё равно не тот, в ход идёт !important:
p { color: #38bdf8 !important; } /* перебьёт класс и id */
!important можно, то отбить уже нечем, кроме !important же. В проектах его стараются сводить к нулю — это признак запутанных стилей.Кастомные шрифты: @font-face и Google Fonts
Свои шрифты подключают директивой @font-face, а готовые — одной строкой из Google Fonts:
@font-face {
font-family: "MyFont";
src: url("../fonts/myfont.woff2") format("woff2");
font-weight: 400;
}
/* или в head: */
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
display=swap (в Google Fonts) заставляет текст показаться сразу, а шрифт «догрузиться» фоном. Так страница не выглядит пустой, пока грузятся буквы.Типографика: line-height, letter-spacing, text-decoration
Комфортное чтение — это не шутки. Три настройки решают 90% проблем с текстом:
body {
line-height: 1.6; /* межстрочный интервал */
letter-spacing: 0.3px; /* разрядка букв */
}
a { text-decoration: none; } /* убрать подчёркивание */
.overline { text-decoration: overline; } /* линия сверху */
line-height между 1.4 и 1.8, а строки текста не длиннее примерно 70–80 символов.@media: screen, print и брейкпоинты
Запросы можно открывать на любой тип устройства. Например, для печати страница делается компактной:
@media screen and (min-width: 768px) {
.menu { display: flex; }
}
@media print {
nav, .ad { display: none; } /* не печатаем меню и рекламу */
}
min-width-правила для широких. Так базовый код проще и легче.Группировка селекторов
Одно правило для нескольких элементов записывают через запятую:
h1, h2, h3 {
color: #e2e8f0;
font-weight: 700;
}
Псевдоклассы состояния
Стили «по событию»: :hover, :focus, :active:
a:hover { color: #7dd3fc; }
a:focus { outline: 2px solid #38bdf8; }
a:active { opacity: 0.7; }
:focus — «попал в поле клавиатурой», :focus-visible — видимое фокусирование. Не убирайте обводку фокуса совсем — доступность страдает.Структурные псевдоклассы
Порядковые номера среди братьев: первый, последний, каждый чётный:
li:first-child { color: #34d399; }
li:last-child { font-weight: bold; }
li:nth-child(3) { text-decoration: underline; }
li:nth-child(even) { background: #1e293b; }
nth-child(2n+1) = нечётные, (odd) и (even) — сокращения. Полосатая таблица — пара строк.Атрибутные селекторы
Стиль по наличию атрибута или его значению:
input[type="text"] { border-color: #38bdf8; }
a[href^="https://"] { color: #7dd3fc; } /* ^= начало */
a[href$=".pdf"] { color: #f87171; } /* $= конец */
Каскад: кто победит
При одинаковой специфичности побеждает правило, объявленное позже (ниже в файле):
p { color: red; }
p { color: blue; } /* победит: объявлено позже */
!important. Лучше — больше классов, меньше важности.background: сокращённая запись
Одно свойство вместо четырёх:
.hero {
background: #0f172a url("../img/bg.jpg") center / cover no-repeat;
/* цвет | картинка | позиция / размер | повтор */
}
border: стили и стороны
Границы разделяются по сторонам, стилям и цветам:
.card {
border: 1px solid #334155; /* все стороны */
border-left: 4px solid #38bdf8; /* акцент слева */
border-radius: 8px;
}
solid, dashed, dotted, double. Пунктирные границы — удобная разметка «набросков».Прозрачность: opacity и rgba
Полупрозрачность бывает для всего блока или только для цвета:
.ghost { opacity: 0.5; } /* блеклый весь блок, включая детей */
.bg-fade{ background: rgba(15, 23, 42, 0.8); } /* прозрачный фон, текст чёткий */
background: rgba(...) — текст останется контрастным.Шрифтовые стеки
Перечисляйте шрифты через запятую: если первого нет, возьмётся следующий:
body {
font-family: "Segoe UI", Roboto, Arial, sans-serif;
}
code {
font-family: "Cascadia Code", Consolas, monospace;
}
line-height без единиц
Пишите межстрочный интервал числом без единицы — он унаследуется пропорционально:
body { line-height: 1.6; } // 1.6 × размер шрифта
1.6 без px масштабируется вместе с font-size любого потомка. С px фиксированная высота ломается при смене размера шрифта.Выравнивание текста: text-align
Слева, по центру, справа или по ширине — куда прижимать строки:
h1 { text-align: center; }
.left { text-align: left; }
.right{ text-align: right; }
.just { text-align: justify; }
font: универсальная запись
Одно свойство, все настройки шрифта сразу:
.btn {
font: 16px/1.4 Arial, sans-serif; /* размер/строка шрифт */
font-style: italic;
font-weight: 600;
}
CSS-комментарии
Примечания к правилам — пишите их, когда логика не очевидна:
/* Тёмная зона не должна дотрагиваться до шапки */
.hero {
padding-top: 0;
}
/* ===== Раздел: карточки ===== */
.card { ... }
Палитра в DevTools
Подбирайте цвета с пипетки и копируйте в код:
- Панель Styles: клик по цветному квадратику открывает пипетку;
- Клик рядом со значением — поменяется формат (hex/rgb/hsl);
- Смена цвета «на лету» не требует сохранения файла.
--accent. Тема-лавка и палитра станут управляемыми.Тренировка
- Вынесите стили в отдельный файл
css/style.cssи подключите его через<link>. - Задайте фон страницы, цвет заголовков и уберите подчёркивание у ссылок.
- Сделайте кнопку-ссылка с
:hover-эффектом. - Поиграйте с
font-sizeвpx,remиem— почувствуйте разницу.