Soluzione rapida:
Per rimuovere il divario sotto l'immagine , puoi:
- Impostare la proprietà di allineamento verticale dell'immagine su
vertical-align: bottom;
vertical-align: top;
overtical-align: middle;
- Impostare la proprietà di visualizzazione dell'immagine su
display:block;
Vedi il codice seguente per una demo live:
#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>
Spiegazione: perché c'è un gap sotto l'immagine?
Il divario o lo spazio extra sotto l'immagine non è un bug o un problema, è il comportamento predefinito. La causa principale è che le immagini sono elementi sostituiti ( vedere Elementi sostituiti MDN ). Ciò consente loro di "agire come un'immagine" e di avere le proprie dimensioni intrinseche, le proporzioni ....
I browser calcolano le proprietà di visualizzazione inline
ma danno loro un comportamento speciale che li avvicina agli inline-block
elementi (come puoi allinearli verticalmente, dare loro un'altezza, margine superiore / inferiore e imbottitura, trasforma ...).
Questo significa anche che:
<img>
non ha una linea di base, quindi quando le immagini vengono utilizzate in un contesto di formattazione in linea con allineamento verticale: linea di base, la parte inferiore dell'immagine verrà posizionata sulla linea di base del testo.
( fonte: MDN , sottolineatura mia )
Poiché i browser per impostazione predefinita calcolano la proprietà di allineamento verticale sulla linea di base, questo è il comportamento predefinito. L'immagine seguente mostra dove si trova la linea di base sul testo:
( Fonte immagine )
Gli elementi allineati alla linea di base devono mantenere spazio per i discendenti che si estendono al di sotto della linea di base (come j, p, g ...
), come puoi vedere nell'immagine sopra. In questa configurazione, la parte inferiore dell'immagine è allineata sulla linea di base, come puoi vedere in questo esempio:
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>
Questo è il motivo per cui il comportamento predefinito del <img>
tag crea uno spazio nella parte inferiore del suo contenitore e perché la modifica della proprietà di allineamento verticale o della proprietà di visualizzazione lo rimuove come nella seguente demo:
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>