Bifurqué una demostración de CodePen que tenía el mismo problema al incrustar SVG en línea en CSS. Una solución que funciona con SCSS es construir una función simple de codificación de URL.
Se puede crear una función de reemplazo de cadena a partir de las funciones integradas str-slice, str-index (ver trucos css , gracias a Hugo Giraudel).
A continuación, basta con sustituir %
, <
, >
, "
, '
,
con los %xx
códigos:
@function svg-inline($string){
$result: str-replace($string, "<svg", "<svg xmlns='http://www.w3.org/2000/svg'");
$result: str-replace($result, '%', '%25');
$result: str-replace($result, '"', '%22');
$result: str-replace($result, "'", '%27');
$result: str-replace($result, ' ', '%20');
$result: str-replace($result, '<', '%3C');
$result: str-replace($result, '>', '%3E');
@return "data:image/svg+xml;utf8," + $result;
}
$mySVG: svg-inline("<svg>...</svg>");
html {
height: 100vh;
background: url($mySVG) 50% no-repeat;
}
También hay una image-inline
función auxiliar disponible en Compass, pero como no es compatible con CodePen, esta solución probablemente sea útil.
Demostración en CodePen: http://codepen.io/terabaud/details/PZdaJo/