Eu quero colorir o fundo do SVG text
semelhante ao background-color
do CSS
Só consegui encontrar documentação sobre fill
, que colore o próprio texto
É mesmo possível?
css
svg
background-color
Nick Ginanto
fonte
fonte
Respostas:
Não, isso não é possível, os elementos SVG não têm
background-...
atributos de apresentação .Para simular esse efeito, você pode desenhar um retângulo atrás do atributo de texto com
fill="green"
ou algo semelhante (filtros). Usando JavaScript, você pode fazer o seguinte:fonte
Você pode usar um filtro para gerar o fundo.
fonte
operator="xor"
afeComposite
para evitar texto borrado. @RobertLongson @teran @paulmelnikow @billA solução que usei é:
Um item de texto duplicado está sendo colocado, com atributos de traço e largura do traço. O traço deve corresponder à cor do plano de fundo e a largura do traço deve ser grande o suficiente para criar uma "mancha" na qual o texto real será escrito.
Um pouco de hack e existem problemas em potencial, mas funciona para mim!
fonte
Não, você não pode adicionar cor de fundo a elementos SVG. Você pode fazer isso programaticamente com d3 .
fonte
Em vez de usar uma
<text>
tag, a<foreignObject>
tag pode ser usada, o que permite conteúdo XHTML com CSS.fonte
Resposta de Robert Longson (@RobertLongson) com modificações:
e não temos manchas e nenhum "getBBox" pesado :) O preenchimento é fornecido por espaços em branco no elemento de texto com filtro. Funcionou para mim
fonte
este é meu hack favorito (não tenho certeza se deve funcionar). Refere-se a um elemento que ainda não foi exibido e funciona muito bem
fonte
Você pode combinar filtro com o texto.
fonte
Para aqueles que estão se perguntando como aplicar preenchimento a um elemento de texto quando ele tem um plano de fundo como a resposta de Robert , faça o seguinte:
No exemplo acima, de filtros de x e y posições pode ser usado como
transform: translate(-10%, -10%)
iria, e da largura e altura valores pode ser lido como120%
e120%
. Então, tornamos o fundo 20% maior e o compensamos em -10%, então o fundo agora é 10% maior em cada lado do texto.fonte
As respostas anteriores dependiam da duplicação do texto e da falta de espaço em branco suficiente.
Usando
atop
e
consegui obter os resultados que queria.Este exemplo também inclui setas, um caso de uso comum para rótulos de texto SVG:
fonte
Você pode adicionar estilo ao seu texto:
Branco, neste exemplo. Não funciona no IE :)
fonte