Цвета, единицы, шрифты, текст
Цвета
Форматы:
/* HEX */
color: #c1442e;
color: #c1442e80; /* с прозрачностью (50%) */
/* RGB */
color: rgb(193, 68, 46);
color: rgba(193, 68, 46, 0.5);
/* HSL — удобнее для человека */
color: hsl(9, 61%, 47%);
color: hsla(9, 61%, 47%, 0.5);
/* Именованные */
color: red;
color: rebeccapurple;
/* Современный */
color: rgb(193 68 46 / 50%);
color: hsl(9 61% 47% / 50%);
Правило: HSL — для дизайн-систем, легко менять светлоту. HEX — компактно. RGB — для JS-динамики.
Прозрачность
opacity: 0.5— прозрачность всей карточки (включая текст и картинки).rgba(0,0,0,0.5)— прозрачность только фона.
Правило: для фона — rgba/hsla. Для карточки целиком — opacity.
CSS-переменные
:root {
--color-primary: #c1442e;
--color-primary-hover: #a83926;
--color-text: #1a1a1a;
--color-bg: #fafafa;
--radius: 10px;
--spacing: 16px;
}
.button {
background: var(--color-primary);
color: white;
border-radius: var(--radius);
padding: var(--spacing);
}
.button:hover {
background: var(--color-primary-hover);
}
Что даёт:
- Меняешь в одном месте — применяется везде.
- Тёмная тема — просто переопределить переменные.
- Не нужно препроцессор.
Fallback:
color: var(--unknown, #000);
Правило: переменные для цветов, отступов, радиусов, шрифтов.
Единицы
Абсолютные:
px— пиксели. Самые частые.pt— пункты (печать).cm,mm,in— сантиметры, миллиметры, дюймы (печать).
Относительные:
%— от родителя.em— отfont-sizeродителя.rem— отfont-sizeroot (html).vw— 1% ширины viewport.vh— 1% высоты viewport.vmin/vmax— 1% от меньшей/большей стороны.ch— ширина символа «0».ex— высота «x».
Правило:
rem— для шрифтов и отступов.px— для границ.%— для ширины относительно родителя.vw/vh— для полноэкранных секций.
em vs rem
html { font-size: 16px; }
.parent { font-size: 20px; }
.child-rem { font-size: 1.5rem; } /* 24px */
.child-em { font-size: 1.5em; } /* 30px — от родителя */
Правило: rem везде, кроме случаев, когда нужна зависимость от родителя.
Шрифты
Подключение системного стека:
body {
font-family:
system-ui,
-apple-system,
'Segoe UI',
Roboto,
'Helvetica Neue',
sans-serif;
}
Что даёт: использует системный шрифт — быстро, без загрузки.
Подключение Google Fonts:
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;800&display=swap" rel="stylesheet">
body {
font-family: 'Inter', system-ui, sans-serif;
}
Правило: display=swap — показывать fallback сразу.
Свойства шрифта
font-family: 'Inter', sans-serif;
font-size: 16px; /* или 1rem */
font-weight: 600; /* 100–900 или normal/bold */
font-style: italic; /* normal / italic / oblique */
font-variant: small-caps;
line-height: 1.5; /* без единиц — множитель */
Сокращённое:
font: 600 16px/1.5 'Inter', sans-serif;
/* weight size/line-height family */
Правило: использовать line-height без единиц — наследуется корректно.
Текст
text-align: left | center | right | justify;
/* Декор */
text-decoration: underline;
text-decoration: none;
text-decoration: line-through;
/* Трансформация */
text-transform: uppercase | lowercase | capitalize | none;
/* Отступ первой строки */
text-indent: 2em;
/* Разрядка */
letter-spacing: 0.05em;
word-spacing: 0.1em;
/* Тень */
text-shadow: 0 1px 2px rgba(0,0,0,0.2);
Перенос и обрезка
Перенос длинных слов:
overflow-wrap: break-word; /* переносить, если не влезает */
word-break: break-all; /* ломать где угодно */
Обрезка с многоточием (одна строка):
.text {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
Многострочная обрезка:
.text {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
Что даёт: максимум 3 строки + «…».
Белые пробелы
white-space: normal; /* сжимать пробелы, переносить */
white-space: nowrap; /* без переноса */
white-space: pre; /* сохранять пробелы и переносы */
white-space: pre-wrap; /* сохранять, но переносить */
white-space: pre-line; /* сжимать пробелы, сохранять переносы */
Правило: pre-wrap — для кода в HTML.
Выравнивание
/* По центру */
.container {
text-align: center;
}
/* Вертикально по центру */
.container {
display: flex;
align-items: center;
justify-content: center;
}
Правило: text-align — только для текста. Для блоков — flex/grid.
Пример: типографика
:root {
--font-size-base: 1rem; /* 16px */
--line-height-base: 1.6;
}
body {
font-family: system-ui, sans-serif;
font-size: var(--font-size-base);
line-height: var(--line-height-base);
color: #1a1a1a;
overflow-wrap: break-word;
}
h1 { font-size: 2.5rem; line-height: 1.2; margin-bottom: 1rem; }
h2 { font-size: 2rem; line-height: 1.3; margin-bottom: 0.75rem; }
h3 { font-size: 1.5rem; line-height: 1.4; margin-bottom: 0.5rem; }
p { margin-bottom: 1rem; }
small { font-size: 0.875rem; color: #6b6b6b; }
code {
font-family: ui-monospace, monospace;
font-size: 0.9em;
background: #f6f8fa;
padding: 2px 6px;
border-radius: 4px;
}
Fluid-типографика
Плавное изменение размера:
h1 {
font-size: clamp(1.75rem, 4vw, 3rem);
}
Что даёт: минимум 1.75rem, максимум 3rem, между — 4vw.
Правило: clamp() — современный способ. Не нужны медиазапросы для шрифтов.
Практика
1. Создайте систему цветов через переменные:
:root {
--primary: #c1442e;
--primary-hover: #a83926;
--text: #1a1a1a;
--text-muted: #6b6b6b;
--bg: #fafafa;
--surface: #fff;
--border: #e5e5e5;
}
2. Настройте типографику для h1–h6, p, small, code.
3. Используйте rem везде.
4. Попробуйте clamp() для заголовков.
5. Сделайте многострочную обрезку для карточки с описанием.
Частые ошибки
1. px для шрифтов:
Не масштабируется с настройками пользователя
Решение: rem.
2. line-height с px:
line-height: 24px; /* не масштабируется с font-size */
Решение: без единиц — 1.5.
3. em везде:
Сложно понять итоговый размер
Решение: rem.
4. Много шрифтов:
Каждый — +100KB
Решение: 1-2 шрифта, системные.
5. Google Fonts без preconnect:
Долгая загрузка
Решение: preconnect.
6. Без display=swap:
Текст невидим, пока грузится шрифт
Решение: display=swap.
7. !important для шрифта:
Признак плохой архитектуры
Решение: специфичность через классы.
8. text-align: center для блока:
Не работает как ожидается
Решение: flex / grid.
Итог
- Цвета: HEX, RGB, HSL, переменные.
- CSS-переменные — для системы.
rem— для шрифтов и отступов.px— для границ.%,vw,vh— для адаптива.- Системный стек шрифтов — быстрый.
line-heightбез единиц.overflow-wrap: break-word— обязательно.clamp()— fluid-типографика.- Не злоупотреблять шрифтами.
Дальше — box model.