Tho*_*Lai 29 css browser firefox opera internet-explorer
我有一个问题css:当我尝试做
-webkit-filter: blur(1px);
-moz-filter: blur(1px);
-ms-filter: blur(1px);
-o-filter: blur(1px);
filter: blur(1px);
Run Code Online (Sandbox Code Playgroud)
它在safari和chrome中看起来很完美,但在Firefox,Opera或IE中根本没有出现模糊.这些浏览器是否支持它?或者是否有另一种让整个页面变得模糊的方法?
小智 44
尝试使用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');
}Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
小智 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');
Run Code Online (Sandbox Code Playgroud)
小智 8
这是一种适用于所有浏览器(包括IE 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;
}Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div id="image" class="blur"></div>
</div>Run Code Online (Sandbox Code Playgroud)
演示:http: //codepen.io/rkogan/pen/jPdGoM/
我尝试了上述所有方法,但是像往常一样,Internet Explorer/Microsoft Edge希望以不同的方式做事,所以我无法让它保持一致.
最后,我不得不跳过一系列的箍,让它在我想要的所有现代浏览器中运行:
使用已经提到过的CSS,这样它就可以在非IE浏览器上运行,而不需要用于IE的修复开销:
-webkit-filter: blur(1px);
-moz-filter: blur(1px);
-ms-filter: blur(1px);
-o-filter: blur(1px);
filter: blur(1px);
Run Code Online (Sandbox Code Playgroud)检测是否正在使用此JavaScript使用Internet Explorer/Microsoft Edge (感谢Mario).
如果检测到Internet Explorer/Microsoft Edge,则将图像加载到img页面上的隐藏字段中.您必须使用该onload功能确保图像在您操作之前已加载,否则下一步失败(感谢Josh Stodola):
var img = new Image();
img.onload = function() { blurTheImage(); }
img.src = "http://path/to/image.jpg";
Run Code Online (Sandbox Code Playgroud)使用适用于IE和Edge的StackBlur JavaScript(感谢Mario Klingemann).该图像应由CORS提供.
HTML:
<div id="ie-image-area" style="display: none;">
<img id="ie-image"/>
<canvas id="ie-canvas"></canvas>
</div>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
function blurTheImage() {
$("#ie-image").attr("src", "http://path/to/image.jpg");
StackBlur.image('ie-image', 'ie-canvas', 1, false);
}
Run Code Online (Sandbox Code Playgroud)
碰巧我想设置为背景,所以我必须在设置数据之前转换图像(感谢user3817470):
imageLinkOrData = document.querySelector('#ie-canvas').toDataURL("image/png");
$('#background-image').css('background-image', 'url(' + imageLinkOrData + ')');
Run Code Online (Sandbox Code Playgroud)一旦加载和模糊我然后使用CSS和透明度类淡化它,因为jQuery fadeTo看起来不太好(感谢Rich Bradshaw):
$('#background-image').toggleClass('transparent');
Run Code Online (Sandbox Code Playgroud)Phew,我想我需要休息一下(或者更强大的东西!).
它的一个样本工作(感谢Alex78191):
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';
}Run Code Online (Sandbox Code Playgroud)
img {
filter: blur(4px);
display: none;
}Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
听起来不错,目前支持它的有:
以下是 David Walsh(在 Mozilla 工作)撰写的关于 Internet Explorer 特定过滤器的文章,例如运动模糊:
.blur { filter:blur(add = 0, direction = 300, strength = 10); }
Run Code Online (Sandbox Code Playgroud)
看来正常的模糊支持在 Internet Explorer 中是不完整的,我并不感到惊讶,尤其是 9 之前的版本。