Donc, j'essaie de faire quelque chose comme ça:
div {
width: 100px;
height: 100px;
background-position: center center;
background-repeat: no-repeat;
background-size: 100px 100px;
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' style='fill:red; stroke:none'><rect x='0' y='40' width='100' height='20' /><rect x='40' y='0' width='20' height='100' /></svg>");
}
Voir ici: http://jsfiddle.net/trxkcx41/4/
Cela fonctionne à merveille dans les versions actuelles de Chrome, Safari (OS X et iOS) et Firefox. Cependant, le SVG n'apparaît pas du tout dans IE 9, 10 ou 11.
Est-ce parce que cela n'est pas pris en charge dans IE ou parce que je fais quelque chose de mal?
([MISE À JOUR AVEC LA SOLUTION]} [
Merci à hungerstar , ça fonctionne. Pour résumer sa recommandation, je devais apporter les modifications suivantes:
Changez le type de données de data:image/svg+xml;utf8
à data:image/svg+xml;charset=utf8
(c'est-à-dire, charset=
est requis)
URL encoder le svg. Pour minimiser le codage d'URL, utilisez '
au lieu de "
pour entourer les attributs. Donc, dans mon cas, seuls les <
et >
devaient être encodés.
Pour, finalement, mon CSS ressemblait à ceci:
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100' style='fill:red; stroke:none' %3E%3Crect x='0' y='40' width='100' height='20' /%3E%3Crect x='40' y='0' width='20' height='100' /%3E%3C/svg%3E");
IE semble prendre en charge l’utilisation de utf8
dans un URI de données, c’est simplement plus difficile à ce sujet. Voir ceci Blog de Codepen pour plus de détails mais voici les faits saillants:
L'auteur pointe vers RFC2397 et souligne:
data: [<mediatype>] [; base64], <data>
Le <type de média> est une spécification de type de média Internet (avec des paramètres facultatifs.) L'apparition de "; base64" signifie que les données sont codées en base64. Sans "; base64", les données (sous forme d'une séquence d'octets) sont représentées à l'aide de ASCII codage pour les octets situés dans la plage de caractères URL sécurisés et à l'aide du codage standard% xx hex des URL pour les octets situés en dehors de cette plage. . Si <type de média> est omis, la valeur par défaut est text/plain; charset = US-ASCII. En abrégé, "text/plain" peut être omis mais le paramètre charset fourni.
;charset=utf8,
au lieu de ;utf8,
.<svg>
à %3Csvg%3E
. Vous pouvez réduire le pourcentage d'encodage à utiliser en utilisant des guillemets simples '
au lieu de guillemets doubles "
.Pour IE9, je dois URL encoder tout le code SVG.
Ceci est mon flux de travail pour les images d'arrière-plan SVG.
Collez d'abord le code SVG ici pour l'optimiser: https://jakearchibald.github.io/svgomg/ ("coller le balisage")
Vous pouvez supprimer le "viewBox" mais assurez-vous que "largeur" et "hauteur" sont définies dans le code SVG, IE9 en a besoin pour une meilleure implémentation CSS.
Maintenant vous avez quelque chose comme:
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"><path d="M0 0h100L50 50"/></svg>
Dans ce cas, je dois ajouter une couleur de remplissage car il n'y en avait pas. alors j'ajoute:
fill="#cc0000"
à la fin de l'élément path (s'il y a deux éléments de chemin dans un groupe ("g"), vous devez mettre cette couleur de remplissage à tous ceux-ci. Si le SVG a des traits, faites de même avec le coups comme stroke="#cc0000"
).
Nous avons maintenant le code SVG suivant:
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"><path d="M0 0h100L50 50" fill="#cc0000"/></svg>
Encodez maintenant tout le code SVG ici: http://meyerweb.com/eric/tools/dencoder/
alors vous obtenez:
%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%3E%3Cpath%20d%3D%22M0%200h100L50%2050%22%20fill%3D%22%23cc0000%22%2F%3E%3C%2Fsvg%3E
Au moins, rassemblez tout cela dans votre CSS:
.Apple {
background-image: url('data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%3E%3Cpath%20d%3D%22M0%200h100L50%2050%22%20fill%3D%22%23cc0000%22%2F%3E%3C%2Fsvg%3E');
}
Quelques avantages qui m'ont rendu fou:
Assurez-vous que enveloppe le code d'arrière-plan SVG avec '
dans le CSS car dans le SVG, nous utilisons "
!
Soyez sûr d'utiliser
data:image/svg+xml;charset=UTF-8
rien d'autre.
Maintenant, le SVG est affiché avec la couleur "# cc0000" (rouge foncé) même dans IE9 sous Windows.
Avec cette URL encodée SVG, je peux toujours changer la couleur avec une variable PHP. Par exemple, je remplace simplement "cc0000" par:
<?php echo preg_replace("/#/", "", $textcolor); ?>
Je le fais pour les modèles WordPress afin que le client puisse choisir la couleur de l'icône dans le backend.
Juste une note à ceci. Dans IE 11, vous pouvez utiliser charset = utf8. Vous devez encoder au moins <
et >
au moyen d'URL (à condition que vous utilisiez ''
pour des valeurs d'attribut autres que ""
. Faites également attention si vous utilisez des caractères non-ASCII. Vous devez fournir leur valeur codée UTF-8 - trouver un outil qui vous donne un code UTF-8 pour le caractère (comme Babel Map), puis sous une forme encodée en URL, c’est-à-dire que je voulais restituer le caractère ▾
(U+25BE
). La représentation UTF-8 du caractère est \xE2\x96\xBE
et %E2%96%BE
dans. Formulaire encodé en URL.
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' height='10px' width='15px'%3E%3Ctext x='0' y='10' fill='gray'%3E%E2%96%BE%3C/text%3E%3C/svg%3E");