Единицы измерения
Размеры, окно браузера, углы и время в CSS. Grid-единица fr разобрана отдельно.
On this page
В CSS к числу почти всегда пишут единицу измерения: иначе браузер не знает, это пиксели, проценты или что-то ещё.
Размеры
Это длины: ширина, высота, отступ, кегль. Фиолетовым помечены ломкие или почти неиспользуемые единицы: em, svh / lvh. dvh к ним не относится: им чинят высоту на телефоне.
| Единица | Что значит |
|---|---|
px | Пиксель CSS после масштаба страницы, не «точка экрана телефона». 24px внутри блока с 24px всё равно 24. |
% | Доля родителя. Для font-size - доля шрифта родителя. Для width и отступов - доля ширины коробки родителя. |
em | Доля размера шрифта. В font-size считается от родителя. В padding или width - от шрифта этого же элемента. Вложенные em у шрифта умножаются, поэтому на курсе берём rem. |
rem | root em: доля шрифта корня, тега html. Вложенность не умножает. |
vh, vw | viewport height / width: 1% высоты или ширины видимой области (окна сайта). 100vh - на всю высоту этого окна. На телефоне часто больше, чем видно между панелями браузера. |
svh, svw | small viewport: «маленькое» окно, панели браузера на месте. |
lvh, lvw | large viewport: «большое» окно, панели уехали. |
dvh, dvw | dynamic viewport: число меняется, пока панели едут. На телефоне рабочая замена 100vh. |
На компьютере vh, svh, lvh и dvh часто совпадают. На телефоне шапка «на весь экран» на 100vh может уехать под нижнюю панель.
Пиксель
Пиксель не наследуется как множитель: 24px внутри 24px остаётся 24.
<div style="font-size: 24px">
Съешь ещё этих мягких французских булок
<div style="font-size: 24px">да выпей чаю</div>
</div>Съешь ещё этих мягких французских булок
Обе строки 24px. Вложенность ничего не умножает.
Проценты
% относительны. У шрифта 150% = полтора шрифта родителя, поэтому вложенные блоки тоже растут.
<div style="font-size: 150%">
Съешь ещё этих мягких французских булок
<div style="font-size: 150%">да выпей чаю</div>
</div>Съешь ещё этих мягких французских булок да выпей чаю
Вторая строка крупнее первой: процент считается от родителя.
width: 50% это половина коробки родителя, не шрифта. width: 2em это два кегля текущего текста. Одинаковая цифра, разная база.
Относительно шрифта элемента
1em = текущий кегль. Исторически так задавали отступ «как
одна строка текста»: padding: 1em. Если тот же трюк повесить на font-size
вложенных списков, каждый уровень умножает предыдущий. На курсе это не
используем: ту же роль без ловушки даёт rem.
<div style="font-size: 1.5em">
Съешь ещё этих мягких французских булок
<div style="font-size: 1.5em">да выпей чаю</div>
</div>Съешь ещё этих мягких французских булок да выпей чаю
Как 150%: каждый уровень умножает шрифт родителя.
Вложенный список. Правило на li { font-size: 1.2em } срабатывает на каждом уровне. Пять вложений: 1.2⁵.
<style>
.pack li {
font-size: 1.2em;
}
</style>
<ul class="pack">
<li>
Съешь ещё
<ul>
<li>
этих мягких
<ul>
<li>
французских булок
<ul>
<li>
да выпей
<ul>
<li>чаю</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>Съешь ещё
этих мягких
французских булок
да выпей
- чаю
Каждый уровень оглавления крупнее предыдущего. Для маркеров и отступов чаще берут rem.
Относительно шрифта страницы
rem (root em) смотрит на html. Вложенность блоков его не умножает. Меняете кегль на корне, меняется вся страница.
html {
font-size: 100%;
}
.lead {
font-size: 1.25rem;
}Окно браузера
Viewport = видимая область страницы в окне браузера, не весь документ.
vh= viewport height, высота этой области.1vh= 1% высоты.vw= viewport width, ширина.1vw= 1% ширины.
На телефоне 100vh часто включает зону под панелью адреса: блок «на весь экран» уезжает вниз.
svh= small viewport height, малое окно (панель на месте).lvh= large viewport height, большое окно (панель спрятана).dvh= dynamic viewport height, живое: растёт и сжимается, пока панель едет.
.hero {
min-height: 100dvh;
}
.hero-stable {
min-height: 100svh;
}Углы
Нужны для transform: rotate(), линейного и конического градиента.
deg= degree, градус. Полный круг =360deg. В школьной тригонометрии 0° справа на оси x, угол против часовой. В CSS0degсмотрит вверх (ось y), угол по часовой.grad= gradian, град. Полный круг =400grad. Редко встречается.rad= radian, радиан. Полный круг =2π≈6.2832rad. В CSS почти не пишут руками.turn= turn, оборот. Полный круг =1turn. Четверть оборота =0.25turn=90deg.
.card {
transform: rotate(45deg);
}
.card-turn {
transform: rotate(0.125turn);
}Оба квадрата повёрнуты на 45°. На курсе достаточно deg и иногда turn.
Время
Для transition и animation.
s= second, секунда.transition: 0.2s.ms= millisecond, миллисекунда.200ms=0.2s.
.button {
transition: background-color 200ms ease;
}Что выбрать
| Когда нужно | Чем задавать |
|---|---|
| Толщина линии, рамка, иконка фиксированного размера | px |
| Ширина или отступ относительно родителя | % |
| Размер относительно шрифта этого элемента | em (на курсе почти не используем) |
Размер относительно шрифта всей страницы (html) | rem |
| Размер относительно окна браузера | vw / vh; на телефоне обычно dvh |
| Поворот, направление градиента | deg или turn |
| Длительность анимации | s или ms |
| Доля свободного места в CSS Grid | fr (fraction), см. Grid |