2012-12-27 6 views
50

J'essaie d'obtenir un gradient appliqué à un élément SVG rect.Gradient SVG utilisant CSS

Actuellement, j'utilise l'attribut fill. Dans mon fichier CSS:

rect { 
    cursor: pointer; 
    shape-rendering: crispEdges; 
    fill: #a71a2e; 
} 

Et l'élément rect a la couleur de remplissage correct vu dans le navigateur.

Cependant, j'aimerais savoir si je peux appliquer un dégradé linéaire à cet élément? Il suffit d'utiliser dans le CSS tout ce que vous utiliseriez dans un attribut fill

Répondre

55

Bien sûr, cela nécessite que vous ayez défini le dégradé linéaire quelque part dans votre fichier SVG.

Voici un exemple complet:

rect { 
 
    cursor: pointer; 
 
    shape-rendering: crispEdges; 
 
    fill: url(#MyGradient); 
 
}
<svg width="100" height="50" version="1.1" xmlns="http://www.w3.org/2000/svg"> 
 
     <style type="text/css"> 
 
     rect{fill:url(#MyGradient)} 
 
     </style> 
 
     <defs> 
 
     <linearGradient id="MyGradient"> 
 
      <stop offset="5%" stop-color="#F60" /> 
 
      <stop offset="95%" stop-color="#FF6" /> 
 
     </linearGradient> 
 
     </defs> 
 
     
 
     <rect width="100" height="50"/> 
 
    </svg>

+1

donc j'ai créé gradient dans un fichier séparé, et utilisé 'fill' de cette façon:' fill: url (../ js/gradient.svg # MyGradient); '. Est-ce la bonne façon? –

+0

@HrishikeshChoudhari: Oui, c'est correct, mais Chrome et moi pensons que Safari ne prend pas en charge les éléments de référence provenant d'autres fichiers. Je ne sais pas sur IE9 (ne peut pas tester maintenant, il suffit de l'essayer). –

+1

Cela fonctionnera dans Firefox, mais à mon grand désespoir, cela ne fonctionne pas dans Webkit (Safari/Chrome). Quelle blague! Voici pour le futur ... –

-6

Voici comment définir un linearGradient sur un élément cible:

$output = '<style type="text/css"> 
    path{fill:url(\''.$_SERVER['REQUEST_URI'].'#MyGradient\')} 
</style> 
<defs> 
    <linearGradient id="MyGradient"> 
     <stop offset="0%" stop-color="#e4e4e3" ></stop> 
     <stop offset="80%" stop-color="#fff" ></stop> 
    </linearGradient> 
</defs>';