Hier sind einige praktische Informationen, die ich nützlich finde, um SVG viewPort und viewBox zu verstehen (und insbesondere damit zu arbeiten).
SVG verwendet die Begriffe viewPort und viewBox. Die viewBox befindet sich im viewPort. Stellen Sie sich die viewBox als das Bild selbst vor - weil Sie es zoomen und nach links / rechts / oben / unten schieben können - alles innerhalb des viewPort. Der viewPort (das SVG-Tag selbst) ähnelt einem Container, in dem sich das SVG-Bild befindet. Sie können diese Größe auch ändern und sie nach links / rechts / oben / unten verschieben. Das SVG-Tag befindet sich in einem HTML-Container (div, p, beiseite, h3 usw.). Sie können also sehen, warum die Leute viewPort / viewBox als etwas verwirrend empfinden. Stellen Sie sich viewBox als das Bild selbst vor.
Die Attribute width / height im SVG-Tag geben die Größe des viewPort an. Dies ist die Breite / Höhe des Containers, in dem das SVG-Bild angezeigt wird. (Sie können auch x=""
und y=""
Attribute haben, genau wie Sie es im viewBox-Attribut haben.)
In der SVG selbst geben Sie also Breite / Höhe und Start-x-Versatz / Start-y-Versatz an - diese werden als viewPort (auch bekannt als ViewPort-Koordinatensystem) bezeichnet.
Im viewBox-Attribut geben Sie "xy-Breitenhöhe" an - diese werden als viewBox bezeichnet (auch bekannt als Local Coord System LCS)
<svg x="0" y="0" width="500" height="300"
viewBox="start_x start_y width height" >
...path fill d etc...
</svg>
Wichtiges Konzept Nr. 1: Die Breite / Höhe des viewPort (diejenigen, die sich auf dem SVG-Tag selbst befinden, als width = "" und height = "") geben die Größe des Containers an, in dem das SVG-Bild angezeigt wird. Normalerweise oder wenn weggelassen, ist dies die exakte Größe des SVG-Bildes selbst (oder ein kleines bisschen größer als dieses).
Superwichtiges Konzept Nr. 2: Die Breite / Höhe der viewBox steht in direktem Zusammenhang mit der Breite / Höhe des viewPort. Wenn der viewPort 300 x 500 ist, wird das Bild selbst im viewPort kleiner (zoomt heraus) , wenn die viewBox W / H- Zahlen größer als 300 x 500 werden. Wenn die viewBox w / h jedoch kleiner als 300 x 500 wird, wird das Bild selbst im viewPort größer. Dieses Wachstum ist rechts und unten. Wenn Sie also das vergrößerte Bild im jetzt zu kleinen viewPort verschieben müssen, verwenden Sie die X / Y- Werte der viewBox.
viewBox x / y - Schiebt die SVG-Datei im viewPort nach rechts / unten
viewBox width / height - Wenn die Vergrößerung größer als die Breite / Höhe des SVG-Tags ist, wird das Bild im viewPort nach außen gezoomt. Das SVG wird im Ansichtsfenster nach rechts / unten verkleinert. Verringern Sie die Anzahl unter den SVG-Attributen für Breite / Höhe: Das Bild wächst im Ansichtsfenster, bis Teile des Bilds rechts / unten von der rechten Seite / Unterseite des Ansichtsports abgeschnitten werden. * (dh wenn die Breiten- / Höhenzahlen im viewBox-Attribut kleiner als die width / height-Attribute im SVG sind, wird das Bild im viewPort vergrößert. Wenn es größer ist, wird das Bild mit dem viewPort vergrößert (verkleinert).
viewPort x / y == schiebt das Ansichtsfenster selbst innerhalb seines HTML-Containers nach rechts / unten. viewPort width / height - Ändert die Größe des gesamten viewPort und vergrößert möglicherweise den HTML-Container (div / p / etc). Vergrößert den viewPort grundsätzlich, indem er nach rechts / unten vergrößert wird.
Anmerkungen:
a. Wenn Sie das ViewBox-Attribut nicht in die SVG-Datei aufnehmen, entspricht die Größe der viewBox der Größe des viewPort (nimmt 100% des viewPort ein).
B. Wenn die viewBox beginnt 0,0
und dieselbe Breite / Höhe wie die SVG-Breite / Höhe (dh der viewPort) hat, ändert sich nichts. Entspricht dem Fehlen eines Viewbox-Attributs.
c. Wenn Sie einen viewPort in der Größe eines Kartenspiels haben, das SVG-Bild jedoch die Größe einer Müslischachtel hat, wird durch Erhöhen der viewBox-Zahlen "xy ..." das Müslischachtelbild im viewPort nach oben / links verschoben, wobei ein anderes angezeigt wird Teil des Müslischachtelbildes. Dies wäre nützlich bei Sprites
d.(Normalerweise (immer!) Befindet sich das SVG-Element auch in einem HTML-Container - einem div, p, section, li, was auch immer. Wir haben dies nicht besprochen, aber denken Sie daran. Wenn Ihr Bild abgeschnitten wird, dann entweder die viewBox ist größer als der viewPort -OR- das HTML-Containerelement (div usw.) ist kleiner als der viewPort)
Hier sind zwei (ausgezeichnete!) Kurzvideos, auf die uns der Autor dieser Antwort in demselben Thread verwiesen hat :
2min Videodemo 5min
Videodemo (gleicher Typ, viel besser)