filter:blur(1px);在Firefox,Internet Explorer和Opera中不起作用

问题描述 投票:29回答:6

我有CSS的问题。当我尝试做的时候

-webkit-filter: blur(1px);
-moz-filter: blur(1px);
-ms-filter: blur(1px);
-o-filter: blur(1px);
filter: blur(1px);

它在Safari和Chrome中看起来很完美,但在Firefox,Opera或Internet Explorer中根本不显示模糊。这些浏览器是否支持它?或者是否有另一种让整个页面变得模糊的方法?

css internet-explorer firefox browser opera
6个回答
43
投票

尝试使用SVG过滤器。

img {
  filter: blur(3px);
  -webkit-filter: blur(3px);
  -moz-filter: blur(3px);
  -o-filter: blur(3px);
  -ms-filter: blur(3px);
  filter: url(#blur);
  filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius='3');
}
<img src="https://i.stack.imgur.com/oURrw.png" />

<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
   <filter id="blur">
       <feGaussianBlur stdDeviation="3" />
   </filter>
</svg>

14
投票
filter: blur(3px);
-webkit-filter: blur(3px);
-ms-filter: blur(3px);
filter: url("data:image/svg+xml;utf9,<svg%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'><filter%20id='blur'><feGaussianBlur%20stdDeviation='3'%20/></filter></svg>#blur");
filter:progid:DXImageTransform.Microsoft.Blur(PixelRadius='3'); 

8
投票

这是一种适用于所有浏览器(包括Internet Explorer 10/11)的新颖模糊技术,不需要过滤器,画布或JavaScript。

基本技术是缩小图像大小,然后在父级上使用3D缩放矩阵缩放回完整大小。这有效地对图像进行下采样并且产生粗糙的模糊效果。

body {
  font-family: Verdana;
  font-size: 14px;
  font-weight: bold;
}

.container {
  height: 500px;
  width: 500px;
  position: relative;
  overflow: hidden;
}

#image {
  background-image: url('http://i.imgur.com/HoWL6o3.jpg');
  background-size: contain;
  background-repeat: no-repeat;
  height: 100%;
  width: 100%;
  position: absolute;
}

#image.blur {
  transform: matrix3d(1, 0, 0, 0,
                      0, 1, 0, 0,
                      0, 0, 1, 0,
                      0, 0, 0, 0.05);
  background-size: 0 0;
}

#image.blur:before {
  transform: scale(0.05);
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  content: '';
  background-image: inherit;
  background-size: contain;
  background-repeat: inherit;
}
<div class="container">
  <div id="image" class="blur"></div>
</div>

但是:Kua zxsw指出


6
投票

我尝试了上述所有方法,但是像往常一样,Internet Explorer / Microsoft Edge希望以不同的方式做事,所以我无法让它保持一致。

最后,我不得不跳过一系列的箍,让它在我想要的所有现代浏览器中运行:

  1. 使用已经提到过的CSS,这样它就可以在非IE浏览器上运行,而不需要用于IE的修复开销: http://codepen.io/rkogan/pen/jPdGoM/
  2. 使用-webkit-filter: blur(1px); -moz-filter: blur(1px); -ms-filter: blur(1px); -o-filter: blur(1px); filter: blur(1px); 检测是否正在使用Internet Explorer / Microsoft Edge(感谢Mario)。
  3. 如果检测到Internet Explorer / Microsoft Edge,则将图像加载到页面上隐藏的this JavaScript字段中。你需要在操作之前使用img函数对onload执行此操作,否则下一步失败(感谢Josh Stodola): make sure the image has loaded
  4. 使用适用于IE和Edge的var img = new Image(); img.onload = function() { blurTheImage(); } img.src = "http://path/to/image.jpg"; JavaScript(感谢Mario Klingemann)。该图像应由CORS提供。 HTML: StackBlur JavaScript的: <div id="ie-image-area" style="display: none;"> <img id="ie-image"/> <canvas id="ie-canvas"></canvas> </div>
  5. 碰巧我想设置为背景,所以我必须在设置数据之前转换图像(感谢function blurTheImage() { $("#ie-image").attr("src", "http://path/to/image.jpg"); StackBlur.image('ie-image', 'ie-canvas', 1, false); } ): user3817470
  6. 一旦加载和模糊我然后在imageLinkOrData = document.querySelector('#ie-canvas').toDataURL("image/png"); $('#background-image').css('background-image', 'url(' + imageLinkOrData + ')'); 褪色,因为jQuery using CSS and a transparency class看起来不是很好(感谢Rich Bradshaw): fadeTo

Phew,我想我需要休息一下(或者更强大的东西!)。

它的一个样本工作(感谢Alex78191):

$('#background-image').toggleClass('transparent');
function detectIE() {
  return navigator.userAgent.search(/MSIE|Trident|Edge/) >= 0;
}

let image = document.querySelector('#img-for-blur');
image.src = image.getAttribute('data-src');
if (detectIE()) {
  image.onload = function() {
    StackBlur.image('img-for-blur', 'ie-canvas', 4, false);
  };
} else {
  image.style.display = 'block';
}
img {
  filter: blur(4px);
  display: none;
}

3
投票

这听起来是正确的,目前支持:

  • Chrome 18+
  • Chrome for Android 25+
  • Safari 6+
  • iOS Safari 6+
  • 黑莓浏览器10+

<script src="https://cdnjs.cloudflare.com/ajax/libs/stackblur-canvas/1.4.0/stackblur.js"></script> <img id="img-for-blur" data-src="https://i.stack.imgur.com/oURrw.png"> <canvas id="ie-canvas"></canvas>

来自David Walsh的Reference(在Mozilla工作)在Internet Explorer特定的过滤器上,例如t motion blur:

Here is an article

看起来普通的模糊支持在Internet Explorer中看起来不完整,但我并不感到惊讶,特别是在9之前。


1
投票

您可以在基于Gecko的浏览器中执行SVG模糊过滤器。但是你上面的东西只是WebKit而不是标准化的,所以没有其他人支持它。

© www.soinside.com 2019 - 2024. All rights reserved.