Conserto rápido:
Para remover o espaço abaixo da imagem , você pode:
- Defina a propriedade de alinhamento vertical da imagem como
vertical-align: bottom;
vertical-align: top;
ouvertical-align: middle;
- Defina a propriedade de exibição da imagem como
display:block;
Veja o código a seguir para uma demonstração ao vivo:
#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>
Explicação: por que há uma lacuna na imagem?
A lacuna ou espaço extra sob a imagem não é um bug ou problema, é o comportamento padrão. A causa principal é que as imagens são elementos substituídos ( consulte Elementos substituídos pelo MDN ). Isso permite que eles "ajam como imagem" e tenham suas próprias dimensões intrínsecas, relação de aspecto ...
Os navegadores calculam suas propriedades de exibição, inline
mas fornecem um comportamento especial que os aproxima.inline-block
elementos (como você pode alinhar verticais los, dar uma altura, margem superior / inferior e estofamento, transforma ...).
Isso também significa que:
<img>
não possui linha de base; portanto, quando as imagens são usadas em um contexto de formatação em linha com alinhamento vertical: linha de base, a parte inferior da imagem será colocada na linha de base do texto.
( fonte: MDN , ênfase minha )
Como os navegadores, por padrão, calculam a propriedade de alinhamento vertical para a linha de base, esse é o comportamento padrão. A imagem a seguir mostra onde a linha de base está localizada no texto:
( Fonte da imagem )
Os elementos alinhados da linha de base precisam manter espaço para os descendentes que se estendem abaixo da linha de base (como j, p, g ...
), como você pode ver na imagem acima. Nesta configuração, a parte inferior da imagem está alinhada na linha de base, como você pode ver neste exemplo:
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>
É por isso que o comportamento padrão da <img>
tag cria uma lacuna na parte inferior do contêiner e por que alterar a propriedade vertical-align ou a propriedade display remove-a como na seguinte demonstração:
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>