So entfernen Sie zusätzlichen Speicherplatz unter svg im div-Element


87

Hier ist eine Illustration des Problems (getestet in Firefox und Chrome):

<div style="background-color: red;"><svg height="100px" width="100" style="background-color: blue;"></svg></div>

Ansicht auf JSFiddle

Beachten Sie den zusätzlichen redPlatz im unteren Bereich divunter dem Blau svg.

Bereits versucht zu setzen paddingund marginvon beiden Elementen zu 0, aber ohne Glück.


Scheint mit einem ähnlichen Problem mit Bildern in Zusammenhang zu stehen, z . B. stackoverflow.com/questions/7774814/… .
Daniel

Antworten:


173

Sie brauchen display: block;auf Ihrem svg.

<svg style="display: block;"></svg>

Dies liegt daran, dass Inline-Block-Elemente (wie <svg>und <img>) auf der Textgrundlinie sitzen. Der zusätzliche Platz, den Sie sehen, ist der Platz, der übrig bleibt, um Zeichen-Nachkommen aufzunehmen (der Schwanz auf 'y', 'g' usw.).

Sie können auch verwenden, vertical-align:topwenn Sie es behalten müssen inlineoderinline-block


Tolle. Fügen alle Inline-Elemente unten Leerzeichen hinzu?
Clapas

2
Die Erklärung ist, dass inline-blockElemente (wie <svg>und <img>) auf der Textgrundlinie sitzen. Der zusätzliche Platz, den Sie sehen, ist der Platz, der übrig bleibt, um Zeichen-Nachkommen aufzunehmen (der Schwanz auf 'y', 'g' usw.).
Paul LeBeau

1
Ich würde es vorziehenvertical-align:top
John Xiao

Ich war überzeugt, dass der zusätzliche Platz etwas damit zu tun hatte line-height, aber das Einstellen line-height: 0des SVG und / oder seines Containers machte keinen Unterschied. Nur display: blockgelöst. Dies ist so ein Problem, wenn Sie zufällig an einer großen SVG arbeiten, weil Sie es nie als Inline betrachten würden. Wenn Sie jedoch ein kleines Symbol haben, ist dies sinnvoll.
Devuxer

display: blocknicht für mich arbeiten, aber vertical-aligntat
Jay

12

svgist ein inlineElement. inlineElemente verlassen Leerraum.

Lösung:

In display:blockzu svg, oder Make Höhe von Eltern div gleiche wie svg.

DEMO hier.



3

Ändern Sie die displayEigenschaft des SVG in block.


1

Versuchen Sie , height:100pxzu divund mit einem height="100%"auf svg:

<div style="background-color:red;height:100px">
    <svg height="100%" width="100" style="background-color:blue;"></svg>
</div>

4
Vielen Dank für Ihren Kommentar. Dies funktioniert gut, wird aber schwierig, wenn man die Höhe des nicht kenntsvg im Voraus .
Daniel

1

Fügen Sie einfach dem Hauptteil div Höhe hinzu

<div style="background-color: red;height:100px"><svg height="100px" width="100" style="background-color: blue;"></svg></div>

0

Ändern Sie Ihren Stil in

style = "Hintergrundfarbe: rot; Zeilenhöhe: 0;"

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.