Pourquoi dans le code suivant la hauteur du div
est plus grande que la hauteur du img
? Il y a un espace sous l'image, mais il ne semble pas y avoir de remplissage / marge.
Quel est l'espace ou l'espace supplémentaire sous l'image?
#wrapper {
border: 1px solid red;
width:200px;
}
img {
width:200px;
}
<div id="wrapper">
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
Réponses:
Par défaut, une image est rendue en ligne, comme une lettre, de sorte qu'elle se trouve sur la même ligne que a, b, c et d.
Il y a un espace sous cette ligne pour les descendants que vous trouvez sur des lettres comme g, j, p et q.
Vous pouvez:
vertical-align
image pour la positionner ailleurs (par exemple lemiddle
) oudisplay
afin qu'il ne soit pas en ligne.L'image incluse est du domaine public et provient de Wikimedia Commons
la source
line-height
. Le réglageline-height
à la dimension souhaitée permettrait également de surmonter l'espace blanc indésirable.Une autre option suggérée ici consiste à définir le style de l'image comme
style="display: block;"
la source
inline-block
si vous souhaitez qu'il s'affiche en ligne comme le font normalement les images.inline-block
ne semble pas fonctionner.Solution rapide:
Pour supprimer l'espace sous l'image , vous pouvez:
vertical-align: bottom;
vertical-align: top;
ouvertical-align: middle;
display:block;
Voir le code suivant pour une démonstration en direct:
Afficher l'extrait de code
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 desinline-block
éléments (comme vous pouvez les aligner verticalement, donner leur une hauteur, marge haut / bas et rembourrage, transforme ...).Cela signifie également que:
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: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:la source
line-height:0;
mais je ne considère pas cela comme une bonne solution de contournement par rapport à la modification des propriétés d'alignement vertical ou d'affichagefont-size:0
: ils définissent la taille de police sur la taille minimale dans les paramètres utilisateur.middle
text-top
sub
super
position dans l'image n'est pas correcte.On peut également annuler la hauteur de ligne du parent:
Tous les correctifs: http://jsfiddle.net/FaPFv/
la source
Il vous suffit d'attribuer cette propriété:
Les images par défaut ont cette propriété:
la source
Vous pouvez utiliser plusieurs méthodes pour ce problème, comme
En utilisant
line-height
En utilisant
display: flex
En utilisant
display:
block
,table
,flex
etinherit
la source
line-height
hack très bâclé , ou au moins expliquer clairement pourquoi c'est la pire "solution" de toutes: au moment où quelqu'un met du texte à côté de l'image (en particulier plusieurs lignes préformatées avec des balises BR), ils se retrouveront dans une situation pire qu’au départ.J'ai utilisé
line-height:0
et cela fonctionne bien pour moi.la source
<BR>
) à côté de l'image, il y aura un désordre mal placé, superposé / en surplomb.J'ai trouvé que cela fonctionne très bien en utilisant display: block; sur l'image et alignement vertical: haut; sur le texte.
ou vous pouvez modifier le code d'un JS FIDDLE
la source
Je viens d'ajouter
float:left
à div et cela a fonctionnéla source
float:left
causedisplay:block