Colocando a saída SVG diretamente alinhada com o código da página, eu posso modificar as cores de preenchimento com CSS da seguinte maneira:
polygon.mystar {
fill: blue;
}
circle.mycircle {
fill: green;
}
Isso funciona muito bem, no entanto, estou procurando uma maneira de modificar o atributo "fill" de um SVG quando ele está sendo servido como uma IMAGEM DE FUNDO.
html {
background-image: url(../img/bg.svg);
}
Como posso mudar as cores agora? Isso é possível?
Para referência, aqui está o conteúdo do meu arquivo SVG externo:
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="320px" height="100px" viewBox="0 0 320 100" enable-background="new 0 0 320 100" xml:space="preserve">
<polygon class="mystar" fill="#3CB54A" points="134.973,14.204 143.295,31.066 161.903,33.77 148.438,46.896 151.617,65.43 134.973,56.679
118.329,65.43 121.507,46.896 108.042,33.77 126.65,31.066 "/>
<circle class="mycircle" fill="#ED1F24" cx="202.028" cy="58.342" r="12.26"/>
</svg>
Respostas:
Uma maneira de fazer isso é servir o seu svg de algum mecanismo do lado do servidor. Simplesmente crie um servidor de recursos que produza seu svg de acordo com os parâmetros GET, e você o serve em um determinado URL.
Então você apenas usa esse URL no seu css.
Porque como img de fundo, ele não faz parte do DOM e você não pode manipulá-lo. Outra possibilidade seria usá-lo regularmente, incorporá-lo em uma página de maneira normal, mas posicioná-lo absolutamente, torná-lo em largura e altura completa de uma página e, em seguida, usar a propriedade z-index css para colocá-lo atrás de todos os outros elementos DOM em uma página.
fonte
<?php header('Content-type: image/svg+xml'); ?>
Eu precisava de algo semelhante e queria ficar com o CSS. Aqui estão os mixins LESS e SCSS, bem como CSS simples que podem ajudá-lo com isso. Infelizmente, o suporte ao navegador é um pouco relaxado. Veja abaixo os detalhes sobre o suporte ao navegador.
MENOS mixin:
MENOS uso:
SCSS mixin:
Uso de SCSS:
CSS:
Aqui estão mais informações sobre a incorporação do código SVG completo no seu arquivo CSS. Ele também mencionou a compatibilidade do navegador, que é um pouco pequena para ser uma opção viável.
fonte
#
caractere das cores hexadecimais para que isso funcione no Firefox. Então, algo como<svg fill="#ffffff" ...></svg>
se torna<svg fill="%23ffffff" ...></svg>
.Você pode usar máscaras CSS. Com a propriedade 'mask', você cria uma máscara que é aplicada a um elemento.
Para obter mais informações, consulte este excelente artigo: https://codepen.io/noahblon/post/coloring-svgs-in-css-background-images
fonte
Ainda outra abordagem é usar a máscara. Em seguida, você altera a cor do plano de fundo do elemento mascarado. Isso tem o mesmo efeito que alterar o atributo de preenchimento do svg.
HTML:
CSS:
Você encontrará um tutorial completo aqui: http://codepen.io/noahblon/blog/coloring-svgs-in-css-background-images (não é meu). Ele propõe uma variedade de abordagens (não limitadas à máscara).
fonte
mask
não é nem apoiada por IE nem Borda: caniuse.com/#search=maskÉ possível com Sass! A única coisa que você precisa fazer é codificar em url seu código svg. E isso é possível com uma função auxiliar no Sass. Eu fiz um codepen para isso. Veja isso:
http://codepen.io/philippkuehn/pen/zGEjxB
fonte
artigo e demonstração codeben
fonte
Faça o download do seu svg como texto.
Modifique seu texto svg usando o javascript para alterar as cores [paint] / stroke / fill [s].
Em seguida, incorpore a string svg modificada embutida no seu css, conforme descrito aqui .
fonte
Agora você pode conseguir isso no lado do cliente assim:
Violino aqui!
fonte
Você pode armazenar o SVG em uma variável. Em seguida, manipule a sequência SVG, dependendo de suas necessidades (por exemplo, defina largura, altura, cor etc.). Em seguida, use o resultado para definir o plano de fundo, por exemplo
Também fiz uma demonstração, http://sassmeister.com/gist/4cf0265c5d0143a9e734 .
Este código faz algumas suposições sobre o SVG, por exemplo, esse
<svg />
elemento não possui uma cor de preenchimento existente e que nem as propriedades de largura nem altura estão definidas. Como a entrada é codificada no documento SCSS, é muito fácil impor essas restrições.Não se preocupe com a duplicação de código. gzip a compressão torna a diferença insignificante.
fonte
Você pode criar sua própria função SCSS para isso. Adicionando o seguinte ao seu arquivo config.rb.
Então você pode usá-lo em seu CSS:
Você precisará editar seus arquivos SVG e substituir quaisquer atributos de preenchimento na marcação por fill = "{color}"
O caminho do ícone é sempre relativo ao seu parâmetro images_dir no mesmo arquivo config.rb.
Semelhante a algumas das outras soluções, mas isso é bastante limpo e mantém seus arquivos SCSS arrumados!
fonte
Em algumas situações (muito específicas), isso pode ser alcançado usando um filtro . Por exemplo, você pode alterar uma imagem SVG azul para roxa girando o matiz 45 graus usando
filter: hue-rotate(45deg);
. O suporte ao navegador é mínimo, mas ainda é uma técnica interessante.Demo
fonte
para fundo monocromático, você pode usar um svg com uma máscara, onde a cor do fundo deve ser exibida
e que usar esse css
fonte
Use o filtro sépia juntamente com rotação de matiz, brilho e saturação para criar a cor desejada.
https://css-tricks.com/solved-with-css-colorizing-svg-backgrounds/
fonte
Tarde para o show aqui, MAS, eu era capaz de adicionar uma cor de preenchimento ao polígono SVG, se você conseguir editar diretamente o código SVG, por exemplo, o seguinte svg renderiza vermelho, em vez de preto padrão. Ainda não testei fora do Chrome:
fonte
Este é o meu método favorito, mas o suporte ao seu navegador deve ser muito progressivo. Com a propriedade mask, você cria uma máscara que é aplicada a um elemento. Em todos os lugares em que a máscara é opaca ou sólida, a imagem subjacente é exibida. Onde é transparente, a imagem subjacente é oculta ou oculta. A sintaxe para uma imagem de máscara CSS é semelhante à imagem de fundo. olhe para o codepen
mask
fonte
Muitos IFs, mas se o seu SVG pré-codificado com base64 iniciar:
A sequência codificada base64 será iniciada:
se a sequência pré-codificada iniciar:
então isso codifica para:
As duas cadeias codificadas começam da mesma maneira:
A peculiaridade da codificação base64 é que cada 3 caracteres de entrada se tornem 4 caracteres de saída. Com o SVG iniciando assim, a cor de preenchimento hexadecimal de 6 caracteres começa exatamente no 'limite' do bloco de codificação. Portanto, você pode facilmente substituir um JS entre navegadores:
Mas a resposta tnt-rox acima é o caminho a seguir em frente.
fonte