Как выстраиваются строковые блоки внутри контейнера строки?
1,00
р.
р.
Вопрос по CSS. Если задать font-size > line-height, например, font-size: 24px и line-height: 12px, то половинный интервал будет отрицательным (-6px). Не могу представить поведение строчного элемента, когда у него половинный интервал отрицательный.
This is text, some of which is emphasized, plus other text which is strongly emphasized and which is larger than the surrounding text.
В этом примере font-size большей части текста составляет 12px, тогда как текст одного из строковых незамещаемых элементов имеет размер 24px. Однако значение line-height всего текста – 12px, поскольку line-height – это наследуемое свойство. Таким образом, line-height элемента strong – также 12px. В данном примере для анонимного текста (который не лежит в строчном элементе) и для курсива высота строки равна высоте шрифта (font-size равен line-height, который равен 12px). Для элемента strong ситуация другая. Не понимаю, почему в данном примере контейнер строки по высоте равен 15 пикселей.
Как блочные элементы выкладываются в документ понятно – сверху вниз кладутся прямоугольники-блоки один под другим. При этом надо учитывать поля, рамки и отступы + плавающие элементы. А вот как это происходит с текстом и текстовыми элементами внутри блока, а они ФОРМИРУЮТ ВЫСОТУ блока в большинстве случаев - мне не понятно. 2. Объясните, пожалуйста, подробно, как строки ВЫКЛАДЫВАЮТСЯ в документ. В строках есть блоки (не блочные элементы, а просто блоки) - область содержимого (content area), строковый блок (inline box), контейнер строки (line box). Написано в книге Мейера, что "Контейнер строки (line box) - это наименьший блок, охватывающий самую верхнюю и самую нижнюю точки строковых блоков, находящихся в строке. Иначе говоря, верхний край контейнера строки размещается вдоль вер шины самого высокого строкового блока, и низ совпадает с низом строкового блока, расположенного ниже всех." Не понимаю, как получили число 15 пикселей в примере выше. Не понимаю, как выстраиваются строковые блоки внутри контейнера строки. Мейер в своей книге пишет "Для каждой области содержимого определяем, какая ее часть находится выше базовой линии всей строки и какая ее часть находится под базовой линией. Это непростая задача: должно быть известно положение базовой линии каждого элемента и каждого куска анонимного текста и базовой линии самой строки, затем они все должны быть выстроены в ряд." Что значит "базовая линия всей строки"? Базовая линия, насколько я понимаю, может быть только у анонимного текста или строкового элемента. А строка – это кусок анонимного текста и/или строчного элемента, которая ВЛЕЗЛА по ширине в блочный элемент-контейнер. Понял то, что каждая строка лежит в контейнере строки, эти контейнеры ложатся один под другим вплотную.
Ответ Размер шрифта – вещь метафорическая. Даже если вы задаете, как у меня в примере line-height:40px font-size:40px , высота шрифта будет больше. Почему? Потому что по традиции высота шрифта рассчитывается от верхней точки прописной буквы типа Н до нижней точки буквы у. Легко представить, что буква Ё будет выше, поэтому шрифты резервируют себе немного больше места. Разделите в своем сознании строковый элемент и блоковый элемент: у них разные свойства. Смотрите пример: Высота div блокового элемента соответствует line-height, однако строковый элемент немного больше, он соответствует настоящей высоте шрифта.
Строки накладываются друг на друга, невзирая на высоту
Высота блока состоит из line-height х количество строк + padding. Даже если line-height = 0, высота строковых элементов ни на что не влияет, и строки сливаются в одну:
Строки накладываются друг на друга, невзирая на высоту
Что такое базовая линия? Это линия, идущая по нижней границе букв, не имеющих свисающих элементов:
Легко увидеть базовую линию, достаточно спозиционировать строчный элемент по этой линии (vertical-align: baseline)
div { font-size: 40px } span { display: inline-block border-bottom: 1px dotted red width: 70px vertical-align: baseline }
Ёнудл
UPD если в одной строке есть, например, два элемента span, у каждого задан свой vertical-align, то как они выстраиваются? что такое базовая линия ВСЕЙ строки По умолчанию, инлайн-блоки выстраиваются по высоте так, чтобы их baseline совпадали.
div { font-size: 20px line-height: 30px border: 1px solid blue } span { background: rgba(0, 0, 0, 0.2) }
Обычный Большой
Если мы используем vertical-align: top или bottom, элементы прибиваются к верхнему или нижнему краю строки. Но мы должны знать, если line-height инлайн-блока будет равно line-height строки, то это ни на что не повлияет, т.к. верхняя и нижняя границы блоков и так совпадают. Кроме того, если line-height инлайн-блока будет больше, то line-height строки тоже увеличится:
div { font-size: 20px line-height: 30px border: 1px solid blue } span { background: rgba(0, 0, 0, 0.2) } span line-height: 20px:
Как видите, на примерах опять играет роль line-height, а не высота самого текста в блоке. Высота текста фактически нужна только для одного – для отрисовки выделения букв, ну и конечно, если мы укажем line-height относительной величиной (например 1.5 или 150%).