Этот вопрос, как представляется, обеспокоены, почему над хау, поэтому я остановлюсь на внутреннюю работу:
The Visual formatting model раздел в CSS 2.1 спецификации описывает inline formatting contexts:
В контексте форматирования инлайн, блоки располагаются горизонтально, один за другим, начиная с верхней части содержащий блок. Горизонтальные поля, границы и отступы соблюдаются между этими ящиками. Ящики могут быть выровнены по вертикали различными способами: их днища или вершины могут быть выровнены, или исходные тексты внутри них могут быть выровнены. Прямоугольная область, содержащая прямоугольники, которые образуют линию, называется полем строки.
Свойство, которое они описывают, равно vertical-align
, который принимает значение по-разному, baseline
по умолчанию. Вот почему ваши два элемента inline
выглядят так же, как и они, на сидя на базовой линии. Вы можете изменить <p>
на vertical-align: top
, а верхняя часть первой строки текста будет совпадать с верхней частью изображения. Тем не менее, вы по-прежнему получите разрыв между первой строкой текста и следующими строками.
Это потому, что текст является рендерингом line-box к другому, по вертикали. Независимо от того, будет ли линейная строка первой строки больше остальных, она все равно будет передавать по одному линейному ящику за раз. Вот визуализация этой концепции:
Другим важным понятием в понимании этого является то, что <img>
является заменить встроенный элемент, который означает, что его внешний вид строится внешний ресурс за пределами документа.заменен inline элементов может принимать значение height
, тогда как так называемый не замененный inline (например, <span>
) элементов не может. Вот почему <img> <span>foo</span>
может вести себя иначе, чем <span>foo</span> <em>bar</em>
(потому что изображение имеет внутреннюю высоту), хотя они все встроенные элементы. Представьте себе, установив высоту изображения на й высоту текста - было бы эффективно оказывать такие же, как ваш образ, но и в этом случае он ведет себя точно так, как и следовало ожидать:
img {
height: 10px;
}
p {
display: inline;
}
<div>
<img src="http://placehold.it/100x100/E8117F/000.png">
<p>hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello</p>
</div>
Возможно, это место, где происходит некоторое замешательство. Если вы можете представить строки, тогда вы можете понять, что нет никаких ожиданий для встроенных элементов, которые будут вести себя как плавающие элементы.
Сравните эту информацию с тем, что спецификация говорит о floats:
Поплавок находится поле, которое смещается влево или вправо на текущей строке. Наиболее интересной характеристикой поплавка (или «плавающего» или «плавающего») является то, что содержимое может протекать вдоль его стороны (или запрещается это делать с помощью свойства «clear»). Содержимое течет вниз с правой стороны левого плавающего поля и вниз по левой стороне прямоугольного окна.
Поплавковая коробка сдвигается влево или вправо, пока ее внешняя кромка не коснется края блока или внешнего края другого поплавка. Если есть линейный ящик, внешний верх плавающего поля выравнивается с верхней частью текущего строкового блока.
В то время как я не могу описать вам, что происходит вплоть до электрона, я надеюсь, что это является хорошей отправной точкой в понимании того, почему эти различные сценарии делают, как они делают.
'img', по умолчанию,' inline-block', а не 'inline'. Вот почему вы можете указать ширину и маржу в CSS. –
@DavidThomas Спасибо. Я не знал о '' '' inline-block' не 'inline'. Но все же, даже если я укажу ширину и высоту на '', это не решит проблему. –
Можете ли вы поместить img в один div и текст в другой div и применить display: inline к обоим divs? –