Подтвердить что ты не робот

Почему отображаемые пиксели отличаются от реальных пикселей?

В моем HTML у меня есть <div> (назовите это панель) с фиксированной шириной, которая содержит некоторый текст; этот текст установлен в font-size: 25px; line-height: 25px; в сопроводительном CSS. Так получилось, что текст заканчивается как 36 строк.

Учитывая, что все поля, прокладки и границы равны нулю, вы ожидаете, что высота панели будет 36 * 25px = 900px, и это на самом деле то, что я нахожу в Firefox, используя метод DOM getBoundingClientRect().

Однако в Google Chrome я получаю разные цифры; казалось бы, что панель только 892.7999877929688px высока, а линии - 24.799999660915798px. Однако разделение этих двух чисел дает 36. Похоже, что существует коэффициент масштабирования между номинальными пикселями, установленными в CSS и реальными пикселями, как указано getBoundingClientRect(); в моем случае это 1,0080645299120465 номинальных для реальных пикселей.

Еще одно доказательство приходит от Chromium, работающего внутри приложения nwjs, где я первоначально наблюдал несоответствие. Во время моих тестов он всегда отличался от показателя в Chrome. Теперь, в какой-то момент во время моих тестов, пиксели, сообщенные Chromium, внезапно подскочили до целочисленных значений, как указано в Firefox; Я не уверен, что сделал, чтобы это произошло.

Можно было ожидать, что дробные отношения каким-то образом связаны с увеличением страницы; в конце концов, при очень небольших размерах Chrome и Chromium обрабатывают текст (а иногда и ошибаются). И действительно, изменение масштаба в Chrome приводит к разным коэффициентам, а увеличение масштаба Chrome до максимума сделает соотношение равным 1. В моем приложении Chromium не увеличено до максимума, и все еще имеет дробный отношение. отношение целочисленных пикселей в тесте, но дробное значение в реальном приложении.

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

Мне все еще интересно, каков источник наблюдаемого поведения. Есть ли какие-либо сообщения об этом? Является ли это преднамеренным или возникающим поведением рендеринга? Это когда-либо обсуждалось разработчиками? Существует ли API для получения отношения?

Я поставил код в стиле https://gist.github.com/loveencounterflow/d8c20b9021d2ab3f573a, чтобы упростить тестирование.

4b9b3361

Ответ 1

Некоторые шрифты не могут отображаться в точном размере u ask for, а шрифты имеют свойства, которые косвенно влияют на реальный размер. Если вы хотите одинакового поведения, возможно, вам придется импортировать свой собственный шрифт для достижения аналогичного рендеринга кросс-браузера. У меня была аналогичная проблема при работе с IE и Chrome.