La imagen de datos SVG no funciona como imagen de fondo en un pseudoelemento

Resuelto supersize asked hace 9 años • 4 respuestas

Estoy configurando un SVG como background-imagepara un pseudo elemento:

content: '';
position: absolute;
 right: 0;
bottom: 0;
  left: 0;
width: 100%;
height: 12px;
background-image: url('data:image/svg+xml;utf8,<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" viewBox="0 0 620 12" enable-background="new 0 0 620 12" xml:space="preserve"><g><polygon fill="#D11A3C" points="48.8,12 0,12 0,0 54.1,0"/><polygon fill="#952592" points="93.8,12 44,12 49.3,0 99.1,0"/><polygon fill="#1E65AF" points="133.5,12 83.7,12 89,0 138.8,0"/><polygon fill="#D11A3C" points="156.3,12 106.5,12 111.8,0 161.6,0"/><polygon fill="#40BFC2" points="201,12 151.3,12 156.5,0 206.3,0"/><polygon fill="#1E65AF" points="216.4,12 166.6,12 171.9,0 221.7,0"/><polygon fill="#952592" points="226.5,12 176.7,12 182,0 231.7,0"/><polygon fill="#1E65AF" points="241.3,12 191.5,12 196.8,0 246.6,0"/><polygon fill="#40BFC2" points="260.9,12 211.1,12 216.4,0 266.2,0"/><polygon fill="#952592" points="282.6,12 232.9,12 238.1,0 287.9,0"/><polygon fill="#952592" points="282.6,12 232.9,12 238.1,0 287.9,0"/><polygon fill="#D11A3C" points="318.6,12 268.9,12 274.2,0 323.9,0"/><polygon fill="#D11A3C" points="318.6,12 268.9,12 274.2,0 323.9,0"/><polygon fill="#40BFC2" points="364.2,12 314.4,12 319.7,0 369.5,0"/><polygon fill="#1E65AF" points="368.1,12 318.3,12 323.6,0 373.4,0"/><polygon fill="#1E65AF" points="368.1,12 318.3,12 323.6,0 373.4,0"/><polygon fill="#D11A3C" points="378.5,12 328.7,12 334,0 383.8,0"/><polygon fill="#D11A3C" points="378.5,12 328.7,12 334,0 383.8,0"/><polygon fill="#40BFC2" points="424.8,12 375,12 380.3,0 430.1,0"/><polygon fill="#40BFC2" points="424.8,12 375,12 380.3,0 430.1,0"/><polygon fill="#952592" points="430.1,12 380.3,12 385.6,0 435.4,0"/><polygon fill="#1E65AF" points="465.6,12 415.8,12 421.1,0 470.9,0"/><polygon fill="#D11A3C" points="488.3,12 438.5,12 443.8,0 493.6,0"/><polygon fill="#D11A3C" points="620,12 613.4,12 618.7,0 620,0"/><polygon fill="#40BFC2" points="534.2,12 484.5,12 489.8,0 539.5,0"/><polygon fill="#1E65AF" points="548,12 498.2,12 503.5,0 553.3,0"/><polygon fill="#952592" points="556.5,12 506.7,12 512,0 561.8,0"/><polygon fill="#1E65AF" points="573.8,12 524.1,12 529.4,0 579.1,0"/><polygon fill="#40BFC2" points="592.5,12 542.8,12 548.1,0 597.8,0"/><polygon fill="#952592" points="614.4,12 564.6,12 569.9,0 619.7,0"/></g></svg>');
background-repeat: repeat-x;
background-position: bottom;

pero por alguna razón no aparece en Firefox. No quiero utilizar una URL de datos base64. ¿No es esto posible en Firefox?

supersize avatar Jun 09 '15 20:06 supersize
Aceptado

El carácter # en una URL está reservado para indicar el inicio de un identificador de fragmento .

Debe codificar en URL el contenido de la URL de datos, lo que significa convertir cualquier carácter hash en la URL de datos a %23.

Robert Longson avatar Jun 09 '2015 13:06 Robert Longson

Puedes usar la encodeURIComponent(uri)función de JS.

Esta función codifica caracteres especiales y también puede codificar los siguientes caracteres:, / ? : @ & = + $ #

Referencia: https://www.w3schools.com/jsref/jsref_encodeuricomponent.asp

abhijeet badale avatar Jan 07 '2019 17:01 abhijeet badale

Para cualquiera que tenga este problema de codificación al intentar usar una URL con variables sass (para rellenos, por ejemplo), lo siguiente es bastante útil: https://gist.github.com/JacobDB/0ffffaf8e772c12acf7102edb8a302be

Tenga en cuenta que es posible que deba editar la URL de salida desde inline-svg según sus necesidades (en mi caso, estaba usando data:image/svg+xml;utf8en su lugar)

Brad avatar Oct 09 '2018 22:10 Brad

Aquí se hizo referencia a una pregunta relacionada "el color de relleno
svg no funciona con colores hexadecimales ".
El ejemplo dado fue:

Correcto: <ruta de relleno='red'... No correcto: <ruta de relleno='#FF0000'...

Encontré un problema similar al intentar exportar un svg usando XMLSerializer. El svg exportado se truncó después del carácter #. En mi caso, la sustitución %23 por # no funcionó.

Pude solucionar el problema reemplazando la constante hexadecimal con la función rgb() y valores decimales. Por ejemplo, fill="#FF0000" se convierte en fill="rgb(255,0,0)"

Joseph Austin avatar Sep 24 '2020 13:09 Joseph Austin