2012-12-27 10 views
50

Ich versuche, einen Gradienten auf ein SVG rect Element zu erhalten.SVG-Farbverlauf mit CSS

Derzeit verwende ich das Attribut fill. In meiner CSS-Datei:

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

Und das rect Element hat die richtige Füllfarbe, wenn sie im Browser angezeigt.

Allerdings würde ich gerne wissen, ob ich einen linearen Gradienten auf dieses Element anwenden kann?

Antwort

55

Verwenden Sie einfach in der CSS, was auch immer Sie in einem fill Attribut verwenden würden. Dies erfordert natürlich, dass Sie den linearen Farbverlauf irgendwo in Ihrem SVG definiert haben. Hier

ist ein komplettes Beispiel:

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

Also habe ich diese Gradienten in eine separate Datei, und verwendet 'fill' auf diese Weise:' fill: url (../ js/gradient.svg # MyGradient); '. Ist das der richtige Weg? –

+0

@HrishikeshChoudhari: Ja, das ist richtig, aber Chrome und ich denke Safari unterstützt auch nicht die Referenzierung von Elementen aus anderen Dateien. Ich bin mir nicht sicher über IE9 (kann jetzt nicht testen, versuche es einfach). –

+1

Dies funktioniert in Firefox, aber zu meiner Verzweiflung funktioniert es nicht in Webkit (Safari/Chrome). Was für ein Witz! Hier ist die Zukunft ... –

-6

Hier ist, wie ein linearGradient einstellen auf einem Zielelement:

$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>';