Al colocar la salida SVG directamente en línea con el código de página, puedo modificar simplemente los colores de relleno con CSS de la siguiente manera:
polygon.mystar {
fill: blue;
}
circle.mycircle {
fill: green;
}
Esto funciona muy bien, sin embargo, estoy buscando una manera de modificar el atributo de "relleno" de un SVG cuando se sirve como una IMAGEN DE FONDO.
html {
background-image: url(../img/bg.svg);
}
¿Cómo puedo cambiar los colores ahora? ¿Es posible?
Como referencia, aquí están los contenidos de mi archivo 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>
Respuestas:
Una forma de hacerlo es servir su svg desde algún mecanismo del lado del servidor. Simplemente cree un lado del servidor de recursos que genere su svg de acuerdo con los parámetros GET, y lo servirá en una determinada URL.
Entonces solo usas esa url en tu CSS.
Porque como imagen de fondo, no es parte del DOM y no puedes manipularlo. Otra posibilidad sería usarlo regularmente, incrustarlo en una página de una manera normal, pero posicionarlo absolutamente, hacerlo de ancho y alto completo de una página y luego usar la propiedad z-index css para colocarlo detrás de todos los demás elementos DOM en una página
fuente
<?php header('Content-type: image/svg+xml'); ?>
Necesitaba algo similar y quería seguir con CSS. Aquí hay combinaciones de MENOS y SCSS, así como CSS simple que pueden ayudarlo con esto. Desafortunadamente, el soporte del navegador es un poco laxo. Consulte a continuación para obtener detalles sobre la compatibilidad del navegador.
MENOS mezcla
MENOS uso:
SCSS mixin:
Uso de SCSS:
CSS:
Aquí hay más información sobre cómo incrustar el código SVG completo en su archivo CSS. También mencionó la compatibilidad del navegador, que es demasiado pequeña para que esta sea una opción viable.
fuente
#
carácter de sus colores hexadecimales para que esto funcione en Firefox. Entonces algo como se<svg fill="#ffffff" ...></svg>
convierte<svg fill="%23ffffff" ...></svg>
.Puede usar máscaras CSS. Con la propiedad 'máscara', puede crear una máscara que se aplica a un elemento.
Para obtener más información, vea este excelente artículo: https://codepen.io/noahblon/post/coloring-svgs-in-css-background-images
fuente
Otro enfoque es usar la máscara. Luego cambia el color de fondo del elemento enmascarado. Esto tiene el mismo efecto que cambiar el atributo de relleno de la svg.
HTML:
CSS:
Encontrará un tutorial completo aquí: http://codepen.io/noahblon/blog/coloring-svgs-in-css-background-images (no el mío). Propone una variedad de enfoques (no limitados a la máscara).
fuente
mask
ni IE ni Edge admiten¡Es posible con Sass! Lo único que tienes que hacer es codificar en url tu código svg. Y esto es posible con una función auxiliar en Sass. He hecho un codepen para esto. Mira este:
http://codepen.io/philippkuehn/pen/zGEjxB
fuente
artículo y demostración de codeben
fuente
Descargue su svg como texto.
Modifique su texto svg usando javascript para cambiar los colores de pintura / trazo / relleno.
Luego incruste la cadena svg modificada en línea en su CSS como se describe aquí .
fuente
Ahora puede lograr esto en el lado del cliente de esta manera:
¡Violín aquí!
fuente
Puede almacenar el SVG en una variable. Luego manipule la cadena SVG según sus necesidades (es decir, ajuste el ancho, la altura, el color, etc.). Luego use el resultado para establecer el fondo, por ej.
También hice una demostración, http://sassmeister.com/gist/4cf0265c5d0143a9e734 .
Este código hace algunas suposiciones sobre el SVG, por ejemplo, ese
<svg />
elemento no tiene un color de relleno existente y que no se establecen propiedades de ancho o alto. Dado que la entrada está codificada en el documento SCSS, es bastante fácil hacer cumplir estas restricciones.No te preocupes por la duplicación de código. gzip la compresión hace que la diferencia sea insignificante.
fuente
Puede crear su propia función SCSS para esto. Agregar lo siguiente a su archivo config.rb.
Entonces puedes usarlo en tu CSS:
Deberá editar sus archivos SVG y reemplazar cualquier atributo de relleno en el marcado con fill = "{color}"
La ruta del icono siempre es relativa a su parámetro images_dir en el mismo archivo config.rb.
Similar a algunas de las otras soluciones, ¡pero esto es bastante limpio y mantiene sus archivos SCSS ordenados!
fuente
En algunas situaciones (muy específicas) esto podría lograrse mediante el uso de un filtro . Por ejemplo, puede cambiar una imagen SVG azul a púrpura girando el tono 45 grados usando
filter: hue-rotate(45deg);
. El soporte del navegador es mínimo, pero sigue siendo una técnica interesante.Manifestación
fuente
para el fondo monocromo, puede usar un svg con una máscara, donde se debe mostrar el color de fondo
y que use este css
fuente
Use el filtro sepia junto con la rotación de tonos, el brillo y la saturación para crear el color que deseemos.
https://css-tricks.com/solved-with-css-colorizing-svg-backgrounds/
fuente
Tarde al show aquí, PERO, pude agregar un color de relleno al polígono SVG, si puede editar directamente el código SVG, por ejemplo, el siguiente svg se vuelve rojo, en lugar del negro predeterminado. Sin embargo, no he probado fuera de Chrome:
fuente
Este es mi método favorito, pero el soporte de su navegador debe ser muy progresivo. Con la propiedad de máscara, crea una máscara que se aplica a un elemento. En todas partes la máscara es opaca o sólida, la imagen subyacente se muestra a través. Donde es transparente, la imagen subyacente se oculta u oculta. La sintaxis para una imagen de máscara CSS es similar a la imagen de fondo. mira el codepen
mask
fuente
Muchos IF, pero si comienza su SVG codificado pre base64:
Entonces la cadena codificada en base64 comenzará:
si comienza la cadena precodificada:
entonces esto codifica para:
Ambas cadenas codificadas comienzan igual:
La peculiaridad de la codificación base64 es que cada 3 caracteres de entrada se convierten en 4 caracteres de salida. Con el SVG comenzando así, el color de relleno hexadecimal de 6 caracteres comienza exactamente en un 'límite' de bloque de codificación. Por lo tanto, puede hacer fácilmente un reemplazo JS entre navegadores:
Pero la respuesta anterior de tnt-rox es el camino a seguir para avanzar.
fuente