Интернетчик » site » CSS: Неизбежный путь линейных единиц в браузере к пикселю (px)

CSS: Неизбежный путь линейных единиц в браузере к пикселю (px)

Разнообразие единиц измерения линейных величин в CSS делится на две большие группы: абсолютные (absolute length units) и относительные (relative length units). Для финального отображения на экране, браузер вычисляет размеры элементов в пикселях.

  1. Абсолютные единицы измерения в CSS
  2. Базовый CSS-пиксель (px)
  3. Относительные единицы измерения в CSS
  4. Жизнь размеров в браузере

Абсолютные единицы измерения в CSS

Абсолютные единицы измерения (absolute length units) в CSS не зависят от родительских стилей, параметров окна документа (viewport) и другого CSS-контекста. Браузер использует их как фиксированную систему отсчёта для определения линейных размеров.

На экранах устройств, классические cm, mm, in, pt и pc не гарантируют совпадения с физической линейкой, вычисляются относительно базового пикселя (px) и, по сути, являются его производными в CSS-мире:

  • 1cm (сантиметр) ≈ 37.8px
  • 1mm (миллиметр) ≈ 3.78px
  • 1in (дюйм, англ. inch) = 96px
  • 1pt (типографский пункт, англ. point) = 4/3px (≈ 1.33px, 72pt = 96px)
  • 1pc (пика, англ. pica) = 12pt = 16px

Базовый CSS-пиксель (px)

Базовый CSS-пиксель (px) — не физическая точка сетки экрана, а эталонная расчётная единица (reference pixel), определяемая как угловой размер, равный 0.0213°, для отрезка длиной 1/96 дюйма, наблюдаемого с расстояния 28 дюймов (≈71 см):

1 CSS px = ((1/96 дюйма) / 28 дюймов) × (180° / π) ≈ 0.0213°

где:
1/96 дюйма — длина наблюдаемого эталонного отрезка;
28 дюймов  — расстояние до наблюдателя;
180° / π   — коэффициент перевода радиан в градусы.

Базовый CSS-пиксель (px, reference pixel) лежит в основе механизма адаптации и отображения комфортного для чтения визуального размера контента на разных устройствах:

  • На стационарных мониторах (десктопных дисплеях) CSS-пиксель обычно совпадает с физическим пикселем устройства вывода.
  • На экранах с высокой плотностью (Retina, 4K, смартфоны) один CSS-пиксель физически формируется группой аппаратных точек, что позволяет сохранить привычный визуальный размер элементов.

Если программный CSS-пиксель начнёт всегда соответствовать физическому, то на современных смартфонах стандартный текст превратится в нечитаемую пыль.
Чтобы этого не происходило, отображение веб-страницы подстраивается автоматически.
В результате, текст и элементы интерфейса сохраняют привычный юзер-комфорт.

Относительные единицы измерения в CSS

Относительные единицы измерения (relative length units) в CSS не имеют самостоятельного размера и не существуют сами по себе.

Их финальный масштаб всегда рассчитывается программой на основе базовой величины, которую диктует текущий контекст рендеринга.

В зависимости от типа единицы, базой выступают размеры родительских контейнеров, параметры каскада, метрики используемых шрифтов или габариты окна просмотра (viewport). Это динамическая система отсчёта, необходимая для создания адаптивной и масштабируемой верстки.

Примеры relative length units в CSS и контекст их зависимости (упрощенно):

  • em — относительно размера шрифта текущего элемента (при расчёте font-size — относительно родителя)
  • rem — относительно размера шрифта корневого элемента <html>
  • % — рассчитывается индивидуально в зависимости от свойства (часто — от ширины/высоты родительского элемента)
  • vw, vh — относительно ширины и высоты окна просмотра (1vw = 1% от ширины viewport)
  • vmin, vmax — относительно меньшей или большей стороны viewport
  • ch — относительно ширины символа «0» (ноль) текущего шрифта
  • ex — относительно высоты строчной буквы «x» (x-height) текущего шрифта

Жизнь размеров в браузере

