html css firefox svg svg-filters

html - El filtro SVG solo funciona cuando se agrega en el atributo de estilo(Firefox)



css svg-filters (6)

He intentado todas las formas de resolver este problema sin hacer un filtro en línea (con la cadena base64 en css) desde este hilo, incluido el uso de la ruta completa al archivo .svg en url (), pero el único método resolvió este problema. Firefox ve el filtro solo si está aplicando la regla css en el atributo de estilo del elemento, o si define reglas css en la etiqueta en línea <style></style> .

Agregué un efecto svg a mi HTML (texto / html):

<html> <head>...</head> <body> ... <svg xmlns="http://www.w3.org/2000/svg" height="0"> <filter height="116%" width="116%" y="-8%" x="-8%" id="svgBlur"> <feGaussianBlur stdDeviation="8" in="SourceGraphic"/> </filter> </svg> </body> </html>

A lo que me refiero en mi hoja de CSS:

#page-container { filter: url("#svgBlur"); -webkit-filter: blur(8px); }

Hacer esto hace que el # page-container aparezca en blanco (FF no reconoce el filtro SVG).

La parte funky:

Cuando deshabilito la regla de filtro anterior en Firebug y la leí en el atributo de estilo del # contenedor de página, funciona como un encanto.

<div id="page-container" style="filter: url("#svgBlur");">

¿Qué estoy supervisando?

Cabeceras de respuesta:

Cache-Control no-cache, must-revalidate, post-check=0, pre-check=0 Connection Keep-Alive Content-Encoding gzip Content-Language nl Content-Length 6098 Content-Type text/html; charset=utf-8 Date Mon, 02 Dec 2013 14:47:01 GMT Etag "1385995621" Expires Sun, 19 Nov 1978 05:00:00 GMT Keep-Alive timeout=15, max=100 Last-Modified Mon, 02 Dec 2013 14:47:01 +0000 Link </nl/node/215271>; rel="canonical",</nl/node/215271>; rel="shortlink" Server Apache/2.2.3 (Red Hat) Vary Accept-Encoding X-Powered-By PHP/5.3.19

Problem on Firefox 25 OSX. Webkit browsers work fine, because they use the css blur filter


Incluí el svg como una cadena base64 directamente en el archivo css. Esto solucionó mi problema.

filter:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGZpbHRlciBpZD0ic3ZnQmx1ciI+PGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VHcmFwaGljIiBzdGREZXZpYXRpb249IjgiLz48L2ZpbHRlcj48L3N2Zz4=#svgBlur)


Lo que zelanix dijo anteriormente ... acerca de agregar un. antes del filtro como en

.blur1 { filter:url(.#blur1); }

Hace el truco al 100% y funciona en todos los navegadores por lo que puedo decir


Mi problema que me llevó aquí fue que había escondido el SVG dentro de un div con "display: none" incrustado en la clase.


Parece funcionar bien en Firefox como tal,

HTML

<svg xmlns="http://www.w3.org/2000/svg" height="0"> <filter height="116%" width="116%" y="-8%" x="-8%" id="svgBlur"> <feGaussianBlur stdDeviation="8" in="SourceGraphic"/> </filter> </svg> <div id="page-container"> <img src="http://miriadna.com/desctopwalls/images/max/Fairy-forest.jpg" alt="forest" /> </div>

JSFIDDLE (con una imagen en la div)

JSFIDDLE (con una imagen de fondo en el div)

¿Incluyó el código svg en su marca html?


#svgBlur es una URL relativa. Se convierte en una URL absoluta al anteponer el nombre del archivo en el que está

filter: url("#svgBlur");

en su caso es realmente una taquigrafía para

filter: url("stylesheet.css#svgBlur");

Lo que no apunta a nada.

Necesitas poner el nombre del archivo html en la URL

filter: url("yourhtmlfile.html#svgBlur");

trabajará. Y es por eso que funciona cuando está en el archivo html, por supuesto, ya que el nombre del archivo adjunto apunta al lugar correcto en ese caso.