Ich habe ein SVG-Dokument und möchte ein externes SVG-Bild darin einfügen, z. B.:
<object data="logo.svgz" width="100" height="100" x="200" y="400"/>
("Objekt" ist nur ein Beispiel - das äußere Dokument ist SVG und nicht xhtml).
Irgendwelche Ideen? Ist das überhaupt möglich? Oder ist es für mich das Beste, einfach die Datei logo.svg xml in mein äußeres SVG-Dokument zu schreiben?
<image>
in SVG (oder<img>
oder<embed>
in HTML) auf eine SVG-Datei verweisen, erhalten Sie keinen Zugriff auf das zugrunde liegende DOM. Nein, Sie können keine Elemente innerhalb eines SVG-Elements formatieren, auf das von verwiesen wurde<image>
.<image xlink:href="data:image/svg+xml;utf8,<svg …>… </svg>" />
. (Wenn Sie JavaScript verwenden, um dashref
Attribut<
xlink:href
ist veraltet , jetzt sollten Sie nur verwendenhref
. Könnten Sie Ihre Antwort aktualisieren, um dies einzuschließen?Oder Sie können das untergeordnete SVG wie folgt in das übergeordnete SVG einbetten:
Demo:
http://hitokun-s.github.io/old/demo/path-between-two-svg.html
quelle
Es ist erwähnenswert, dass beim Einbetten von SVGs in eine andere SVG mit:
dann nimmt das eingebettete SVG eine rechteckige Form mit vorgegebenen Abmessungen an.
Das heißt, wenn Ihr eingebettetes SVG ein Kreis oder eine andere Form als ein Quadrat ist, wird es zu einem Quadrat mit Transparenz. Daher werden Mausereignisse in diesem eingebetteten Quadrat eingeschlossen und erreichen die übergeordnete SVG nicht. Achten Sie darauf.
Ein besserer Ansatz ist die Verwendung eines Musters. Um eine Form zu füllen, entweder einen Kreis, ein Quadrat oder sogar einen Pfad.
Verwenden Sie dann das Muster wie folgt:
Jetzt bleiben Ihre Mausereignisse nicht mehr in transparenten Bildquadraten hängen!
quelle
Ich fand heraus, dass die Verwendung des
<image>
Tags ein Rendering der eingebetteten Datei von geringer Qualität ergab. Die folgende Technik hat jedoch funktioniert (um eine SVG-Datei in eine SVG-Datei einzubetten - nicht unbedingt zum Rendern auf einer HTML-Seite):Bearbeiten Sie die SVG-Datei in einem Texteditor.
Finden Sie das Ende der Metadaten:
Fügen Sie diese Zeile nach diesem Gruppen-Tag ein:
In diesem Fall fügen wir OTHERFILE.svg in die Datei ein und die gesamte Ebene1 (die erste und die Standardebene).
Speichern Sie diese und öffnen Sie die Datei in Inkscape.
Diese Technik ist nützlich, um auf jeder Seite einen Standardhintergrund oder ein Standardlogo zu haben. Wenn Sie es zuerst in die Datei einfügen, wird es zuerst (und damit unten) gerendert. Sie können es auch sperren, indem Sie dieses Attribut hinzufügen:
Mit anderen Worten:
quelle
Ich musste ein SVG in mein SVG einbetten, aber auch seine Farbe ändern und Transformationen anwenden.
Nur Firefox unterstützt das Attribut "transform" für die verschachtelten SVG-Elemente. Das Ändern der Farbe von <Bild> ist ebenfalls nicht möglich. Also wurde eine Kombination von beiden benötigt.
Am Ende habe ich Folgendes getan
Dies funktioniert mindestens unter Firefox, Chrome und Inkscape.
Dies verhält sich genauso wie das untergeordnete SVG in der übergeordneten SVG-Antwort, mit der Ausnahme, dass Sie jetzt Transformationen darauf anwenden können.
quelle
Hinweis
xlink:href
ist veraltet , verwenden Siehref
stattdessen stattdessen zviewBox
,width
Undheight
Werte (in dieser Antwort) sind nur für Illustrationszwecke, stellen Sie das Layout entsprechend ( mehr lesen ).Da es
<image>
ähnliche Spezifikationen wie hat<img>
, was bedeutet, dass es das SVG-Styling nicht unterstützt, wie in Christiaans Antwort erwähnt . Wenn ich zum Beispiel die folgende CSS-Zeile habe, in der die Farbe der SVG-Form der Schriftfarbe entspricht,Der obige Stil würde nicht gelten, wenn er
<image>
verwendet wird. Dafür müssen Sie verwenden<use>
, wie in Nicks Antwort gezeigt .Anmerkung
id="layer1"
undhref="OTHERFILE.svg#layer1"
Werte in seiner Antwort sind obligatorisch .Das heißt, Sie müssen das
id
Attribut zur externen SVG-Datei hinzufügen , sodass Sie die (geänderte) externe SVG-Datei selbst (auf Ihrer Website) oder an einer anderen Stelle hosten müssen. Die resultierende externe SVG-Datei sieht folgendermaßen aus (beachten Sie, wo ich die abgelegt habeid
):Der Wert von id kann beliebig sein, ich verwende in diesem Beispiel "logo".
Um dieses SVG einzubetten,
Wenn Sie das obige svg als Inline in Ihrem HTML verwenden, benötigen Sie kein xmlns-Attribut (zumindest was ich von svgo weiß ).
quelle