На этой картинке показаны 8 разных шрифтов, из которых первый и второйfont-awesomeЗначки, значок пользовательского шрифта, за которым следует остальная часть шрифтаAvenir
,Trebuchet MS
,Arial
,Helvetica
,Hiragino Sans GB
,STXihei
.Исходный код здесь. Из этих персонажейfont-size:100px
Но не та же учетная высота. Некоторые из 100 пикселей, некоторые больше 100 пикселей. Далее видно, что вертикальное направление не отцентровано.
-
font
Принцип работы и метрики -
CSS box models
тип, определение
метрики шрифта
Чтобы понять ответ на поставленный выше вопрос, нужно начать со шрифтов:
мы вывозимAvenir
,Helvetica
,Hiragino Sans GB
Три шрифта для анализа
Как видно из рисунка выше, когда мы устанавливаемfont-size:100px
, высоты, занимаемые текстом, равны137px
,115px
а также100px
.
感觉有点懵啊。 какfont-size:100px
EM Square
правила определения шрифта
- Высота букв называется "
em
», цифровыми шрифтамиem
- это цифровой объем пространства.em
размер (следующее записывается как:EM size)как правило1000единиц, в шрифтах TrueType,EM size
Условное обозначение представляет собой степень числа 2, обычно 1024 или 2048. - В зависимости от единиц, в которых он фактически используется, размеры шрифтов могут основываться на некоторыхнастраиватьРешать.注意,有些值是em-square之外的值。
- В браузерах относительные единицы используются для масштабирования в соответствии с желаемым
font-size
настройки шрифта
Это легенда, подробно объясняющая настройки шрифта, значение каждого атрибута на рисунке:
-
baseline
(исходный уровень): отдельныйascent
а такжеdescent
, По умолчанию символ днаbaseline
Располагаются, как показано в P, x, Ё (для русских символов) -
ascent
(ростascent
font-family
Принимать решение -
descent
(отклонитьdescent
font-family
Принимать решение -
xHeight
(): символы нижнего регистраxВысотаfont-family
Принимать решение -
capHeight
(Верхняя высота): более крупные символыPвысота, поfont-family
Принимать решение -
lineSpacing
(Межстрочный интервал): в браузере нормальноlineSpacing = ascent + descent
-
lineHeight
(высота строки): по умолчанию равноlineSpacing
,кline-height
настройка влияет, если установленаline-height
,lineHeight
равныйline-height
. -
half-leading
(половинный межстрочный интервал): еслиlineHeight > lineSpacing
,ноlineHeight
а такжеlineSpacing
Будет производить междуравные вверх и внизVoid (lineHeight - lineSpacing) / 2 указанополовинный межстрочный интервал(half-leading
илиhalf lead strips
).
Расчет высоты, занимаемой персонажами
Итак, после понимания вышеизложенных концепций вы можете ответить, почемуfont-size:100px
Когда это другая проблема.
Сначала загрузите профессиональное программное обеспечение для шрифтов.FontForge, программа работает наxquartz, поэтому вам нужно установить оба.
После установки начинаем сAvenirПример шрифта для анализа.
-
EM size
для1000 -
ascent
для1000,descent
для366 -
capHeight
для708 -
xHeight
для468
это означаетAvenir
Единицы шрифта в 1000EM size
используется в1000 + 366
font-size:100px
100px * (1000 + 366 ) ≈ 137px
.
Эта расчетная высота определяетСодержимое элемента (область содержимого)высота эквивалентнаbackground
Атрибуты.
CSS box models
Далее мы выглядим глубоко,CSS box models
.你可能不知道什么CSS box models
, но вы можете не поверить в это. На самом деле я боюсь, что самый распространенныйCSS box models
.
Блочная коробка/содержащая коробка
Например, если есть простой текст, может быть несколько столбцовbox
. то этот абзац называетсяContaining Box
Причина, по которой он так назван, вероятно, потому, что он содержит многоbox
Бар. (Ха...) Конечно, вы также можете назвать этоBlock Box
, потому что онКусок. Проще говоряContaining Box
а такжеBlock Box
Inline Box (в поле)
Inline Box
. ЭтиBox
Не какBlock Box
В приведенном выше примере<em/>
курсивный элементявляется типичнымInline Box
.
Анонимная встроенная коробка
Inline Box
СталAnonymous inline Box
.
всеInline Box
существуетContaining Box
расположенные рядом друг с другом, они образуютLine Box
. должны знать о том,Line Box
Невозможно увидеть прямо.
Content area
Content area
вокруг текстаневидимая рамка. И мы также доказали в разделе о измерении шрифта, что его высота даетсяfont-size
Принимать решение.
Более подробные определения и описания можно найти в спецификации CSS 2.1.визуальная модель форматирования(Visual formatting model) раздел для чтения.
Китайская станция|Официальный сайт W3C
Inline Box
а такжеLine Box
Как Inline Box влияет на Line Box
Line box
высота наLine Box
самый высокий вInline Box
(илиReplaced Element
)Конечно.
самый высокийInline Box
может бытьAnonymous Inline Box
.
Это может быть и повышение.line-height
изInline Box
. Из-за увеличенияline-height
box
выше.
font-size
изInline Box
Inline Box
Inline Box
выше.
В зависимости от браузера на него также может повлиять верхний или нижний индекс. потому что некоторые браузерыLine box
Способ представлятьливые элементы наверху.
Мы можем установить<sup/>
,<sub/>
изline-height
0, чтобы решить эту проблему.
sub, sup { line-height: 0; }
Inline Box
может быть предметомReplaced Element
(Такие как:<img/>
,<input/>
,<svg/>
) Влияние.
Inline Box разрывает Line Box
Как мы можем видеть,Line Box
добавит все встроенныеInline Box
высота.
Однако иногдаInline Box
часть его лопнетLine Box
сверху или снизу. Например, у кого естьpadding
,margin
,border
изInline Box
. из-заInline Box
Высота не может быть задана (если задана, то тоже зря). Таким образом, он будет отображаться выше и ниже элементаpadding
,margin
,border
Но не влияетLine Box
.
Уведомление:дляReplaced Element
,inline-block
padding
,margin
,border
Это увеличит высоту, поэтомуLine Box
Также повлияет высота.
Браузер будет отображать документы в том порядке, в котором они представленыLine Box
. Итак, в последующих строкахborder
Может переопределитьborder
и текст.
Справочная статья
элементы макета в вертикальном направлении линии
Deep dive line-height