Почему в следующем коде высота div
больше, чем высота img
? Под изображением есть пробел, но он не является отступом / полем.
Что такое зазор или дополнительное пространство под изображением?
#wrapper {
border: 1px solid red;
width:200px;
}
img {
width:200px;
}
<div id="wrapper">
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
Ответы:
По умолчанию изображение отображается встроенным, как буква, поэтому оно располагается на той же строке, что и a, b, c и d.
Под этой линией есть место для спусков, которые вы найдете на буквах типа g, j, p и q.
Вы можете:
vertical-align
изображение, чтобы расположить его в другом месте (например,middle
) илиdisplay
так, чтобы он не был встроенным.Включенное изображение является общественным достоянием и получено из Wikimedia Commons
источник
line-height
. Установкаline-height
в желаемое измерение также позволит преодолеть нежелательные пробелы.Другой вариант, предлагаемый здесь, это установка стиля изображения как
style="display: block;"
источник
inline-block
если вы все еще хотите, чтобы он отображался на экране как обычно.inline-block
, похоже, не работает.Быстрая починка:
Чтобы удалить пробел под изображением , вы можете:
vertical-align: bottom;
vertical-align: top;
илиvertical-align: middle;
display:block;
Смотрите следующий код для живой демонстрации:
Показать фрагмент кода
Пояснение: почему под изображением есть пробел?
Пробел или лишний пробел под изображением не ошибка или проблема, это поведение по умолчанию. Основная причина в том, что изображения заменяются элементами ( см. MDN замененные элементы ). Это позволяет им «вести себя как изображение» и иметь свои собственные внутренние размеры, соотношение сторон ...
Браузеры вычисляют свои свойства отображения,
inline
но они придают им особое поведение, которое приближает их кinline-block
элементам (поскольку вы можете выровнять их по вертикали, их высота, верхнее / нижнее поле и отступы, трансформирует ...).Это также означает, что:
Поскольку браузеры по умолчанию вычисляют свойство вертикального выравнивания по базовой линии, это поведение по умолчанию. На следующем рисунке показано расположение базовой линии в тексте:
( Источник изображения )
Выровненные по базовой линии элементы должны сохранять пространство для спусковых устройств, которые простираются ниже базовой линии (как
j, p, g ...
), как вы можете видеть на изображении выше. В этой конфигурации нижняя часть изображения выровнена по базовой линии, как вы можете видеть в этом примере:Вот почему поведение
<img>
тега по умолчанию создает пробел в нижней части его контейнера, и поэтому изменение свойства вертикального выравнивания или свойства отображения удаляет его, как в следующей демонстрации:источник
line-height:0;
но я не считаю это хорошим обходным путем по сравнению с изменением свойств выравнивания по вертикали или отображенияfont-size:0
: они устанавливают размер шрифта на минимальный размер в пользовательских настройках.middle
text-top
sub
super
позиция на картинке не правильная.Можно также обнулить высоту строки родителя:
Все исправления: http://jsfiddle.net/FaPFv/
источник
Все, что вам нужно сделать, это назначить это свойство:
Изображения по умолчанию имеют это свойство:
источник
Вы можете использовать несколько методов для этой проблемы, как
С помощью
line-height
С помощью
display: flex
Используя
display:
block
,table
,flex
иinherit
источник
line-height
взлом или хотя бы проясните, почему это худшее «решение» из всех: в тот момент, когда кто-то помещает текст рядом с изображением (особенно предварительно отформатированный многострочный с тегами BR), они окажутся в худшем положении, чем они начали.Я использовал,
line-height:0
и это прекрасно работает для меня.источник
<BR>
приводит к неправильному позиционированию текста, поэтому, если кто-то также поместит некоторый текст (особенно многострочный, скажем, с ) рядом с изображением, у него будет неправильное расположение, наложение / наложениеЯ нашел, что это прекрасно работает с использованием display: block; на изображении и выравнивание по вертикали: верх; по тексту.
или вы можете редактировать код JS FIDDLE
источник
Я только добавил
float:left
в div, и это сработалоисточник
float:left
причинdisplay:block