Wie zentriere ich eine SVG in einem Div?


254

Ich habe eine SVG, die ich in einem Div zentrieren möchte. Das div hat eine Breite oder 900px. Das SVG hat eine Breite von 400px. Bei der SVG ist der Rand links und der Rand rechts auf automatisch eingestellt. Funktioniert nicht, es verhält sich nur so, als ob der linke Rand 0 ist (Standard).

Kennt jemand meinen Fehler?

Antworten:


460

SVG ist standardmäßig inline. Fügen Sie display: blockes hinzu und margin: autoes funktioniert dann wie erwartet.


10
Ich bin mir ziemlich sicher, dass dies auch bedeutet, dass Text-Align: Center auf dem übergeordneten Element auch funktioniert (es funktioniert sowieso für mich in Chrome)
Nathan

29

Die obigen Antworten haben bei mir nicht funktioniert. Das Hinzufügen des Attributs preserveAspectRatio="xMidYMin"zum <svg>Tag hat jedoch den Trick getan. Das viewBoxAttribut muss angegeben werden, damit dies ebenfalls funktioniert. Quelle: Mozilla-Entwicklernetzwerk


7
Mein aktueller Ansatz ist Flexbox. .container { display: flex; justify-content: center; }Fügen Sie einfach hinzu: Und fügen Sie die .container-Klasse zu dem div hinzu, das Ihre SVG enthält.
Esger

1
Erwägen Sie, mit diesem neuen Ansatz eine weitere Antwort hinzuzufügen, damit ich sie verbessern kann. Danke für Ihre Hilfe!
Chris Peters

24

Nachdem ich oben gelesen habe, dass svg standardmäßig inline ist, habe ich dem div gerade Folgendes hinzugefügt:

<div style="text-align:center;">

und es hat den Trick für mich getan.

Puristen mögen es vielleicht nicht (es ist ein Bild, kein Text), aber meiner Meinung nach haben HTML und CSS die Zentrierung durcheinander gebracht, daher denke ich, dass es gerechtfertigt ist.


Danke dafür. einfach und effektiv. Ich bin seit Stunden verrückt geworden und habe mit viewPort und viewBox rumgespielt. Das hat den Trick in Sekunden erledigt. Wickeln Sie das dumme Ding einfach in ein Div und zentrieren Sie es.
anon58192932

@ anon58192932 - Gern geschehen. Es ist dumm einfach, aber befriedigend, dass es für andere von Nutzen ist, da ich von so vielen differenzierteren Antworten auf Fragen hier profitiert habe.
David

20

Keine dieser Antworten hat bei mir funktioniert. So habe ich es gemacht.

position: relative;
left: 50%;
-webkit-transform: translateX(-50%);
-ms-transform: translateX(-50%);
transform: translateX(-50%);

3
Ich weiß nicht warum, aber ich musste verwendenleft: 100%
Luís Deschamps Rudge

16

Die obigen Antworten sehen unvollständig aus, da sie nur aus CSS-Sicht sprechen.

Die Positionierung von svg im Ansichtsfenster wird durch zwei svg-Attribute beeinflusst

  1. viewBox: Definiert den Rechteckbereich, den SVG abdecken soll.
  2. erveAspectRatio: Definiert, wo die viewBox im Ansichtsfenster platziert werden soll und wie sie gedehnt werden soll, wenn sich das Ansichtsfenster ändert.

Folgen Sie diesem Link von Codepen für eine detaillierte Beschreibung

<svg viewBox="70 160 800 190" preserveAspectRatio="xMaxYMax meet">


4

Stellen Sie sicher, dass Ihr CSS lautet:

margin: 0 auto;

Obwohl Sie sagen, dass Sie links und rechts auf Auto eingestellt haben, liegt möglicherweise ein Fehler vor. Natürlich würden wir es nicht wissen, weil Sie uns keinen Code gezeigt haben.


3

Sie können dies auch tun:

<center>
<div style="width: 40px; height: 40px;">
    <svg class="sqs-svg-icon--social" viewBox="0 0 64 64">
        <use class="sqs-use--icon" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#twitter-icon">
            <svg id="twitter-icon" viewBox="0 0 64 64" width="100%" height="100%">
                <path
                    d="M48,22.1c-1.2,0.5-2.4,0.9-3.8,1c1.4-0.8,2.4-2.1,2.9-3.6c-1.3,0.8-2.7,1.3-4.2,1.6 C41.7,19.8,40,19,38.2,19c-3.6,0-6.6,2.9-6.6,6.6c0,0.5,0.1,1,0.2,1.5c-5.5-0.3-10.3-2.9-13.5-6.9c-0.6,1-0.9,2.1-0.9,3.3 c0,2.3,1.2,4.3,2.9,5.5c-1.1,0-2.1-0.3-3-0.8c0,0,0,0.1,0,0.1c0,3.2,2.3,5.8,5.3,6.4c-0.6,0.1-1.1,0.2-1.7,0.2c-0.4,0-0.8,0-1.2-0.1 c0.8,2.6,3.3,4.5,6.1,4.6c-2.2,1.8-5.1,2.8-8.2,2.8c-0.5,0-1.1,0-1.6-0.1c2.9,1.9,6.4,2.9,10.1,2.9c12.1,0,18.7-10,18.7-18.7 c0-0.3,0-0.6,0-0.8C46,24.5,47.1,23.4,48,22.1z"
                    />
            </svg>
        </use>
    </svg>
</div>
</center>

2

Fügen Sie Ihren Code dazwischen ein, divwenn Sie Bootstrap verwenden :

  <div class="text-center ">
  <i class="fa fa-twitter" style="font-size:36px "></i>
  <i class="fa fa-pinterest" style="font-size:36px"></i>
  <i class="fa fa-dribbble" style="font-size:36px"></i>
  <i class="fa fa-instagram" style="font-size:36px"></i>
  </div>

2

Flexbox ist ein weiterer Ansatz: add .container { display: flex; justify-content: center; }Und füge die .containerKlasse dem div hinzu, das dein svg enthält.


0

Für mich bestand die Lösung darin, margin: 0 auto;das Element hinzuzufügen , das das enthält <svg>.

So was:

<div style="margin: 0 auto">
   <svg ...</svg>
</div>
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.