Быстрая починка:
Чтобы удалить пробел под изображением , вы можете:
- Установите для свойства вертикального выравнивания изображения значение
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 замененные элементы ). Это позволяет им «вести себя как изображение» и иметь свои собственные внутренние размеры, соотношение сторон ...
Браузеры вычисляют свои свойства отображения, inline
но они придают им особое поведение, которое приближает их к inline-block
элементам (поскольку вы можете выровнять их по вертикали, их высота, верхнее / нижнее поле и отступы, трансформирует ...).
Это также означает, что:
<img>
не имеет базовой линии, поэтому, когда изображения используются в контексте встроенного форматирования с вертикальным выравниванием: базовая линия, нижняя часть изображения будет размещена на базовой линии текста.
( источник: MDN , выделено мое )
Поскольку браузеры по умолчанию вычисляют свойство вертикального выравнивания по базовой линии, это поведение по умолчанию. На следующем рисунке показано расположение базовой линии в тексте:
( Источник изображения )
Выровненные по базовой линии элементы должны сохранять пространство для спусковых устройств, которые простираются ниже базовой линии (как j, p, g ...
), как вы можете видеть на изображении выше. В этой конфигурации нижняя часть изображения выровнена по базовой линии, как вы можете видеть в этом примере:
div{border:1px solid red;font-size:30px;}
img{width:100px;height:auto;}
<div>
<img src="http://i.imgur.com/RECDV24.jpg" />jpq are letters with descender
</div>
Вот почему поведение <img>
тега по умолчанию создает пробел в нижней части его контейнера, и поэтому изменение свойства вертикального выравнивания или свойства отображения удаляет его, как в следующей демонстрации:
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>