SVG “fill: url(#...)” se comporte bizarrement dans Firefox
J'ai le texte suivant SVG graphique:
<svg width='36' height='30'>
<defs>
<linearGradient id="normal-gradient" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:rgb(81,82,84); stop-opacity:.4"/>
<stop offset="100%" style="stop-color:rgb(81,82,84); stop-opacity:1"/>
</linearGradient>
<linearGradient id="rollover-gradient" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:rgb(0,105,23); stop-opacity:.5"/>
<stop offset="100%" style="stop-color:rgb(0,105,23); stop-opacity:1"/>
</linearGradient>
<linearGradient id="active-gradient" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:rgb(0,0,0); stop-opacity:.4"/>
<stop offset="100%" style="stop-color:rgb(0,0,0); stop-opacity:1"/>
</linearGradient>
</defs>
<text x="8" y="25" style="font-size: 29px;" font-family="Arial">hello world</text>
</svg>'
J'ai mis le fill
attribut de la text
élément en CSS et de basculer entre les différents gradients en fonction de l'état de pointage. Cela fonctionne très bien dans Chrome & Safari, mais dans Firefox, le texte n'apparaît pas. Lors de l'inspection de l'élément, j'ai découvert que Firefox est en ajoutant none
à la fin de mon fill: url(#...)
attribut CSS. J'ai essayé de supprimer le none
mot-clé avec Firebug, mais Firebug supprime tout l'ensemble de l'attribut. Pourquoi est-ce arrivé?
EDIT:
Je note que si j'ai enlever le CSS qui définit la fill
de la propriété, et de coder en dur le fill
attribut dans le text
élément (et non pas par une ligne style
attribut), le texte s'affiche correctement dans tous les navigateurs.
- Quel est votre CSS ressembler, pour aller avec SVG? Comme pour le "non" chose "remplissage: url(quoi que) none" est la même chose que "remplir: url(quoi que)"; autant dire que si la chose à l'url n'est pas disponible il n'existe pas de solution de secours et rien ne doit être peint.
- Merci, je ne savais pas que la 'none' spécifié ce qui se passe lors de la première ressource n'est pas trouvée.
Vous devez vous connecter pour publier un commentaire.
Pensé à elle. Dans mon CSS, je faisais allusion à la dégradés de la même manière, j'ai été à l'origine de référencement de le remplir en ligne:
Pour qu'il fonctionne dans Firefox, j'ai dû changer à cela:
Ne sais pas pourquoi c'est. Peut-être qu'il a quelque chose à voir avec la structure de répertoire contenant ma feuille de style?
url()
dans une feuille de style est réglée par rapport à la feuille de style. Donc, si votre feuille de style et SVG sont dans des répertoires différents, les chances sont que vous n'étiez pas en les reliant à la SVG à tous.SVG “fill: url(#...)” se comporter étrangement dans Firefox quand nous attribuant le code ci-dessous avec les css(à la fois interne et externe css.)
Solution
donner inline style, cela peut être fait de deux manières. Statique ou dynamique,
Dynamique
De manière statique
En statique, vous devez mettre ceci dans le SVG Html;
J'ai eu le même problème avec
linearGradient
en SVG – encore en 2017. Je suppose que, le problème, c'est que Firefox traiterurl('#gradient-id')
comme normal l'URL et appliquer les règles de<base href=""/>
metatag. Commentaire et vérifier ensuite.$(someCircle).attr('stroke', "url(" + window.location.href + "#gradientId)");