В избранном пока пусто. Нажми звёздочку у строки, чтобы вернуться к ней позже.
Текст и шрифт
| Свойство |
Что делает |
Пример |
Избранное |
color |
Цвет текста |
color: #6544e0;
|
|
font-family |
Стек шрифтов. Родовое имя — последним |
font-family: "Manrope", system-ui, sans-serif;
|
|
font-size |
Размер шрифта. Основной текст 16–18px |
font-size: 1.0625rem;
|
|
font-weight |
Насыщенность: 100–900 |
font-weight: 700;
|
|
font-style |
Курсив |
font-style: italic;
|
|
line-height |
Межстрочный интервал. Числом без единиц |
line-height: 1.7;
|
|
letter-spacing |
Расстояние между буквами. В em |
letter-spacing: -0.02em;
|
|
text-align |
Выравнивание текста |
text-align: center;
|
|
text-transform |
Регистр: верхний, нижний, с заглавной |
text-transform: uppercase;
|
|
text-decoration |
Подчёркивание и зачёркивание |
text-decoration: none;
|
|
text-underline-offset |
Отступ подчёркивания от текста |
text-underline-offset: 3px;
|
|
text-shadow |
Тень у текста |
text-shadow: 0 2px 12px rgb(0 0 0 / .5);
|
|
text-wrap |
balance — ровные строки заголовка, pretty — без висячих слов |
text-wrap: balance;
|
|
white-space |
Как обрабатывать пробелы и переносы |
white-space: nowrap;
|
|
overflow-wrap |
Разрешить разрыв длинных слов |
overflow-wrap: break-word;
|
|
writing-mode |
Направление письма: вертикальный текст |
writing-mode: vertical-rl;
|
|
Коробка: размеры и отступы
| Свойство |
Что делает |
Пример |
Избранное |
box-sizing |
Входят ли padding и border в width. Первое правило проекта |
box-sizing: border-box;
|
|
width / height |
Жёсткие размеры. Используй осторожно |
width: 280px;
|
|
max-width |
Не шире заданного. Основной инструмент |
max-width: 68ch;
|
|
min-height |
Не ниже заданного, но может вырасти |
min-height: 100vh;
|
|
padding |
Внутренний отступ. Верх → право → низ → лево |
padding: 16px 24px;
|
|
margin |
Внешний отступ. Вертикальные схлопываются |
margin: 0 0 1rem;
|
|
margin: 0 auto |
Центрирует блок по горизонтали |
margin: 0 auto;
|
|
margin-inline |
Отступы по горизонтали одной строкой |
margin-inline: auto;
|
|
margin-block |
Логическая пара по вертикали: сверху и снизу |
margin-block: 0 1.5rem;
|
|
padding-inline |
Внутренние отступы по строке письма |
padding-inline: 1.25rem;
|
|
padding-block |
Внутренние отступы поперёк строки |
padding-block: 2rem;
|
|
border-inline-start |
Рамка со стороны начала строки, а не слева |
border-inline-start: 3px solid var(--accent);
|
|
inline-size / block-size |
Логические ширина и высота |
inline-size: min(100%, 60ch);
|
|
content-visibility |
Не рисовать то, что за экраном |
content-visibility: auto;
|
|
contain-intrinsic-size |
Заглушка высоты для content-visibility |
contain-intrinsic-size: auto 400px;
|
|
aspect-ratio |
Соотношение сторон без костылей |
aspect-ratio: 16 / 9;
|
|
overflow |
Что делать с тем, что не влезло |
overflow: auto;
|
|
display |
Как элемент участвует в потоке |
display: flex;
|
|
visibility |
Спрятать, оставив место |
visibility: hidden;
|
|
Flexbox
| Свойство |
Что делает |
Пример |
Избранное |
display: flex |
Делает элемент флекс-контейнером. Пишется родителю |
display: flex;
|
|
flex-direction |
Направление главной оси |
flex-direction: column;
|
|
justify-content |
Распределение вдоль главной оси |
justify-content: space-between;
|
|
align-items |
Выравнивание поперёк главной оси |
align-items: center;
|
|
align-self |
Переопределить выравнивание одного элемента |
align-self: flex-end;
|
|
flex-wrap |
Разрешить перенос на новую строку |
flex-wrap: wrap;
|
|
gap |
Расстояние между элементами |
gap: 16px;
|
|
flex |
grow, shrink и basis одной строкой |
flex: 1 1 240px;
|
|
flex-grow |
Насколько жадно забирает свободное место |
flex-grow: 1;
|
|
flex-shrink |
Насколько охотно сжимается |
flex-shrink: 0;
|
|
order |
Визуальный порядок. Ломает порядок фокуса |
order: -1;
|
|
margin-left: auto |
Прижать элемент к правому краю |
margin-left: auto;
|
|
CSS Grid
| Свойство |
Что делает |
Пример |
Избранное |
display: grid |
Делает элемент грид-контейнером |
display: grid;
|
|
grid-template-columns |
Сколько колонок и какой ширины |
grid-template-columns: 240px 1fr;
|
|
grid-template-rows |
То же для строк |
grid-template-rows: auto 1fr auto;
|
|
fr |
Доля свободного места. Учитывает gap |
grid-template-columns: 2fr 1fr;
|
|
repeat() |
Повторить дорожку несколько раз |
repeat(12, 1fr)
|
|
minmax() |
Минимальный и максимальный размер дорожки |
minmax(220px, 1fr)
|
|
auto-fit |
Столько колонок, сколько поместится |
repeat(auto-fit, minmax(220px, 1fr))
|
|
grid-template-areas |
Раскладка схемой из имён |
grid-template-areas: "header header" "nav main";
|
|
grid-area |
Назначить элементу область |
grid-area: header;
|
|
grid-column |
От какой линии до какой |
grid-column: 1 / -1;
|
|
span |
Занять несколько дорожек |
grid-column: span 2;
|
|
place-items |
Центрирование по обеим осям одной строкой |
place-items: center;
|
|
auto-fill |
Как auto-fit, но пустые колонки остаются |
repeat(auto-fill, minmax(200px, 1fr))
|
|
grid-auto-rows |
Размер строк, которые сетка создаёт сама |
grid-auto-rows: minmax(160px, auto);
|
|
grid-auto-flow |
Куда складывать элементы без явного места |
grid-auto-flow: dense;
|
|
subgrid |
Ребёнок наследует дорожки родителя |
grid-template-rows: subgrid;
|
|
Позиционирование
| Свойство |
Что делает |
Пример |
Избранное |
position: relative |
Сдвиг от себя. Точка отсчёта для детей |
position: relative;
|
|
position: absolute |
Выход из потока. Считает от позиционированного предка |
position: absolute; top: 12px; right: 12px;
|
|
position: fixed |
Привязка к окну браузера |
position: fixed; bottom: 20px;
|
|
position: sticky |
Прилипает при прокрутке. Нужна координата |
position: sticky; top: 0;
|
|
inset |
Все четыре координаты одной строкой |
inset: 0;
|
|
z-index |
Порядок слоёв. Работает только с position |
z-index: 10;
|
|
isolation |
Создать свой контекст наложения |
isolation: isolate;
|
|
Фон, рамки, тени
| Свойство |
Что делает |
Пример |
Избранное |
background |
Цвет, картинка, градиент — всё сразу |
background: #f4f4f8;
|
|
background-size |
cover заполняет и обрезает, contain вписывает целиком |
background-size: cover;
|
|
background-position |
Куда поставить картинку |
background-position: center;
|
|
linear-gradient() |
Линейный градиент. 0deg — снизу вверх |
background: linear-gradient(135deg, #7c5cff, #b06cff);
|
|
radial-gradient() |
Радиальный градиент от точки |
background: radial-gradient(circle at 30% 20%, #b06cff, transparent);
|
|
border |
Рамка. Толщина, стиль, цвет |
border: 2px solid #e0e0ea;
|
|
border-radius |
Скругление углов |
border-radius: 14px;
|
|
box-shadow |
Тень: X, Y, размытие, растяжение, цвет |
box-shadow: 0 12px 28px -8px rgb(20 24 48 / .3);
|
|
outline |
Обводка поверх, не занимает места |
outline: 2px solid #6544e0;
|
|
outline-offset |
Отступ обводки от края |
outline-offset: 3px;
|
|
opacity |
Прозрачность всего элемента |
opacity: .5;
|
|
filter |
Обработка самого элемента |
filter: blur(4px) grayscale(1);
|
|
backdrop-filter |
Размытие того, что под элементом |
backdrop-filter: blur(14px);
|
|
mix-blend-mode |
Режим смешивания со слоем ниже |
mix-blend-mode: multiply;
|
|
background-blend-mode |
Смешивание слоёв фона между собой |
background-blend-mode: overlay;
|
|
clip-path |
Обрезка по фигуре. Обрезанное не кликается |
clip-path: polygon(0 0, 100% 0, 100% 85%, 0 100%);
|
|
mask-image |
Маска по прозрачности: градиент или SVG |
mask-image: linear-gradient(#000, transparent);
|
|
mask-size / mask-repeat |
Ведут себя как одноимённые свойства фона |
mask-size: contain; mask-repeat: no-repeat;
|
|
object-fit |
Как картинка ложится в свою коробку |
object-fit: cover;
|
|
object-position |
Какую часть картинки оставить видимой |
object-position: 50% 20%;
|
|
Анимация и 3D
| Свойство |
Что делает |
Пример |
Избранное |
transition |
Плавное изменение. Пиши в базовом состоянии |
transition: transform 200ms ease-out;
|
|
transform |
Сдвиг, масштаб, поворот. Не трогает раскладку |
transform: translateY(-4px) scale(1.03);
|
|
translate / scale / rotate |
Отдельные свойства, не конфликтуют между собой |
translate: 0 -4px;
|
|
@keyframes |
Набор кадров анимации |
@keyframes appear { from { opacity: 0 } }
|
|
animation |
Имя, длительность, кривая, режим заливки |
animation: appear .5s ease-out both;
|
|
animation-delay |
Задержка перед стартом. Для каскада |
animation-delay: 80ms;
|
|
cubic-bezier() |
Своя кривая ускорения |
cubic-bezier(.22, 1, .36, 1)
|
|
perspective |
Расстояние до зрителя. Без неё нет объёма |
perspective: 900px;
|
|
transform-style |
preserve-3d сохраняет объём у детей |
transform-style: preserve-3d;
|
|
backface-visibility |
Показывать ли изнанку повёрнутого элемента |
backface-visibility: hidden;
|
|
will-change |
Подготовить элемент к анимации. Не злоупотребляй |
will-change: transform;
|
|
scroll-behavior |
Плавная прокрутка к якорям |
scroll-behavior: smooth;
|
|
scroll-margin-top |
Отступ при прыжке к якорю под липкой шапкой |
scroll-margin-top: 80px;
|
|
Переменные, функции, запросы
| Свойство |
Что делает |
Пример |
Избранное |
@layer |
Слой каскада. Порядок объявления решает спор, а не вес |
@layer base, components, utilities;
|
|
container-type |
Сделать элемент контейнером для @container |
container-type: inline-size;
|
|
container-name |
Имя контейнера, если их несколько |
container: card / inline-size;
|
|
cqw / cqi |
Единицы от ширины контейнера, а не окна |
font-size: clamp(1rem, 4cqi, 2rem);
|
|
@font-face |
Подключение своего шрифта |
@font-face { font-family: "Onest"; src: url(onest.woff2) format("woff2"); }
|
|
font-display |
Что показывать, пока шрифт грузится |
font-display: swap;
|
|
--custom-property |
Переменная. Объявляют в :root |
--accent: #6544e0;
|
|
var() |
Чтение переменной. Второй аргумент — запасное значение |
color: var(--accent, #000);
|
|
calc() |
Арифметика прямо в значении |
width: calc(100% - 2rem);
|
|
clamp() |
Минимум, желаемое, максимум |
font-size: clamp(1.8rem, 1.2rem + 3vw, 3.5rem);
|
|
min() / max() |
Выбор меньшего или большего значения |
width: min(100% - 2rem, 1200px);
|
|
color-mix() |
Смешать два цвета |
background: color-mix(in oklab, var(--accent) 20%, white);
|
|
@media (min-width) |
Медиазапрос по ширине. Mobile-first |
@media (min-width: 700px) { … }
|
|
prefers-color-scheme |
Системная тема человека |
@media (prefers-color-scheme: dark) { … }
|
|
prefers-reduced-motion |
Человеку мешает движение |
@media (prefers-reduced-motion: reduce) { … }
|
|
@container |
Запрос по ширине родителя, а не окна |
@container (min-width: 400px) { … }
|
|
@supports |
Применить, только если свойство поддерживается |
@supports (backdrop-filter: blur(1px)) { … }
|
|
@import |
Подключить другой файл стилей. Тормозит загрузку |
@import "base.css";
|
|
Селекторы
| Свойство |
Что делает |
Пример |
Избранное |
.class |
По классу. Основной инструмент |
.card { … }
|
|
#id |
По идентификатору. В стилях лучше не использовать |
#hero { … }
|
|
A B |
Потомок на любой глубине |
.card p { … }
|
|
A > B |
Прямой ребёнок |
.list > li { … }
|
|
A + B |
Следующий сосед |
h2 + p { … }
|
|
[attr] |
По наличию или значению атрибута |
a[target="_blank"] { … }
|
|
:hover |
Курсор над элементом |
.btn:hover { … }
|
|
:focus-visible |
Фокус пришёл с клавиатуры |
.btn:focus-visible { … }
|
|
:nth-child() |
По порядковому номеру. Принимает формулу |
li:nth-child(odd) { … }
|
|
:not() |
Все, кроме подходящих |
p:not(.lead) { … }
|
|
:has() |
Элемент, внутри которого есть указанное |
.card:has(img) { … }
|
|
:is() |
Скобки вместо перечисления через запятую |
.card :is(h2, h3, h4) { … }
|
|
:where() |
То же, но с нулевым весом |
:where(h1, h2) { … }
|
|
:user-invalid |
Поле заполнено неверно и человек уже уходил из него |
input:user-invalid { border-color: red; }
|
|
::before / ::after |
Псевдоэлемент. Нужен content |
.item::before { content: "✓"; }
|
|