Koordinatensystem
SVG hat zwei Koordinatensysteme: das Fensterkoordinatensystem und das Benutzerkoordinatensystem. Standardmäßig stehen die Punkte im Benutzerkoordinatensystem und im Koordinatensystem des Ansichtsfensters in einer Eins-zu-Eins-Entsprechung, wobei der Ursprung in der oberen linken Ecke des Ansichtsfensters liegt, die x-Achse horizontal nach rechts verläuft und die y-Achse verläuft -Achse vertikal nach unten; wie in der Abbildung unten gezeigt:
Die Fensterposition von SVG wird im Allgemeinen durch CSS angegeben und die Größe wird durch die Breiten- und Höhenattribute des SVG-Elements festgelegt. Wenn das SVG jedoch in einem eingebetteten Objekt (z. B. einem Objektelement oder einem anderen) gespeichert ist SVG-Element) und das Dokument, das die SVG-Datei enthält, mit CSS oder XSL formatiert ist und CSS oder andere angegebene Größenwerte dieser umgebenden Objekte bereits die Größe des Ansichtsfensters berechnen können, wird die Größe des umgebenden Objekts verwendet diesmal.
Hier müssen wir zwischen den Konzepten Fenster, Fensterkoordinatensystem und Benutzerkoordinatensystem unterscheiden:
Fenster: bezieht sich auf den sichtbaren rechteckigen Bereich auf der Webseite. Die Länge und Breite hängt im Allgemeinen von der Größe der umgebenden Objekte ab.
Koordinatensystem des Ansichtsfensters: Es handelt sich im Wesentlichen um ein Koordinatensystem mit einem Ursprung, einer x-Achse und einer y-Achse, das sich unendlich in zwei Richtungen erstreckt. Standardmäßig liegt der Ursprung in der oberen linken Ecke des Ansichtsfensters, die x-Achse verläuft horizontal nach rechts und die y-Achse verläuft vertikal nach unten. Punkte in diesem Koordinatensystem können transformiert werden.
Benutzerkoordinatensystem : Es handelt sich im Wesentlichen um ein Koordinatensystem mit einem Ursprung, einer x-Achse und einer y-Achse, das sich unendlich in zwei Richtungen erstreckt. Standardmäßig liegt der Ursprung in der oberen linken Ecke des Ansichtsfensters, die x-Achse verläuft horizontal nach rechts und die y-Achse verläuft vertikal nach unten. Punkte in diesem Koordinatensystem können transformiert werden.
Standardmäßig stimmt das Fensterkoordinatensystem mit dem Benutzerkoordinatensystem überein, es ist jedoch zu beachten, dass das Fensterkoordinatensystem zu dem Element gehört, das das Fenster erstellt. Nachdem das Fensterkoordinatensystem bestimmt wurde, wird der Koordinatenton des Das gesamte Fenster wird bestimmt. Das Benutzerkoordinatensystem gehört jedoch zu jedem Grafikelement. Solange die Grafik einer Koordinatentransformation unterzogen wird, wird ein neues Benutzerkoordinatensystem erstellt. Alle Koordinaten und Abmessungen in diesem Element verwenden dieses neue Benutzerkoordinatensystem.
Um es einfach auszudrücken: Das Fensterkoordinatensystem beschreibt das anfängliche Koordinatenprofil aller Elemente im Fenster, und das Benutzerkoordinatensystem beschreibt das Koordinatenprofil jedes Elements. Standardmäßig verwenden alle Elemente das Standardkoordinatensystem, das mit übereinstimmt das Fensterkoordinatensystem.
Koordinatenraumtransformation
Lassen Sie uns die Transformation der Leinwand-Benutzerkoordinaten überprüfen. Sie werden durch Übersetzungs-, Skalierungs- und Rotationsfunktionen implementiert Grafiken funktionieren, sofern sie nicht erneut transformiert werden, was dem Konzept des „aktuellen“ Benutzerkoordinatensystems entspricht. Canvas hat nur ein Benutzerkoordinatensystem.
In SVG ist die Situation völlig anders. SVG selbst ist ein Vektorgrafikelement, und seine beiden Koordinatensysteme können im Wesentlichen als „Benutzerkoordinatensysteme“ gezählt werden. Beide Koordinatenräume von SVG können transformiert werden: Fensterraumtransformation und Benutzerraumtransformation. Die Transformation des Fensterbereichs wird durch das viewBox-Attribut der relevanten Elemente gesteuert (diese Elemente erstellen neue Fenster); die Transformation des Benutzerbereichs wird durch das Transformationsattribut des Grafikelements gesteuert. Ansichtsraumtransformationen werden auf das entsprechende gesamte Ansichtsfenster angewendet, und Benutzerraumtransformationen werden auf das aktuelle Element und seine Unterelemente angewendet.
Ansichtsfenstertransformation – viewBox-Eigenschaft
Alle Elemente, die ein Fenster erstellen können (siehe nächster Abschnitt), sowie Markierungs-, Muster- und Ansichtselemente verfügen über ein viewBox-Attribut.
Das Format des viewBox-Attributwerts ist (x0, y0, u_width, u_height). Jeder Wert wird durch Kommas oder Leerzeichen getrennt. Zusammen bestimmen sie den vom Fenster angezeigten Bereich: die Koordinaten der oberen linken Ecke des Fensters sind auf (x0, y0) eingestellt, die Breite des Fensters ist auf u_width eingestellt und die Höhe ist u_height; diese Transformation wirkt sich auf das gesamte Fenster aus.
Lassen Sie sich hier nicht verwirren: Die Größe und Position des Fensters werden durch das Element bestimmt, das das Fenster erstellt, und die umgebenden Elemente (z. B. wird das Fenster, das durch das äußerste SVG-Element erstellt wird, durch CSS bestimmt). , Breite und Höhe), hier Die viewBox legt tatsächlich fest, welcher Teil des Ansichtsfenster-Koordinatensystems in diesem bestimmten Bereich angezeigt werden kann.
Die Einstellung von viewBox umfasst tatsächlich zwei Transformationen: Skalierung und Übersetzung des Ansichtsfensterbereichs.
Die Berechnung der Transformation ist ebenfalls sehr einfach: Nehmen Sie als Beispiel das Ansichtsfenster des äußersten SVG-Elements und gehen Sie davon aus, dass die Breite und Länge des SVG auf width, height und die viewBox auf (x0) eingestellt sind , y0, u_width, u_height). Dann sind die Skalierungsverhältnisse der Breite und Höhe der gezeichneten Grafiken: width/u_width bzw. height/u_height. Die Koordinaten der oberen linken Ecke des Fensters werden auf (x0,y0) gesetzt.
Erleben Sie den Unterschied in den Ergebnissen, die mit den folgenden Codes erzielt werden:
Bei der täglichen Arbeit besteht eine der Aufgaben, die wir häufig erledigen müssen, darin, eine Gruppe von Grafiken so zu skalieren, dass sie in den übergeordneten Container passt. Wir können dieses Ziel erreichen, indem wir das viewBox-Attribut festlegen.
Elemente, die neue Fenster erstellen
Wir können Fenster jederzeit verschachteln. Wenn ein neues Fenster erstellt wird, werden auch ein neues Fensterkoordinatensystem und ein Benutzerkoordinatensystem erstellt. Natürlich werden auch neue Beschneidungspfade erstellt. Im Folgenden finden Sie eine Liste von Elementen, die neue Fenster erstellen können:
svg: SVG unterstützt die Verschachtelung.
Symbol: Erstellt ein neues Fenster, wenn es durch das use-Element instanziiert wird.
Bild: Beim Verweis auf das SVG-Element wird ein neues Fenster erstellt.
foreignObject: Erstellen Sie ein neues Fenster, um die darin enthaltenen Objekte darzustellen.
Zoomverhältnis beibehalten – AspectRatio-Attribut beibehalten
Manchmal, insbesondere bei Verwendung von viewBox, erwarten wir, dass die Grafiken das gesamte Ansichtsfenster einnehmen, anstatt in beide Richtungen zu drücken Skalierung. Manchmal möchten wir, dass die Grafiken in beiden Richtungen in einem festen Verhältnis skaliert werden. Sie können dies mit dem Attribut „preserveAspectRatio“ steuern.
Dieses Attribut ist für alle Elemente verfügbar, die ein neues Fenster erstellen können, sowie für Bild-, Markierungs-, Muster- und Ansichtselemente. Und das Attribut „preserveAspectRatio“ wird erst wirksam, nachdem die „viewBox“ für das Element festgelegt wurde. Wenn die viewBox nicht festgelegt ist, wird das Attribut „preserveAspectRatio“ ignoriert.
Die Syntax des Attributs lautet wie folgt: preserveAspectRatio="[defer]
defer: Optionaler Parameter, nur gültig für Bildelemente. Wenn der Wert des Attributs „preserveAspectRatio“ im Bildelement mit „defer“ beginnt, bedeutet dies, dass das Bildelement das Skalierungsverhältnis des referenzierten Elements verwendet Bild, wenn darauf verwiesen wird. Wenn das Bild keine Skalierung hat, wird „defer“ ignoriert. Alle anderen Elemente ignorieren diese Zeichenfolge.
align: Dieser Parameter bestimmt die Ausrichtung der einheitlichen Skalierung und kann die folgenden Werte annehmen:
none – erzwingt keine einheitliche Skalierung, sodass die Grafiken das gesamte Ansichtsfenster vollständig ausfüllen können.
xMinYMin – Erzwingt eine einheitliche Skalierung und richtet die in der ViewBox festgelegten Werte für
xMidYMin – Erzwingt eine gleichmäßige Skalierung und richtet den Mittelpunkt in X-Richtung der vivowBox am Mittelpunkt der X-Richtung im Ansichtsfenster aus. Kurz gesagt, der Mittelpunkt in X-Richtung ist gleich wie oben.
xMaxYMin – Erzwingt eine einheitliche Skalierung und richtet den in der ViewBox festgelegten Wert von
Ähnlich wie bei anderen Wertetypen: xMinYMid, xMidYMid, xMaxYMid, xMinYMax, xMidYMax, xMaxYMax. Die Bedeutung dieser Kombinationen ist ähnlich wie oben.
meetOrSlice: optionaler Parameter, Sie können die folgenden Werte festlegen:
meet – der Standardwert, skaliert die Grafiken einheitlich, sodass alle Grafiken im Ansichtsfenster angezeigt werden.
Slice – Skalieren Sie die Grafiken gleichmäßig, sodass die Grafiken das Ansichtsfenster ausfüllen und die überschüssigen Teile abgeschnitten werden.
Das folgende Bild verdeutlicht die Wirkung verschiedener Füllungen:
Transformation des Benutzerkoordinatensystems – Transformationsattribut
Diese Art der Transformation wird durch Festlegen des Transformationsattributs des Elements angegeben. Hierbei ist zu beachten, dass die Transformation des durch das Transformationsattribut festgelegten Elements nur das Element und seine Unterelemente betrifft und nichts mit anderen Elementen zu tun hat und sich nicht auf andere Elemente auswirkt.
Übersetzung – Übersetzen
Übersetzungstransformation übersetzt den relevanten Koordinatenwert in die angegebene Position. Diese Transformation erfordert die Übergabe des Übersetzungsbetrags auf beiden Achsen. Schauen Sie sich das Beispiel an:
Rotation – Drehen
Das Drehen eines Elements ist ebenfalls eine sehr häufige Aufgabe. Wir können die Rotationstransformation verwenden, um sie zu implementieren, was die Übergabe des Winkelparameters erfordert Drehung. Schauen Sie sich das Beispiel an:
skew - skew
Transformation unterstützt auch die Neigungstransformation, die entlang der x-Achse erfolgen kann (nach links und rechts neigen, ein positiver Winkel wird nach rechts geneigt, die tatsächlich die y-Achse kippt) oder eine Neigung entlang der y-Achse (nach oben und unten kippen, ein positiver Winkel bedeutet eine nach unten gerichtete Neigung, die tatsächlich die x-Achse kippt); diese Transformation erfordert die Übergabe eines Winkelparameters, der den Winkel von bestimmt Neigung. Schauen Sie sich das Beispiel unten an:
Skalierung - Skalierung
Das Skalierungsobjekt wird durch die Skalierungstransformation vervollständigt, die zwei Parameter akzeptiert und die horizontalen bzw. vertikalen Skalierungsverhältnisse angibt Werden Parameter weggelassen, nimmt er denselben Wert wie der erste Parameter an. Schauen Sie sich das Beispiel unten an:
Übersetzungstransformation [1 0 1 0 tx ty]:
Transformationskette
Das Transformationsattribut unterstützt das Festlegen mehrerer Transformationen. Diese Transformationen müssen nur durch Leerzeichen getrennt und dann zusammen im Attribut platziert werden. Der Ausführungseffekt ist derselbe wie die unabhängige Ausführung dieser Transformationen nacheinander.
Werte ohne Einheiten gelten als „Benutzereinheiten“, bei denen es sich um die Einheitenwerte des aktuellen Benutzerkoordinatensystems handelt.
Mit Einheiten
Die relevanten Einheiten in SVG sind die gleichen wie in CSS: em, ex, px, pt, pc, cm, mm und in. Sie können für die Länge auch „%“ verwenden.
Relative Maßeinheiten: em und ex sind die gleichen wie in CSS, sie sind relativ zur Schriftgröße und x-Höhe der aktuellen Schriftart.
Absolute Maßeinheit: Ein px entspricht einer „Benutzereinheit“, d. h. „5px“ und „5“ sind gleich. Ob ein px jedoch einem Pixel entspricht, hängt davon ab, ob eine Transformation durchgeführt wurde.
Die anderen Einheiten sind grundsätzlich Vielfache von px: 1pt=1,25px, 1pc=15px, 1mm=3,543307px, 1cm=35,43307px, 1in=90px.
Wenn für die Breite und Höhe des äußersten SVG-Elements keine Einheit angegeben ist (d. h. „Benutzereinheit“), werden diese Werte als in px betrachtet.
Dieser Artikel ist etwas verwirrend. Denken Sie daran, dass „die Koordinaten und die Länge der Grafikelemente sich auf die Koordinaten und die Länge des neuen Benutzerkoordinatensystems nach der doppelten Transformation des Fensterkoordinatensystems beziehen.“ Transformation des Benutzerkoordinatensystems.“ Das ist es.
Praktische Referenz:
Skriptindex: http://msdn.microsoft.com/zh-cn/library/ff971910(v=vs.85).aspx
Entwicklungszentrum: https://developer.mozilla.org/en/SVG
Beliebte Referenz: http://www.chinasvg.com/
Offizielle Dokumentation: http://www.w3.org/TR/SVG11/