html
<img src="logo.svg" alt="Logo" class="logo-img">
css
.logo-img path {
fill: #000;
}
O svg acima carrega e é nativo, fill: #fff
mas quando eu uso o acima css
para tentar mudá-lo para preto, ele não muda, é a primeira vez que eu jogo com SVG e não sei ao certo por que ele não está funcionando.
Respostas:
Se seu objetivo é apenas alterar a cor do logotipo e você não necessariamente precisar usar CSS, não use javascript ou jquery, conforme sugerido por algumas respostas anteriores.
Para responder com precisão à pergunta original, basta:
Abra o seu
logo.svg
em um editor de texto.procure
fill: #fff
e substitua-o porfill: #000
Por exemplo, você
logo.svg
pode ficar assim quando aberto em um editor de texto:... basta alterar o preenchimento e salvar.
fonte
path
oucircle
como<path fill="#777777" d="m129.774,74.409c-5.523,...
.fill="currentColor"
então usar acolor
no elemento pai css-tricks.com/cascading-svg-fill-colorVocê pode definir seu SVG como uma máscara. Dessa forma, definir uma cor de fundo atuaria como sua cor de preenchimento.
HTML
CSS
JSFiddle: https://jsfiddle.net/KuhlTime/2j8exgcb/
MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/mask
Verifique se o seu navegador suporta este recurso: https://caniuse.com/#search=mask
fonte
mask
é uminvalid property value
. Estou testando isso no chrome.Tente CSS puro:
mais informações neste artigo https://blog.union.io/code/2017/08/10/img-svg-fill/
fonte
2018: se você deseja uma cor dinâmica, não deseja usar javascript e não deseja um SVG embutido, use uma variável CSS. Funciona no Chrome, Firefox e Safari. editar: e Edge
No seu SVG, substitua todas as instâncias de
style="fill: #000"
porstyle="fill: var(--color_fill)"
.fonte
"This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped"
xlink:href
foi preterido em favor dehref
. Então, isso ainda pode funcionar.Você primeiro precisará injetar o SVG no DOM HTML.
Existe uma biblioteca de código aberto chamada SVGInject que faz isso por você. Ele usa o
onload
atributo para disparar a injeção.Aqui está um exemplo mínimo usando SVGInject:
Após o carregamento da imagem
onload="SVGInject(this)
, a injeção será acionada e o<img>
elemento será substituído pelo conteúdo do arquivo SVG fornecido nosrc
atributoEle resolve vários problemas com a injeção de SVG:
Os SVGs podem ficar ocultos até a injeção terminar. Isso é importante se um estilo já estiver aplicado durante o tempo de carregamento, o que causaria um breve "flash de conteúdo sem estilo".
Os
<img>
elementos se injetam automaticamente. Se você adicionar SVGs dinamicamente, não precisará se preocupar em chamar a função de injeção novamente.Uma sequência aleatória é adicionada a cada ID no SVG para evitar ter o mesmo ID várias vezes no documento se um SVG for injetado mais de uma vez.
SVGInject é Javascript simples e funciona com todos os navegadores que suportam SVG.
Disclaimer: Eu sou o co-autor do SVGInject
fonte
A resposta do @Praveen é sólida.
Como não consegui responder no meu trabalho, criei uma função de jquery hover para ele.
CSS
JS / JQuery
fonte
Por que não criar uma webfont com sua imagem ou imagens svg, importar a webfont no css e alterar a cor do glifo usando o atributo css color? Não é necessário javascript
fonte
Esta resposta é baseada na resposta https://stackoverflow.com/a/24933495/3890888, mas com uma versão JavaScript simples do script usado lá.
Você precisa fazer com que o SVG seja um SVG embutido . Você pode fazer uso desse script, adicionando uma classe
svg
à imagem:E então, agora se você fizer:
Ou talvez:
JSFiddle: http://jsfiddle.net/erxu0dzz/1/
fonte
parser.parseFromString(text, "image/svg+xml");
fetch
que foi adicionado ao Safari na 10.1 ( developer.mozilla.org/en-US/docs/Web/API/Fetch_API ). A versão do jQuery acima funciona.Use filtros para transformar em qualquer cor.
Encontrei recentemente esta solução e espero que alguém possa usá-la. Como a solução usa filtros, ela pode ser usada com qualquer tipo de imagem. Não é apenas svg.
Se você tiver uma imagem em uma única cor da qual deseja alterar a cor, poderá fazer isso com a ajuda de alguns filtros. Também funciona em imagens multicoloridas, mas você não pode segmentar uma cor específica. Somente a imagem inteira.
Os filtros vieram do script proposto em Como transformar preto em qualquer cor, usando apenas filtros CSS. Se você deseja mudar o branco para qualquer cor, pode ajustar o valor invertido em cada filtro.
fonte
Para expandir a resposta do @gringo, o método Javascript descrito em outras respostas funciona, mas exige que o usuário baixe arquivos de imagem desnecessários e, na IMO, ele incha seu código.
Eu acho que uma abordagem melhor seria migrar todos os gráficos vetoriais de uma cor para um arquivo webfont. Eu usei o Fort Awesome no passado e funciona muito bem para combinar seus ícones / imagens personalizados no formato SVG, juntamente com quaisquer ícones de terceiros que você possa estar usando (Font Awesome, ícones Bootstrap, etc.) em um único arquivo de fonte da Web o usuário precisa fazer o download. Você também pode personalizá-lo, para incluir apenas os ícones de terceiros que estiver usando. Isso reduz o número de solicitações que a página precisa fazer e o peso total da página, especialmente se você já estiver incluindo bibliotecas de ícones de terceiros.
Se você preferir uma opção mais orientada a desenvolvedores, poderia "npm svg webfont" no Google e usar um dos módulos de nó mais apropriados para o seu ambiente.
Uma vez que você tenha feito uma dessas duas opções, poderá alterar facilmente a cor via CSS e, muito provavelmente, acelerará o site no processo.
fonte
Se você estiver apenas alternando a imagem entre a cor real e o preto e branco, poderá definir um seletor como:
{filter: none;}
e outro como:
fonte
Simples..
Você pode usar este código:
Primeiro especifique o caminho do svg e depois escreva seu ID, neste caso "Capa_1". Você pode obter o ID do svg abrindo-o em qualquer editor.
Em css:
fonte
O principal problema no seu caso é que você está importando o svg de uma
<img>
tag que oculta a estrutura SVG.Você precisa usar a
<svg>
tag em conjunto com a<use>
para obter o efeito desejado. Para fazê-lo funcionar, você precisa fornecer umid
caminho para o caminho que deseja usar no arquivo SVG<path id='myName'...>
para poder recuperá-los da<use xlink:href="#myName"/>
tag. Experimente o snippet abaixo.Mostrar snippet de código
Observe que você pode colocar qualquer URL antes do fragmento
#
se quiser carregar o SVG de uma fonte externa (e não incorporá-lo ao seu HTML). Além disso, geralmente você não especifica o preenchimento no CSS. É melhor considerar o usofill:"currentColor"
no próprio SVG. O valor da cor CSS do elemento correspondente será então usado no local.fonte
Como o SVG é basicamente código, você precisa apenas de conteúdo. Eu usei o PHP para obter conteúdo, mas você pode usar o que quiser.
Em seguida, imprimi o conteúdo "como está" dentro de um contêiner div
Para definir finalmente uma regra para childs SVG do contêiner no CSS
Eu obtive esses resultados com um ícone de material SVG:
Mozilla Firefox 59.0.2 (64 bits) Linux
Google Chrome66.0.3359.181 (Build oficial) (64 bits) Linux
Opera 53.0.2907.37 Linux
fonte
Isso pode ser útil para pessoas que usam
PHP
em combinação com.svg
imagens que desejam manipular com CSS.Você não pode sobrescrever propriedades dentro de uma tag img com CSS. Mas quando o código-fonte svg está incorporado no HTML, você certamente pode. Eu gosto de resolver esse problema com uma
require_once
função na qual incluo um.svg.php
arquivo. É como importar uma imagem, mas você ainda pode sobrescrever estilos com CSS!Primeiro inclua o arquivo svg:
E inclui este ícone, por exemplo:
Agora podemos alterar facilmente a cor do preenchimento desta forma com CSS:
Eu tentei primeiro resolver esse problema,
file_get_contents()
mas a solução acima é muito mais rápida.fonte
Saiba que essa é uma pergunta antiga, mas recentemente nos deparamos com o mesmo problema e resolvemos do lado do servidor. Esta é uma resposta específica ao php, mas tenho certeza de que outros envs têm algo semelhante. em vez de usar a tag img, você renderiza o svg como svg desde o início.
Agora, quando você renderizar o arquivo, você terá svg completo em linha
fonte
abra o ícone svg no seu editor de código e adicione uma classe após a tag path:
Você pode adicionar classe ao svg e alterar a cor da seguinte maneira:
codepen
fonte
Se você tiver acesso ao JQuery, estendendo-se para a resposta de Praveen, é possível alterar programaticamente a cor de diferentes elementos aninhados dentro do SVG da seguinte forma:
$('svg').find('path, text').css('fill', '#ffffff');
Na localização, você pode mencionar diferentes elementos que precisam ser alterados em cores.
fonte