Урок 13. Примеры: Единицы измерения в CSS

📁 Раздел: Основы CSS ⏱️ Время изучения: ~40 мин 🎯 Сложность: Начальная
#min #max #clamp

⚡ Кратко

Смотри на «Результат» рядом с кодом: одно и то же число в разных единицах даёт разную ширину. Затем измени значение и предскажи, как сдвинется блок.

Рабочие примеры

В каждом примере сверху — реальный результат, ниже — код. Сравнивай вживую.

1. px — фиксированная ширина брусков

В px ширина не зависит ни от чего: 100px и 200px всегда такие, какими заданы.

100px
200px
300px
.bar-1 { width: 100px; }
.bar-2 { width: 200px; }
.bar-3 { width: 300px; }

2. % — доля от родителя

Родитель шириной 320px (пунктир). Проценты считаются от него: 25%, 50%, 100%.

25% → 80px
50% → 160px
100% → 320px
.parent { width: 320px; }   /* контекст для % */
.bar-1  { width: 25%; }     /* = 80px  */
.bar-2  { width: 50%; }     /* = 160px */
.bar-3  { width: 100%; }    /* = 320px */

3. rem vs px для ширины — при базовом шрифте 16px совпадают

10rem = 10 × 16px = 160px. Разница проявится, если поменять корневой шрифт — rem подстроится, px нет.

width: 160px
width: 10rem (=160px)
/* при font-size корня = 16px обе полоски = 160px */
.fixed    { width: 160px; }   /* не реагирует на зум шрифта */
.relative { width: 10rem; }   /* вырастет, если вырастет корневой шрифт */

4. em vs rem для шрифта внутри вложенности

Родитель имеет font-size: 20px. em считается от него (1.5em = 30px), а rem — от корня страницы (1.5rem = 24px). Видно разный размер текста.

Родитель: font-size 20px
1.5em → 30px (от родителя)
1.5rem → 24px (от корня 16px)
.parent   { font-size: 20px; }
.child-em  { font-size: 1.5em; }   /* 1.5 × 20 = 30px */
.child-rem { font-size: 1.5rem; }  /* 1.5 × 16 = 24px */

5. ch + clamp() — читаемый адаптивный текст

max-width: 70ch держит строку комфортной, а clamp() плавно меняет размер заголовка.

Заголовок на clamp()

Контейнер ограничен по ch, поэтому строка не растягивается на всю ширину и читается легко.

.article { max-width: 70ch; margin: 0 auto; }
.article h1 {
  font-size: clamp(2rem, 5vw, 4rem);
  line-height: 1.1;
}
Эксперимент: открой пример 4 в DevTools (F12) и поменяй у родителя font-size — em-строка изменится, rem-строка останется прежней.