Фильтр SVG работает только при добавлении в атрибут стиля (Firefox)
Я добавил эффект blur svg в свой HTML (текст/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>
Что я упоминаю в своем листе CSS:
#page-container {
filter: url("#svgBlur");
-webkit-filter: blur(8px);
}
Выполнение этого означает, что # page-container выглядит белым (FF не распознает SVG-фильтр).
Фанковая часть:
Когда я отключу указанное правило фильтра в Firebug и прочитал его в атрибуте style # page-container, он работает как прелесть.
<div id="page-container" style="filter: url("#svgBlur");">
Что я наблюдаю?
Заголовки ответов:
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
Ответы
Ответ 1
Я включил svg как строку base64 непосредственно в файл css.
Это решило мою проблему.
filter:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGZpbHRlciBpZD0ic3ZnQmx1ciI+PGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VHcmFwaGljIiBzdGREZXZpYXRpb249IjgiLz48L2ZpbHRlcj48L3N2Zz4=#svgBlur)
Ответ 2
#svgBlur
- относительный URL. Он преобразуется в абсолютный URL, добавляя имя файла, в котором он находится, поэтому
filter: url("#svgBlur");
в вашем случае действительно просто сокращение для
filter: url("stylesheet.css#svgBlur");
Что не указывает на что-либо.
Вам нужно поместить имя файла html в URL
filter: url("yourhtmlfile.html#svgBlur");
будет работать. И поэтому он работает, когда он в html файле, конечно, поскольку добавленное имя файла указывает на нужное место в этом случае.
Ответ 3
Кажется, что отлично работает в firefox, например,
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 (с изображением в div)
JSFIDDLE (с фоновым изображением на div)
Вы включили код svg
в свою разметку html?
Ответ 4
Я пробовал все способы решить эту проблему, не создавая inline-filter (с базой base64 в css) из этого потока, включая использование полного пути к .svg файлу в url(), но единственный метод решил эту проблему для меня. Firefox видит фильтр только в том случае, если вы применяете правило CSS в атрибуте стиля элемента или определяете правила CSS в встроенном теге <style></style>
.
Ответ 5
Моя проблема, которая привела меня сюда, заключалась в том, что я скрыл SVG внутри div с "display: none", встроенным в класс.
Ответ 6
Что сказал zelanix выше... о добавлении a. перед фильтром, как в
.blur1 {
filter:url(.#blur1);
}
Есть ли трюк на 100% и работает во всех браузерах из того, что я могу сказать