Skip to content

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

Размеры, окно браузера, углы и время в CSS. Grid-единица fr разобрана отдельно.

also in web design and web development basics

On this page

В CSS к числу почти всегда пишут единицу измерения: иначе браузер не знает, это пиксели, проценты или что-то ещё.

Размеры

Это длины: ширина, высота, отступ, кегль. Фиолетовым помечены ломкие или почти неиспользуемые единицы: em, svh / lvh. dvh к ним не относится: им чинят высоту на телефоне.

ЕдиницаЧто значит
pxПиксель CSS после масштаба страницы, не «точка экрана телефона». 24px внутри блока с 24px всё равно 24.
%Доля родителя. Для font-size - доля шрифта родителя. Для width и отступов - доля ширины коробки родителя.
emДоля размера шрифта. В font-size считается от родителя. В padding или width - от шрифта этого же элемента. Вложенные em у шрифта умножаются, поэтому на курсе берём rem.
remroot em: доля шрифта корня, тега html. Вложенность не умножает.
vh, vwviewport height / width: 1% высоты или ширины видимой области (окна сайта). 100vh - на всю высоту этого окна. На телефоне часто больше, чем видно между панелями браузера.
svh, svwsmall viewport: «маленькое» окно, панели браузера на месте.
lvh, lvwlarge viewport: «большое» окно, панели уехали.
dvh, dvwdynamic viewport: число меняется, пока панели едут. На телефоне рабочая замена 100vh.

На компьютере vh, svh, lvh и dvh часто совпадают. На телефоне шапка «на весь экран» на 100vh может уехать под нижнюю панель.

Пиксель

Пиксель не наследуется как множитель: 24px внутри 24px остаётся 24.

pangram-px.html
<div style="font-size: 24px">
  Съешь ещё этих мягких французских булок
  <div style="font-size: 24px">да выпей чаю</div>
</div>

Съешь ещё этих мягких французских булок

да выпей чаю

Обе строки 24px. Вложенность ничего не умножает.

Проценты

% относительны. У шрифта 150% = полтора шрифта родителя, поэтому вложенные блоки тоже растут.

pangram-percent.html
<div style="font-size: 150%">
  Съешь ещё этих мягких французских булок
  <div style="font-size: 150%">да выпей чаю</div>
</div>

Съешь ещё этих мягких французских булок да выпей чаю

Вторая строка крупнее первой: процент считается от родителя.

width: 50% это половина коробки родителя, не шрифта. width: 2em это два кегля текущего текста. Одинаковая цифра, разная база.

Относительно шрифта элемента

1em = текущий кегль. Исторически так задавали отступ «как одна строка текста»: padding: 1em. Если тот же трюк повесить на font-size вложенных списков, каждый уровень умножает предыдущий. На курсе это не используем: ту же роль без ловушки даёт rem.

pangram-em.html
<div style="font-size: 1.5em">
  Съешь ещё этих мягких французских булок
  <div style="font-size: 1.5em">да выпей чаю</div>
</div>

Съешь ещё этих мягких французских булок да выпей чаю

Как 150%: каждый уровень умножает шрифт родителя.

Вложенный список. Правило на li { font-size: 1.2em } срабатывает на каждом уровне. Пять вложений: 1.2⁵.

pangram-em-list.html
<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. Вложенность блоков его не умножает. Меняете кегль на корне, меняется вся страница.

root.css
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, живое: растёт и сжимается, пока панель едет.
screen.css
.hero {
  min-height: 100dvh;
}
.hero-stable {
  min-height: 100svh;
}

Углы

Нужны для transform: rotate(), линейного и конического градиента.

  • deg = degree, градус. Полный круг = 360deg. В школьной тригонометрии 0° справа на оси x, угол против часовой. В CSS 0deg смотрит вверх (ось y), угол по часовой.
  • grad = gradian, град. Полный круг = 400grad. Редко встречается.
  • rad = radian, радиан. Полный круг = 2π ≈ 6.2832rad. В CSS почти не пишут руками.
  • turn = turn, оборот. Полный круг = 1turn. Четверть оборота = 0.25turn = 90deg.
Углы в тригонометрии и в CSSВ тригонометрии45°90°0°270°180°В CSS45deg0deg90deg180deg270deg
Один и тот же клин 45°: слева от оси x против часовой, справа от оси y по часовой.
rotate.css
.card {
  transform: rotate(45deg);
}
.card-turn {
  transform: rotate(0.125turn);
}
rotate(45deg)
rotate(0.125turn)

Оба квадрата повёрнуты на 45°. На курсе достаточно deg и иногда turn.

Время

Для transition и animation.

  • s = second, секунда. transition: 0.2s.
  • ms = millisecond, миллисекунда. 200ms = 0.2s.
motion.css
.button {
  transition: background-color 200ms ease;
}

Что выбрать

Когда нужноЧем задавать
Толщина линии, рамка, иконка фиксированного размераpx
Ширина или отступ относительно родителя%
Размер относительно шрифта этого элементаem (на курсе почти не используем)
Размер относительно шрифта всей страницы (html)rem
Размер относительно окна браузераvw / vh; на телефоне обычно dvh
Поворот, направление градиентаdeg или turn
Длительность анимацииs или ms
Доля свободного места в CSS Gridfr (fraction), см. Grid