jquery - CSS 滤镜模糊 : Prevent Undefined Image Edges on a Blurred Image during CSS Transition

标签 jquery css css-transitions css-filters

防止图像具有未定义的模糊边缘可以通过添加负边距来实现,但是在 CSS 转换期间这会失败。在添加或删除滤镜模糊类时,如何在 CSS 过渡期间保持图像边缘的定义?

测试于:

  • Firefox 37:效果很好!
  • Chrome 42:图像和 父元素遇到闪烁/模糊/未定义的图像
  • IE9:没那么多...

查看我的示例:Codepen

HTML:

<link href='http://fonts.googleapis.com/css?family=Montserrat' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Hind' rel='stylesheet' type='text/css'>
<div class="container">
  <img class="blur" src="http://budgetstockphoto.com/bamers/stock_photo_spectrum.jpg"/>
</div>
<div class="col">
<h2 class="montserrat">Hover Over Image</h2>
<hr>
  <p class="hind">Preventing an image from having undefined blurry edges can be achieved by adding negative margin, but during a CSS transition this fails.  As you can see, on-hover, the edges of the image become undefined/blurred.  How can you keep the edges of an image defined during a CSS transition while applying or removing filter blur?<br><br>Hover over the image!</p>
</div>

CSS:

html,body{
  margin:0;
  text-align:center;
  background:#F8F8F8;
  height:100%;
}

h2{
  margin:1em 0;
  padding:0;
  line-height:1;
  color:#111;
}
p{
  margin:1em 0;
  padding:0;
  line-height:1;
  text-align:justify;
  color:#999;
}

.montserrat{
    font-family: 'Montserrat', sans-serif;
}
.hind{
    font-family: 'Hind', sans-serif;
}
hr { 
  width:100%;
  display: block; 
  height: 1px;
  border: 0; 
  border-top: 1px solid #222;
  margin: 1em 0; 
  padding: 0; 
  line-height:0;
}

.col{
  max-width:400px;
  display:inline-block;
  height:100%;
  float:left;
  background:#333;
  padding-left:20px;
  padding-right:20px;
}

.container{
  top: 50%;
  left: 50%;
  transform: translate(-50%,-50%);
  width:10%;
  display:inline-block;
  padding-top:10%;
  position:absolute;
  overflow:hidden !important;
  border-radius:50%;
  -webkit-filter: blur(0px); -moz-filter: blur(0px); -o-filter: blur(0px); -ms-filter: blur(0px); filter: blur(0px);/*prevents image from overflowing*/
}

.container img{
  position:absolute;
  min-width:calc(100% + 30px);
  height:calc(100% + 30px);
  left:-15px;
  right:-15px;
  top:-15px;
  bottom:-15px;
  -webkit-transition: .5s ease-in-out;
}

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

一点jQuery:

$(document).ready(function(){
    $('img').hover(function(){
        $(this).toggleClass('blur');
    }); 
});

最佳答案

在 Chrome 上你可以添加

  backface-visibility: hidden;

在您的图片上,它修复了一些模糊问题。

关于jquery - CSS 滤镜模糊 : Prevent Undefined Image Edges on a Blurred Image during CSS Transition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30079452/

相关文章:

css - Bootstrap 结果在 Chrome 中出错

html - 在 w3c 中验证时出现 CSS 解析错误

css - 利用 css 转换和转换为 wordpress 构建多级菜单。问题 : does not work in IE

javascript - 未使用转换的 CSS3 转换?

javascript - 在特定的时间或时间淡入淡出

asp.net - 是否有理由更喜欢 jQuery.Ajax 而不是 asp.net UpdatePanel?

javascript - CSS id 选择器是行不通的

css - 使用 'all' 属性时具有 CSS 多重转换的 Buggy 闪烁效果

jquery - 通过链接替换 Sprite 图像

javascript - 在 Canvas 上绘制形状