使用CSS3滤镜模糊定义边缘

我用这段代码模糊了一些图像

img { filter: blur(5px); -webkit-filter: blur(5px); -moz-filter: blur(5px); -o-filter: blur(5px); -ms-filter: blur(5px); } 

尽pipe如此,图像的边缘也会变得模糊。 是否可以模糊图像,同时保持边缘定义? 像一个插图模糊或什么的?

你可以把它放在一个带有overflow: hidden;<div> overflow: hidden; 并将<img>设置为margin: -5px -10px -10px -5px;

演示: 的jsfiddle

产量

CSS

 img { filter: blur(5px); -webkit-filter: blur(5px); -moz-filter: blur(5px); -o-filter: blur(5px); -ms-filter: blur(5px); margin: -5px -10px -10px -5px; } div { overflow: hidden; }​ 

HTML

 <div><img src="http://placekitten.com/300" />​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​</div>​​​​​​​​​​​​ 

我能够用这个工作

transform: scale(1.03);

应用于图像的属性。 出于某种原因,在Chrome上,如果有相对定位的父元素,则提供的其他解决scheme将不起作用。

检查http://jsfiddle.net/ud5ya7jt/

这样,图像将被稍微放大3%,并且边缘将被裁剪,这对于模糊的图像应该不是问题。 它在我的情况很好,因为我使用高分辨率的图像作为背景。 祝你好运!

我使用了-webkit-transform: translate3d(0, 0, 0); overflow:hidden;

DOM:

 <div class="parent"> <img class="child" src="http://placekitten.com/100" /> </div> 

CSS:

 .parent { width: 100px; height: 100px; overflow: hidden; -webkit-transform: translate3d(0, 0, 0); } .child { -webkit-filter: blur(10px); } 

DEMO: http : //jsfiddle.net/DA5L4/18/

这项技术适用于Chrome34和iOS7.1

更新

http://jsfiddle.net/DA5L4/50/

如果您使用最新版本的Chrome,则无需使用-webkit-transform: translate3d(0, 0, 0); 黑客攻击。 但它不适用于Safari(webkit)。

你也可以保留整个video,你不必切掉一些东西。
您可以在白色模糊的边缘上覆盖阴影。

这看起来非常好,以及:)

只需将此代码粘贴到您的video的父级:

 .parent { -webkit-box-shadow: inset 0 0 200px #000000; -moz-box-shadow: inset 0 0 200px #000000; box-shadow: inset 0 0 200px #000000; } 

在许多情况下,可以使IMG 位置:绝对 ,您可以使用剪辑来隐藏模糊的边缘 – 外部的DIV是不必要的。

 img { filter: blur(5px); -webkit-filter: blur(5px); -moz-filter: blur(5px); -o-filter: blur(5px); -ms-filter: blur(5px); position: absolute; clip: rect(5px,295px,295px;5px); } 

将图片插入到position: relative;overflow: hidden;

HTML

 <div><img src="#"></div> 

CSS

 div { position: relative; overflow: hidden; } img { filter: blur(5px); -webkit-filter: blur(5px); -moz-filter: blur(5px); -o-filter: blur(5px); -ms-filter: blur(5px); } 

这也适用于可变大小的元素,如dynamicdiv。

只是提示接受的答案,如果您使用绝对位置,负边界将不起作用,但您仍然可以将顶部,底部,左侧和右侧设置为负值,并使父元素溢出隐藏。

如果您不知道图像大小,将剪辑添加到绝对图像位置的答案会有问题。

自己今天解决了这个问题,我想提出一个解决scheme,(目前)在主stream浏览器上运行。 在这个页面上的其他一些答案确实有一次工作,但最近的更新,无论是浏览器或操作系统,已经无效的大部分/所有这些答案。

关键是把图像放在一个容器中,并进行转换:将容器从溢出中缩放:隐藏的父级。 然后,将模糊应用于容器内的img,而不是容器本身。

工作小提琴: https : //jsfiddle.net/x2c6txk2/

HTML

 <div class="container"> <div class="img-holder"> <img src="https://unsplash.it/500/300/?random"> </div> </div> 

CSS

 .container{ width: 90%; height:400px; margin: 50px 5%; overflow:hidden; position:relative; } .img-holder{ position:absolute; left:0; top:0; bottom:0; right:0; transform:scale(1.2,1.2); } .img-holder img{ width:100%; height:100%; -webkit-filter:blur(15px); -moz-filter:blur(15px); filter:blur(15px); } 

您可以尝试在其他元素上添加边框:

DOM:

 <div><img src="#" /></div> 

CSS:

 div { border: 1px solid black; } img { filter: blur(5px); } 

您可以通过剪切图像并应用将模糊效果设置为0像素的包装元素来阻止图像重叠其边缘。 这是它的样子:

HTML

 <div id="wrapper"> <div id="image"></div> </div> 

CSS

 #wrapper { width: 1024px; height: 768px; border: 1px solid black; // 'blur(0px)' will prevent the wrapped image // from overlapping the border -webkit-filter: blur(0px); -moz-filter: blur(0px); -ms-filter: blur(0px); filter: blur(0px); } #wrapper #image { width: 1024px; height: 768px; background-image: url("..http://img.dovov.comcats.jpg"); background-size: cover; -webkit-filter: blur(10px); -moz-filter: blur(10px); -ms-filter: blur(10px); filter: blur(10px); // Position 'absolute' is needed for clipping position: absolute; clip: rect(0px, 1024px, 768px, 0px); } 

我发现,在我的情况下,我不必添加包装。

我刚刚添加 –

 margin: -1px; 

要么

 margin: 1px; // any non-zero margin overflow: hidden; 

我模糊的元素是绝对定位的。

如果您使用的是背景图片,我发现的最好方法是:

 filter: blur(5px); margin-top: -5px; padding-bottom: 10px; margin-left: -5px; padding-right: 10px; 

这是我想出的解决scheme保持100%的形象,不需要作物:

基本上,我用3×3的网格对图像进行平铺,然后模糊一切,然后在中心图像上进行有效地放大以创build像重复边缘,当模糊后的效果时,有点奇怪css3没有像内置的重复边缘。

链接到方法/代码: 如何使用CSS3模糊图像而不裁剪或淡化边缘?