Der Grund, warum Ihr CSS hier keine Wirkung zeigt, ist, dass Sie die Inneren des in das img
-Tag eingebetteten SVG nicht kontrollieren können (wie Sie in diesem oder diesem Artikel nachlesen können).
Es gibt mehrere Lösungen dafür:
a) SVGs mit dem svg
-Tag einbetten
Am einfachsten
SVGs nicht wiederverwendbar (höchstens wiederverwendbar pro HTML-Datei durch Implementierung dieses)
svg {
height: 200px;
width: 200px;
fill: red;
}
Dokument
b) Verwenden Sie ein Skript, um diese img
-Tags in svg
-Tags zu transformieren
Sie müssten Ihren Code nicht ändern + Wiederverwendbarkeit
Nicht sehr effizient und leistungsfähig, da der Client hier die JavaScript Fetch API verwendet, um die originale SVG-Datei nach der Bereitstellung der Webseite anzufordern
Markieren Sie alle img
-Tags, die SVGs anzeigen, mit der Klasse svg-img
und verwenden Sie JavaScript, um sie in svg
-Tags umzuwandeln, die von Ihrem (Tailwind) CSS gestylt werden können.
Hinweis: Wenn Sie dies lokal testen, sollten Sie die VSCode-Erweiterung "Live Server" installieren und unten in der Symbolleiste auf das Symbol "Go Live" klicken, um die Dateien im Arbeitsverzeichnis auf einem lokalen Entwicklungsserver bereitzustellen. Andernfalls wird der fetch()
einen CORS-Fehler verursachen: Der Zugriff auf die Ressource unter 'file:///.../icon-facebook.svg' wurde aufgrund der CORS-Richtlinie vom Ursprung 'null' blockiert: ...
.
index.html
-Datei:
Dokument
transform-svg-imgs.js
-Datei:
window.onload = () => {
// Finde alle Elemente mit der Klasse "img-svg"
const imgSVGs = document.querySelectorAll("img.img-svg");
// Gehe durch jedes Element
imgSVGs.forEach((img) => {
// Fordere die SVG-Datei an
fetch(img.getAttribute("src"))
.then(response => response.text())
.then(svgContent => {
// Parsen der XML-Daten aus der SVG-Datei in ein DOM-Objekt zur einfacheren Auswertung
const parser = new DOMParser();
const svgXML = parser.parseFromString(svgContent, 'text/xml');
// Erstellen eines neuen -Elements
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
// Kopiere Attribute von nach und entferne das "img-svg" Marker
svg.setAttribute("class", img.getAttribute("class"));
svg.classList.remove("img-svg");
svg.setAttribute("alt", img.getAttribute("alt"));
// Kopiere Daten aus der SVG-Datei zum -Element
svg.setAttribute("viewBox", svgXML.getElementsByTagName("svg")[0].getAttribute("viewBox"));
const path = svgXML.getElementsByTagName("svg")[0].querySelector("path");
svg.appendChild(path);
// Ersetze durch
img.replaceWith(svg);
})
.catch(error => { console.log("Fehler beim Abrufen von SVG: ", error); });
});
};
icon-facebook.svg
-Datei:
c) Verwenden Sie einen Workaround, wie