Судьба линейного размера внутри клиентского софта всегда одинакова:

  1. Получение CSS-значений — сбор деклараций, обработка каскада и контекста.
  2. Вычисление размеров в пикселях — перевод величин в базовый CSS-пиксель (px) и привязка к сетке.
  3. Вывод элементов на физический дисплей — отрисовка интерфейса в готовых пиксель-размерах.

Сей нехитрый порядок вещей неизменен веками, поскольку активная поверхность дисплея живёт в сугубо дискретном мире и физически слагается из аппаратных пикселей и ничего другого.

Браузер любит пиксели? Рендереру ведома любовь? Да ему всё равно, в чём считать.

Математическая зависимость единиц измерения изначально заложена в вычислительные алгоритмы. Приведение входящих данных к пиксель-знаменателю — обыденная и рутинная внутренняя рендер-стряпня.

Пиксель — наиболее простая форма общения браузера и аппаратной части. И, программа-обозреватель — просто обязана вычислить и подать контроллеру матрицы размеры элементов в пикселях. Потому как пиксель — самый простой способ достичь взаимопонимания с устройством. Браузер общается с железом на языке пикселя. Физический экран — пиксельная штука.

За сим, в финале рендера страницы движок обязательно вычислит для для финального отображения контента точные размеры элементов в пикселях. Независимо от того, в каком виде, объёме и контексте они были изначально заданы в CSS.

Вердикт: CSS-единиц измерения линейных величин много, и они разные. Все, без исключения, они — важны и нужны разработчику. Вычислительные алгоритмы охотно используют их в расчётных процессах, но итоговый результат физическая матрица согласна принять только в пикселях.

Потому что:

  • Экран по своей природе дискретен;
  • Физическая матрица дисплея состоит из пикселей (или отображение контента привязано к фиксированной сетке точек);
  • Финальная растеризация намертво привязана к пиксельной сетке устройства.

Финальная визуализация экрана — дискретна и пиксельна.

Отобразить результат на экране как-то иначе, минуя физическую сетку устройства, технически невозможно.

Увы.

Браузер любит пиксели (px)

Браузер любит пиксели (px), потому что деваться некуда. Потому что сам экран — физически дискретная величина, пиксельная по своей природе. Финальная экранная визуализация всегда неизбежно привязана к пиксельной сетке устройства, независимо от CSS-единиц.

Все эти миллиметры, дюймы, rem и vw — вообще не физический язык экрана. Это язык CSS-модели — удобный способ описания размеров для движка браузера (layout/rendering engine).

Браузер никогда не передаёт экрану см, мм, дюймы, проценты, rem, em, vw или что-то подобное.

Экрану, ЭТО — просто не нужно.

Перед самой отрисовкой браузер делает обязательную работу: вычисляет макет (layout), получает конкретные координаты, выдает чистые размеры и работает уже с готовой экранной сеткой устройства.

Монитор — это просто «глупая», работающая по заданным пиксель-координатам. Он понятия не имеет про дюймы, проценты или rem.

CSS-мир растра и измерений заканчивается внутри движка программы: Браузер любит пиксели (px) и превращает все на свете в пиксельную сетку координат, которую видеокарта отправляет на дисплей.

Суть: Все CSS‑единицы (абсолютные и относительные) в конечном счёте приводятся к вычисленным значениям. Абсолютная единица px формально определена как 1/96 дюйма. Это гарантирует предсказуемость: браузер обязан свести любую комбинацию единиц к пикселям для рендеринга. px (пиксели) — основная единица для экранов. Но при вычислении браузер переводит их в точные пиксели для отрисовки Почему это важно Истина: независимо от того, используете ли вы em, rem, vw или cm, браузер обязан рассчитать итоговый размер в пикселях. Практическое следствие: Пиксель — универсальная «валюта» отображения. Это обеспечивает кросс‑браузерную предсказуемость. Именно поэтому дизайнеры и разработчики часто проверяют макеты в пикселях, даже если используют относительные единицы для адаптивности. на визуальной площадке