Estou tentando aplicar um gradiente a um rect
elemento SVG .
Atualmente, estou usando o fill
atributo. No meu arquivo CSS:
rect {
cursor: pointer;
shape-rendering: crispEdges;
fill: #a71a2e;
}
E o rect
elemento tem a cor de preenchimento correta quando visualizado no navegador.
No entanto, gostaria de saber se posso aplicar um gradiente linear a este elemento.
css
svg
gradient
linear-gradients
Hrishikesh Choudhari
fonte
fonte
fill
desta forma:fill: url(../js/gradient.svg#MyGradient);
. Este é o caminho certo?fill: linear-gradient (...)
?"fill
requer um<paint>
que é construído em torno da<color>
classe CSS2 . Em outras palavras, esta resposta é atualmente a única maneira de fazer isso via CSS no momento em que escrevo este comentário. Você precisa adicionar umlinearGradient
elemento. Por último, examinando o W3 Working Draft para SVG2 , parece que o suporte paralinear-gradient
a regra de preenchimento de css não foi e pode não entrar na especificação.gradientTransform
atributo)Resposta 2019
Com novas propriedades de css, você pode ter ainda mais flexibilidade com variáveis também conhecidas como
custom properties
Basta definir uma variável nomeada para cada
stop
gradiente e, em seguida, personalizar como quiser em css. Você pode até mesmo alterar seus valores dinamicamente com javascript, como:fonte
Construindo em cima do que Finesse escreveu, aqui está uma maneira mais simples de direcionar o svg e alterar seu gradiente.
Isso é o que você precisa fazer:
Alguns benefícios de usar classes em vez de
:nth-child
é que isso não será afetado se você reordenar suas paradas. Além disso, torna a intenção de cada classe clara - você ficará se perguntando se precisava de uma cor azul na primeira criança ou na segunda.Eu testei em todos os Chrome, Firefox e IE11:
Veja um exemplo editável aqui: https://jsbin.com/gabuvisuhe/edit?html,css,output
fonte
Aqui está uma solução em que você pode adicionar um gradiente e alterar suas cores usando apenas CSS:
fonte
Obrigado a todos, por todas as suas respostas precisas.
Usando o svg em um shadow dom, adiciono os 3 gradientes lineares de que preciso dentro do svg, dentro de a. Eu coloco a regra de preenchimento de css no componente da web e a herança de preenchimento faz o trabalho.
veja meu teste no codepen
O primeiro é SVG normal, o segundo está dentro de um shadow dom.
fonte
Aqui está como definir um linearGradient em um elemento de destino:
fonte