Quiero colorear el fondo de svg de manera text
similar a background-color
en css
Solo pude encontrar documentación sobre fill
, que colorea el texto en sí
¿Es siquiera posible?
css
svg
background-color
Nick Ginanto
fuente
fuente
Respuestas:
No, esto no es posible, los elementos SVG no tienen
background-...
atributos de presentación .Para simular este efecto, puede dibujar un rectángulo detrás del atributo de texto con
fill="green"
o algo similar (filtros). Con JavaScript, puede hacer lo siguiente:fuente
Puede utilizar un filtro para generar el fondo.
fuente
operator="xor"
afeComposite
para evitar texto borroso. @RobertLongson @teran @paulmelnikow @billLa solución que he usado es:
Se está colocando un elemento de texto duplicado, con los atributos de trazo y ancho de trazo. El trazo debe coincidir con el color de fondo y el ancho del trazo debe ser lo suficientemente grande para crear una "mancha" en la que escribir el texto real.
Un poco complicado y hay problemas potenciales, ¡pero funciona para mí!
fuente
No, no puede agregar color de fondo a los elementos SVG. Puedes hacerlo programáticamente con d3 .
fuente
En lugar de usar una
<text>
etiqueta,<foreignObject>
se puede usar la etiqueta, lo que permite contenido XHTML con CSS.fuente
Respuesta de Robert Longson (@RobertLongson) con modificaciones:
y no tenemos bluring ni "getBBox" pesado :) El relleno lo proporcionan los espacios en blanco en el elemento de texto con filtro. Ha funcionado para mi
fuente
este es mi truco favorito (no estoy seguro de que funcione). Hace referencia a un elemento que aún no se muestra y funciona bastante bien
fuente
Puede combinar el filtro con el texto.
fuente
Para aquellos que se preguntan cómo aplicar relleno a un elemento de texto cuando tiene un fondo como en la respuesta de Robert , haga lo siguiente:
En el ejemplo anterior, de filtros de x y Y posiciones pueden ser utilizados como
transform: translate(-10%, -10%)
lo haría, y la anchura y altura valores pueden leerse como120%
y120%
. Así que hicimos el fondo un 20% más grande y lo compensamos un -10%, por lo que el fondo ahora es un 10% más grande en cada lado del texto.fuente
Las respuestas anteriores se basaron en duplicar el texto y carecían de suficiente espacio en blanco.
Al usar
atop
y
pude obtener los resultados que quería.Este ejemplo también incluye flechas, un caso de uso común para etiquetas de texto SVG:
fuente
Puede agregar estilo a su texto:
Blanco, en este ejemplo. No funciona en IE :)
fuente