Tenho vários gráficos SVG que gostaria de modificar as cores por meio de minhas folhas de estilo externas - não diretamente em cada arquivo SVG. Não estou colocando os gráficos em linha, mas armazenando-os na minha pasta de imagens e apontando para eles.
Eu os implementei dessa forma para permitir que as dicas de ferramentas funcionassem e também envolvi cada um em uma <a>
tag para permitir um link.
<a href='http://youtube.com/...' target='_blank'><img class='socIcon' src='images/socYouTube.svg' title='View my videos on YouTube' alt='YouTube' /></a>
E aqui está o código do gráfico SVG:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="stylesheets/main.css" type="text/css"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 56.69 56.69">
<g>
<path d="M28.44......./>
</g>
</svg>
Coloquei o seguinte em meu arquivo CSS externo (main.css):
.socIcon g {fill:red;}
No entanto, não tem efeito no gráfico. Também tentei o caminho .socIcon g {} e o caminho .socIcon {}.
Algo não está certo, talvez minha implementação não permita modificações externas de CSS ou eu perdi uma etapa. Eu realmente aprecio sua ajuda! Eu só preciso modificar as cores do gráfico SVG por meio de minha folha de estilo externa, mas não posso perder a dica de ferramenta e a capacidade de link. (No entanto, posso viver sem dicas.) Obrigado!
svg { fill:red; }
ou dê ao seu caminho um nome de classe. Por exemplo,<path class="socIcon" d="M28.44 ..... />
isso deve funcionar.Respostas:
Seu arquivo main.css só terá efeito no conteúdo do SVG se o arquivo SVG for incluído in-line no HTML:
https://developer.mozilla.org/en/docs/SVG_In_HTML_Introduction
Se você deseja manter seu SVG em arquivos, o CSS precisa ser definido dentro do arquivo SVG.
Você pode fazer isso com uma tag de estilo:
http://www.w3.org/TR/SVG/styling.html#StyleElementExample
Você pode usar uma ferramenta no lado do servidor para atualizar a tag de estilo dependendo do estilo ativo. Em rubi, você pode conseguir isso com Nokogiri. SVG é apenas XML. Portanto, provavelmente há muitas bibliotecas XML disponíveis que provavelmente podem fazer isso.
Se você não puder fazer isso, terá que apenas usá-los como se fossem PNGs; criando um conjunto para cada estilo e salvando seus estilos embutidos.
fonte
Você pode fazer o que quiser, com uma advertência (importante): os caminhos dentro do seu símbolo não podem ser estilizados de forma independente por meio de CSS externo - você só pode definir as propriedades de todo o símbolo com este método. Portanto, se você tiver dois caminhos em seu símbolo e quiser que eles tenham cores de preenchimento diferentes, isso não funcionará, mas se quiser que todos os seus caminhos sejam iguais, isso deve funcionar.
Em seu arquivo html, você deseja algo assim:
E no arquivo SVG externo, você deseja algo assim:
Troque a classe na
svg
tag (em seu html) defill-red
parafill-blue
e ta-da ... você tem azul em vez de vermelho.Você pode contornar parcialmente a limitação de ser capaz de direcionar os caminhos separadamente com CSS externo misturando e combinando o CSS externo com algum CSS in-line em caminhos específicos, já que o CSS in-line terá precedência. Essa abordagem funcionaria se você estiver fazendo algo como um ícone branco contra um fundo colorido, onde deseja alterar a cor do fundo por meio do CSS externo, mas o ícone em si é sempre branco (ou vice-versa). Então, com o mesmo HTML de antes e algo como este código SVG, você obterá um fundo vermelho e um caminho de primeiro plano branco:
fonte
symbol
elemento, ou seja, você pode apenas fornecer umid
ao elemento svg, então: `<svg id = example" xmlns = " w3.org/2000/svg " viewBox = "0 0 256 256 "> <path class =" background "d =" M120 ... "/> <path class =" icon "style =" fill: white; "d =" M20 ... "/> </ svg > `Você pode incluir em seus arquivos SVG um link para um arquivo css externo usando:
Você precisa colocar isso depois de abrir a tag:
Não é a solução perfeita, porque você tem que modificar os arquivos svg, mas você os modifica uma vez e então todas as mudanças de estilo podem ser feitas em um arquivo css para todos os arquivos svg.
fonte
É possível definir o estilo de um SVG criando dinamicamente um elemento de estilo em JavaScript e anexando-o ao elemento SVG. Hacky, mas funciona.
Você poderia gerar o JavaScript dinamicamente em PHP se quiser - o fato de isso ser possível em JavaScript abre uma infinidade de possibilidades.
fonte
Uma abordagem que você pode adotar é apenas usar filtros CSS para alterar a aparência dos gráficos SVG no navegador.
Por exemplo, se você tiver um gráfico SVG que usa uma cor de preenchimento de vermelho no código SVG, pode torná-lo roxo com uma configuração de rotação de matiz de 180 graus:
Experimente outras configurações de rotação de matiz para encontrar as cores desejadas.
Para ser claro, o CSS acima vai no CSS que é aplicado ao seu documento HTML. Você está estilizando a tag img no código HTML, não estilizando o código do SVG.
E observe que isso não funcionará com gráficos com preenchimento em preto, branco ou cinza. Você tem que ter uma cor real lá para girar o matiz dessa cor.
fonte
Uma solução muito rápida para ter um estilo dinâmico com uma folha de estilo CSS externa, caso você esteja usando o
<object>
tag para incorporar seu svg.Este exemplo adicionará uma classe à raiz
<svg>
tag ao clicar em um elemento pai.file.svg:
html:
Jquery:
no elemento pai do clique:
então você pode gerenciar seu css
svg.css:
fonte
Deve ser possível fazer in-line primeiro as imagens SVG externas. O código abaixo vem da substituição de todas as imagens SVG por SVG embutido de Jess Frazelle.
fonte
Quando usado em uma
<image>
tag, o SVG deve estar contido em um único arquivo por motivos de privacidade. Este bug do bugzilla tem mais detalhes sobre o motivo exato disso. Infelizmente, você não pode usar uma tag diferente, como um<iframe>
porque isso não funcionará como um link, então você terá que incorporar o CSS em um<style>
tag dentro do próprio arquivo.Uma outra maneira de fazer isso seria ter os dados SVG dentro do arquivo html principal, ou seja,
Você pode estilizar isso com um arquivo CSS externo usando a
<link>
tag HTML .fonte
Eu sugiro que você use PHP para isso. Realmente não há maneira melhor de fazer isso sem fontes de ícone e, se você resistir a usá-las, pode tentar o seguinte:
E mais tarde você pode usar este arquivo
filename.php?color=#ffffff
para obter o arquivo svg na cor desejada.fonte
if (!preg_match('/^[#][0-9a-f]{6}$/i', $_GET['color'])) die('Oops!');
(coloque em algum lugar no bloco de início do PHP).O que funciona para mim: tag de estilo com regra @import
fonte
Eu sei que é um post antigo, mas só para esclarecer esse problema ... você acabou de usar suas aulas no lugar errado: D
Em primeiro lugar, você poderia usar
em seu
main.css
para deixá-lo vermelho. Isso tem efeito. Provavelmente, você também pode usar seletores de nó para obter caminhos específicos.A segunda coisa é que você declarou a classe à
img
-Tag.Você realmente deve declará-lo dentro do seu SVG. se você tiver diferentes caminhos, poderá definir mais, é claro.
agora você pode mudar a cor do seu
main.css
gostofonte
<?xml-stylesheet href="stylesheets/main.css" type="text/css"?>
<?xml-stylesheet ... ?>
declaração dentro do seu SVG. Eu acho que funcionaria. É semelhante a outras respostas que recomendam um<link rel="stylesheet" ... >
dentro do SVG. Ele também tem os mesmos problemas (você precisa atualizar cada SVG para apontar para a folha de estilo, e qualquer mudança no nome ou localização da folha de estilo significa ter que mudar todos os SVGs novamente).Nota: Estilos externos não funcionarão se você incluir SVG dentro
<img>
tag . Vai funcionar perfeitamente dentro da<div>
tagfonte
@leo aqui está a versão angularJS, obrigado novamente
fonte
Este método funcionará se o svg for visualizado em um navegador da web, mas assim que este código for carregado para o servidor e a classe para o ícone svg for codificada como se fosse uma imagem de fundo a cor é perdida e volta para a cor padrão . Parece que a cor não pode ser alterada na folha de estilo externa, embora ambas as classes svg para a cor e a classe da camada superior para a exibição e posição do svg estejam mapeadas para o mesmo diretório.
fonte