Как рассчитывается размер шрифта?

У меня есть сложная функция js с уравнением, в котором мне действительно нужно понимать, сколько места в пикселях занимают размеры шрифта.

Я заметил, что размеры некоторых шрифтов различаются в зависимости от шрифта.

Как рассчитывается размер шрифта? Если в CSS установлено значение 12px, что означает 12px? Это 12px шириной? Высокий? Или это измерение в пикселях по диагонали?


person UpHelix    schedule 16.08.2010    source источник
comment
Вам нужно знать, сколько займет данный фрагмент текста? Поскольку некоторые символы могут быть не только больше, чем квадрат em, как указано ниже, но некоторые могут быть меньше, а соотношение высоты и ширины - это совсем другое дело, никакая формула не может решить это без знания каждого используемого глифа. Лучше всего, если вам важен размер фрагмента текста, просто вывести его (возможно, скрытый), а затем измерить.   -  person Jon Hanna    schedule 16.08.2010
comment
@UpHelix, ты видишь эту страницу? Страница поддержки Microsoft. Думаю, это полезнее.   -  person antonio    schedule 03.09.2019


Ответы (5)


См. спецификацию:

Размер шрифта соответствует квадрату em - концепции, используемой в типографике.
Обратите внимание, что некоторые глифы могут выходить за пределы своих квадратов.

person SLaks    schedule 16.08.2010
comment
есть ли более свежие ссылки на этот метод исчисления? - person Webwoman; 29.06.2019

Высота - стандартная мера

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

Разные шрифты на 24 и 12 пикселей
(источник: banzaimonkey.net)

Шрифты в порядке появления: Times New Roman, Courier New, Calibri, Consolas.

Ширина

Ширина глифов варьируется в зависимости от шрифта, как вы можете видеть на изображении выше. Также существует важное различие между пропорциональными и fixed-width шрифтами. Для шрифтов фиксированной ширины пространство, которое каждый символ занимает в строке, точно такое же (хотя сами символы могут быть не совсем того же размера, что и друг друга. Для пропорциональных шрифтов пространство, которое использует каждый символ, больше соответствует его форма относительно других символов, поэтому i, j и l могут быть узкими, а w, м и o обычно шире.

Шрифты

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

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

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

Проблемы с размером

Есть некоторые предостережения относительно размеров шрифта, когда вы имеете дело с вещами в Интернете.

Для Интернета

Любой хороший веб-дизайнер знает, что нет равных. При рендеринге страницы используется бесчисленное множество переменных, которые могут привести к различиям между пользователями, например, браузер, шрифты по умолчанию, масштабирование, сглаживание, подсказки, масштабирование браузера, масштабирование операционной системы и т. Д.

В A List Apart (до того, как они прыгнули через акулу) есть несколько хороших статей о стандартизации размеров шрифтов и помощи вам получить некоторый уровень сходства между браузерами:

Хотя вы можете проявить должную осмотрительность, вам просто нужно признать, что веб-среда включает в себя определенный уровень изменчивости, который вы не можете контролировать.

Печать против пикселей

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

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

Пиксели также относятся к размеру дисплея, поэтому 12 пикселей будут другим физическим размером на этих дисплеях:

  • 20-дюймовый монитор с разрешением 1680x1050
  • 22-дюймовый монитор с разрешением 1680x1050
  • экран iPhone
  • Экран Blackberry
  • и Т. Д.

TL;DR

В общем, это сложно. font-size относится к высоте, необходимой для отображения гаммы символов, но в безумном и беспорядочном Интернете всегда есть исключения.

person cbednarski    schedule 16.08.2010
comment
Смотрите мой комментарий выше, если вы не против. Кажется, у вас есть авторитет в этом вопросе. - person Bob Spryn; 18.08.2010

Это дополнительный ответ. Я нашел диаграмму с этого сайта очень полезной для понимания общей картины.

Таблица преобразования размера шрифта

person Suragch    schedule 03.01.2017

Вы должны использовать .getClientRects(), если вам нужно знать, сколько места занимает / занимает строка текста для отображения на экране.

Фактическое взаимодействие между тем, что вы устанавливаете, и тем, какой размер вы получите, довольно сложно. Спецификация CSS3 формулирует это более четко, чем спецификация CSS2, указанная в других ответах:

Это свойство указывает желаемую высоту глифов шрифта. Для масштабируемых шрифтов размер шрифта - это коэффициент масштабирования, применяемый к модулю EM шрифта.

В принципе, вы можете контролировать размер «em-квадрата». Формы шрифта определены относительно этого, но, безусловно, могут отклоняться за пределы / внутри этого поля (иногда значительно).

И это только для начала! Даже если вы предположите, что шрифт очень похож на этот em-квадрат - вы просто собираетесь умножить длину строки на этот размер? Если он не моноширинный и ваш текст не является только ASCII, вам есть о чем беспокоиться: различная ширина символов, кернинг и лигатуры, поведение упаковки и, конечно же, другие еще более простые предостережения относительно длины строки, такие как табуляции, Unicode, объединяющие символы и управляющие коды .

person natevw    schedule 03.04.2013

Согласно спецификации (http://www.w3.org/TR/CSS2/fonts.html)

Размер шрифта соответствует квадрату em - концепции, используемой в типографике. Обратите внимание, что некоторые глифы могут истекать кровью за пределами своих квадратов.

person Robert    schedule 16.08.2010
comment
Последующий вопрос по EM. Есть дизайнеры, которые говорят мне о вертикальном ритме. Они считают, что при одинаковом размере шрифта поле em будет отличаться от шрифта к шрифту. В моем тестировании это не выглядело правдой. Блок EM соответствует определенному количеству пикселей независимо от шрифта. например. body = 62,5% (10px) 1em font size = 10px независимо от font-family. Таким образом, 1em всегда равняется вычисленному размеру шрифта его родительского элемента, даже если вы измените семейство шрифтов. Я здесь прав? - person Bob Spryn; 18.08.2010
comment
@Bob Spryn По моему опыту, в отношении font-size, % и em функционально идентичны, за исключением расположения десятичной дроби. Разница между % и em возникает из-за проблемы реализации в браузерах, которые используют масштабирование шрифтов (в большинстве современных браузеров этого больше не делают), а не масштабирование растра. См. guistuff.com/css/css_units.html. - person cbednarski; 19.08.2010