Solution rapide:
Pour supprimer l'espace sous l'image , vous pouvez:
- Définissez la propriété d' alignement vertical de l'image sur
vertical-align: bottom;
vertical-align: top;
ouvertical-align: middle;
- Définissez la propriété d'affichage de l'image sur
display:block;
Voir le code suivant pour une démonstration en direct:
#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>
Explication: pourquoi y a-t-il un espace sous l'image?
L'écart ou l'espace supplémentaire sous l'image n'est pas un bug ou un problème, c'est le comportement par défaut. La cause première est que les images sont des éléments remplacés ( voir Éléments remplacés MDN ). Cela leur permet "d'agir comme une image" et d'avoir leurs propres dimensions intrinsèques, rapport hauteur / largeur ....
Les navigateurs calculent leur propriété d'affichage inline
mais ils leur donnent un comportement spécial qui les rapproche des inline-block
éléments (comme vous pouvez les aligner verticalement, donner leur une hauteur, marge haut / bas et rembourrage, transforme ...).
Cela signifie également que:
<img>
n'a pas de ligne de base, donc lorsque les images sont utilisées dans un contexte de mise en forme en ligne avec alignement vertical: ligne de base, le bas de l'image sera placé sur la ligne de base du texte.
( source: MDN , c'est moi qui souligne )
Comme les navigateurs calculent par défaut la propriété d'alignement vertical sur la ligne de base, il s'agit du comportement par défaut. L'image suivante montre l'emplacement de la ligne de base sur le texte:
( Source de l'image )
Les éléments alignés sur la ligne de base doivent garder de l'espace pour les descendants qui s'étendent sous la ligne de base (comme j, p, g ...
) comme vous pouvez le voir dans l'image ci-dessus. Dans cette configuration, le bas de l'image est aligné sur la ligne de base comme vous pouvez le voir dans cet exemple:
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>
C'est pourquoi le comportement par défaut de la <img>
balise crée un espace au bas de son conteneur et pourquoi la modification de la propriété d'alignement vertical ou de la propriété d'affichage le supprime comme dans la démo suivante:
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>