Быстрое исправление:
Чтобы удалить пробел под изображением , вы можете:
- Установить свойство вертикальное выравнивание изображения
vertical-align: bottom;
vertical-align: top;
или vertical-align: middle;
- Установите для свойства отображения изображения значение
display:block;
См. следующий код для демонстрации в реальном времени:
#vAlign img {
vertical-align :bottom;
}
#block img{
display:block;
}
div {border: 1px solid red;width:100px;}
img {width:100px;}
<p>No fix:</p>
<div><img src="http://i.imgur.com/RECDV24.jpg" /></div>
<p>With vertical-align:bottom; on image:</p>
<div id="vAlign"><img src="http://i.imgur.com/RECDV24.jpg" /></div>
<p>With display:block; on image:</p>
<div id="block"><img src="http://i.imgur.com/RECDV24.jpg" /></div>
Объяснение: почему под изображением имеется пробел?
Пробел или дополнительное пространство под изображением неошибка или проблема, это поведение по умолчанию.Основная причина заключается в том, что изображения заменяются элементами ( см. MDN и W3C ).Это позволяет им «вести себя как изображение» и иметь свои собственные внутренние размеры, соотношение сторон ...
Браузеры вычисляют свои свойства отображения до inline
, но они придают им особое поведение, которое делает их ближе к inline-block
элементам(поскольку вы можете выровнять их по вертикали, задайте им высоту, верхнее / нижнее поле и отступы, преобразуйте ...).
Это также означает, что:
[...] когда изображения используются в контексте встроенного форматирования с вертикальным выравниванием: базовая линия, нижняя часть изображения будет размещена на базовой линии контейнера .( источник: MDN , выделение мое )
Поскольку браузеры по умолчанию вычисляют свойство вертикального выравнивания по базовой линии, это поведение по умолчанию.На следующем рисунке показано расположение базовой линии в тексте:
![Location of the baseline on text](https://i.stack.imgur.com/Ousrm.gif)
Элементам, выровненным по базовой линии, необходимо оставить место для спусковых механизмов , которые простираются ниже базовой линии (например,j, p, g ...
), как вы можете видеть на изображении выше.В этой конфигурации нижняя часть изображения выровнена по базовой линии , как вы можете видеть в этом примере:
div{border:1px solid red;}
img{width:100px;height:auto;}
<div>
<img src="http://i.imgur.com/RECDV24.jpg" />jpq are letters with descender
</div>
Вот почему поведение тега <img>
по умолчанию создает пробел в нижней части его контейнера и почему изменяется свойство вертикального выравниванияили свойство display удаляет его, как в следующей демонстрации:
div {width: 100px;border: 1px solid red;}
img {width: 100px;height: auto;}
.block img{
display:block;
}
.bottom img{
vertical-align:bottom;
}
<p>Default:</p>
<div>
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
<p>With display:block;</p>
<div class="block">
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
<p>With vertical-align:bottom;</p>
<div class="bottom">
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>