J'essaie d'obtenir un dégradé appliqué à un rect
élément SVG .
Actuellement, j'utilise l' fill
attribut. Dans mon fichier CSS:
rect {
cursor: pointer;
shape-rendering: crispEdges;
fill: #a71a2e;
}
Et l' rect
élément a la bonne couleur de remplissage lorsqu'il est affiché dans le navigateur.
Cependant, j'aimerais savoir si je peux appliquer un dégradé linéaire à cet élément?
css
svg
gradient
linear-gradients
Hrishikesh Choudhari
la source
la source
fill
cette façon:fill: url(../js/gradient.svg#MyGradient);
. Est-ce la bonne manière?fill: linear-gradient (...)
?"fill
nécessite un<paint>
qui est construit autour de la<color>
classe CSS2 . En d'autres termes, cette réponse est actuellement le seul moyen de le faire via CSS au moment où j'écris ce commentaire. Vous devez ajouter unlinearGradient
élément. Enfin, en parcourant le brouillon de travail w3 pour SVG2 , il semble que la prise en charge delinear-gradient
la règle de remplissage css ne l'a pas été et pourrait ne pas être intégrée à la spécification.gradientTransform
attribut)Réponse 2019
Avec les toutes nouvelles propriétés css, vous pouvez avoir encore plus de flexibilité avec les variables aka
custom properties
Définissez simplement une variable nommée pour chacun
stop
en dégradé, puis personnalisez-la comme vous le souhaitez en css. Vous pouvez même modifier leurs valeurs dynamiquement avec javascript, comme:la source
En s'appuyant sur ce que Finesse a écrit, voici un moyen plus simple de cibler le svg et de modifier son dégradé.
Voici ce que vous devez faire:
Certains avantages d'utiliser des cours au lieu de
:nth-child
sont que cela ne sera pas affecté si vous réorganisez vos arrêts. En outre, cela clarifie l'intention de chaque classe - vous vous demanderez si vous aviez besoin d'une couleur bleue sur le premier enfant ou le second.Je l'ai testé sur tous les Chrome, Firefox et IE11:
Voir un exemple modifiable ici: https://jsbin.com/gabuvisuhe/edit?html,css,output
la source
Voici une solution où vous pouvez ajouter un dégradé et changer ses couleurs en utilisant uniquement CSS:
la source
Merci à tous, pour toutes vos réponses précises.
En utilisant le svg dans un shadow dom, j'ajoute les 3 dégradés linéaires dont j'ai besoin dans le svg, à l'intérieur d'un. Je place la règle de remplissage css sur le composant Web et l'héritage od fill fait le travail.
voir mon test dans codepen
Le premier est SVG normal, le second est à l'intérieur d'un shadow dom.
la source
Voici comment définir un linearGradient sur un élément cible:
la source