726 Stimmen

Bild in div hat zusätzlichen Platz unter dem Bild

Warum im folgender Code die Höhe des div größer ist als die Höhe der img ? Unter dem Bild ist eine Lücke, aber es scheint sich nicht um einen Abstand/Rand zu handeln.

Was ist die Lücke oder der zusätzliche Platz unter dem Bild?

#wrapper {
  border: 1px solid red;
  width:200px;
}
img {
  width:200px;
}

<div id="wrapper">
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>

Image with a gap or white space under it

7 Stimmen

Hier ist eine gute Lektüre zu diesem Thema: Die seltsame <img>-Lücke in HTML

882voto

Quentin Punkte 850700

Standardmäßig wird ein Bild inline gerendert, wie ein Buchstabe, so dass es auf der gleichen Zeile wie a, b, c und d steht.

Unterhalb dieser Zeile ist Platz für die Unterlängen die Sie bei Buchstaben wie g, j, p und q finden.

Demonstration of descenders

Sie können:


Das enthaltene Bild ist gemeinfrei und bezogen aus Wikimedia Commons

16 Stimmen

Um genauer zu sein, geschieht dies, weil Inline-Elemente den Platz ihrer aktuellen Position einnehmen. line-height . Einstellung line-height auf das gewünschte Maß würde auch den unerwünschten Leerraum beseitigen.

3 Stimmen

Gilt "f" als Unterlänge?

3 Stimmen

@j08691 - Das hängt von der Schriftart ab.

167voto

Thea Punkte 7764

Eine weitere in diesem Bericht vorgeschlagene Option Blog-Beitrag wird der Stil des Bildes wie folgt festgelegt style="display: block;"

5 Stimmen

Danke. Damit wurde auch ein ähnliches Problem mit dem Platz unter einem Flash-Film behoben. (display:block zu embed/object-Tags hinzugefügt)

5 Stimmen

O inline-block wenn Sie trotzdem wollen, dass es inline angezeigt wird, wie es bei Bildern üblich ist.

13 Stimmen

@Ian @Imperativ inline-block scheint nicht zu funktionieren.

143voto

web-tiki Punkte 91831

Schnelle Lösung:

An Entfernen Sie die Lücke unter dem Bild können Sie:

  • Setzen Sie die vertikal ausrichten Eigenschaft des Bildes auf vertical-align: bottom; vertical-align: top; o vertical-align: middle;
  • Setzen Sie die Anzeigeeigenschaft des Bildes auf display:block;

Im folgenden Code finden Sie eine Live-Demo:

#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>

Erläuterung: Warum befindet sich unter dem Bild eine Lücke?

Die Lücke oder der zusätzliche Platz unter dem Bild ist kein Fehler oder Problem, sondern das Standardverhalten. Die eigentliche Ursache ist, dass Bilder durch Elemente ersetzt werden ( _siehe MDN ersetzte Elemente_ ). Dadurch können sie sich "wie ein Bild" verhalten und haben ihre eigenen Abmessungen, ihr eigenes Seitenverhältnis....
Die Browser berechnen ihre Anzeigeeigenschaft nach inline aber sie verleihen ihnen ein besonderes Verhalten, das sie näher an inline-block Elemente (Sie können sie vertikal ausrichten, ihnen eine Höhe, einen oberen/unteren Rand und eine Auffüllung geben, sie transformieren ...).

Das bedeutet auch, dass:

<img> hat keine Grundlinie, wenn also Bilder in einer Inline-Formatierung verwendet werden Kontext mit vertical-align: baseline, der untere Teil des Bildes wird auf der Textgrundlinie platziert.
( _Quelle: MDN , Hervorhebung von mir_ )

Da die Browser die Eigenschaft vertical-align standardmäßig an der Grundlinie ausrichten, ist dies das Standardverhalten. Die folgende Abbildung zeigt, wo sich die Grundlinie im Text befindet:

Location of the baseline on text ( Bildquelle )

An der Grundlinie ausgerichtete Elemente müssen Platz lassen für die Unterlängen die unter die Grundlinie reichen (wie j, p, g ... ), wie Sie auf dem obigen Bild sehen können. In dieser Konfiguration, der untere Teil des Bildes wird an der Grundlinie ausgerichtet wie Sie in diesem Beispiel sehen können:

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>

Aus diesem Grund ist das Standardverhalten der <img> Tag eine Lücke am unteren Rand seines Containers erzeugt und warum das Ändern der Eigenschaft vertical-align oder der Eigenschaft display diese Lücke beseitigt, wie in der folgenden Demo zu sehen ist:

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>

0 Stimmen

Das ist der Grund, warum die Einstellung der Schriftgröße auf 0 nicht funktioniert, oder doch?

2 Stimmen

@Persijn es tut. Wie Einstellung line-height:0; aber ich halte dies nicht für eine gute Abhilfe im Vergleich zur Änderung der vertikalen Ausrichtung oder der Anzeigeeigenschaften

3 Stimmen

Beachten Sie jedoch, dass einige Browser die font-size:0 : Sie setzen die Schriftgröße in den Benutzereinstellungen auf die Mindestgröße.

53voto

Pavlo Punkte 39882

Man kann auch die Zeilenhöhe der Eltern aufheben:

#wrapper {
  line-height: 0;
}

Alle Korrekturen: http://jsfiddle.net/FaPFv/

8 Stimmen

WARNUNG! Dies wird auch töten alle Text-Knoten in der #wrapper. wie es vererbt werden. Aber Bonuspunkte für diese awesome fiddler! hier ist es mit Text-Knoten aktualisiert. jsfiddle.net/FaPFv/30

1 Stimmen

Alternativ: font-size:0

0 Stimmen

@mfluehr Bitte kopieren Sie keine substanziellen Inhalte von JSFIddle auf Stack Overflow für den Code von jemand anderem. JSFiddle veröffentlicht keine Lizenz und Sie haben nicht das Recht, den Code von jemand anderem auf Stack Overflow zu veröffentlichen, der seine Inhalte unter CC By-SA 4.0 lizenziert.

15voto

Daniel Díaz Punkte 218

Sie müssen diese Eigenschaft nur noch zuweisen:

img {
    display: block;
}

Die Bilder haben standardmäßig diese Eigenschaft:

img {
    display: inline;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X