CSS3 中带有过渡的延迟模糊滤镜
Delayed blur-filter with transition in CSS3
我需要先在加载后延迟过渡的元素上进行褪色模糊处理。其次另一个元素应该淡入。我正在使用 animate.css.
我正在使用 animate.css。
HTML
<div class="main">
<div class="wrapper">
<div id="target" class="blur>This element has a background-image, which should be blured</div>
</div>
<div class="content-layer">
<input id="searchMain" class="animated fadeIn delay">
</div>
</div>
CSS
.blur {
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-ms-filter: blur(5px);
-o-filter: blur(5px);
filter: blur(5px);
-webkit-transition: all 0.5s linear;
-moz-transition: all 0.5s linear;
-ms-transition: all 0.5s linear;
-o-transition: all 0.5s linear;
transition: all 0.5s linear;
-webkit-transition-delay: 1s;
transition-delay: 1s;
}
.delay {
-webkit-animation-delay: 1s;
-moz-animation-delay: 1s;
animation-delay: 1s;
}
有了这个,inputField 的延迟淡入效果很好。 target
也变得模糊。但是这个模糊不是动画也没有延迟。
由于您并不是特别要求仅 CSS/HTML 的解决方案,因此可以通过添加一些 jquery 来获得您想要的解决方案。
<div class="main">
<div class="wrapper">
<div id="target" class=">This element has a background-image, which should be blured</div><!-- Start without classes -->
</div>
<div class="content-layer">
<input id="searchMain" class="animated fadeIn delay">
</div>
</div>
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript" defer>
$(function() {
setTimeout(function(){
console.log('done waiting!'); // Just to verify the delay works
$('#target').addClass('blur');
}, 1000); // A delay of 1000ms
});
</script>
不用说,请确保动画效果如您所愿。这只是为了延迟,在页面加载之后。从这里开始,也很容易在此基础上进行构建。比如在用户滚动到元素时添加动画等等
更新为#target
如评论中所述,有问题的代码向 target
元素添加了 transition
和 transition-delay
,但没有发生转换的状态更改。
仅当由于 :hover
、:focus
等用户交互或由于在单击时添加 class 等脚本或超时等。因此,转换不适合您的目的,您应该考虑改用 animation
。与 transition
.
不同,动画可以在页面加载时自动启动
对于在页面加载延迟 1 秒后要模糊的元素,将元素的原始状态设置为未模糊状态,然后将其设置为动画 to
模糊状态,如下面的代码片段所示。
#target{
height: 100px;
width: 500px;
background: url(http://lorempixel.com/500/100);
}
.blur {
-webkit-animation: blur 0.5s linear forwards;
-moz-animation: blur 0.5s linear forwards;
-ms-animation: blur 0.5s linear forwards;
-o-animation: blur 0.5s linear forwards;
animation: blur 0.5s linear forwards;
-webkit-animation-delay: 1s;
-moz-animation-delay: 1s;
animation-delay: 1s;
}
.delay {
-webkit-animation-delay: 1s;
-moz-animation-delay: 1s;
animation-delay: 1s;
}
@-webkit-keyframes blur {
to {
-webkit-filter: blur(5px);
filter: blur(5px);
}
}
@-moz-keyframes blur {
to {
-moz-filter: blur(5px);
filter: blur(5px);
}
}
@keyframes blur {
to {
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
filter: blur(5px);
}
}
<div class="main">
<div class="wrapper">
<div id="target" class="blur">This element has a background-image, which should be blured</div>
</div>
<div class="content-layer">
<input id="searchMain" class="animated fadeIn delay">
</div>
</div>
我需要先在加载后延迟过渡的元素上进行褪色模糊处理。其次另一个元素应该淡入。我正在使用 animate.css.
我正在使用 animate.css。
HTML
<div class="main">
<div class="wrapper">
<div id="target" class="blur>This element has a background-image, which should be blured</div>
</div>
<div class="content-layer">
<input id="searchMain" class="animated fadeIn delay">
</div>
</div>
CSS
.blur {
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-ms-filter: blur(5px);
-o-filter: blur(5px);
filter: blur(5px);
-webkit-transition: all 0.5s linear;
-moz-transition: all 0.5s linear;
-ms-transition: all 0.5s linear;
-o-transition: all 0.5s linear;
transition: all 0.5s linear;
-webkit-transition-delay: 1s;
transition-delay: 1s;
}
.delay {
-webkit-animation-delay: 1s;
-moz-animation-delay: 1s;
animation-delay: 1s;
}
有了这个,inputField 的延迟淡入效果很好。 target
也变得模糊。但是这个模糊不是动画也没有延迟。
由于您并不是特别要求仅 CSS/HTML 的解决方案,因此可以通过添加一些 jquery 来获得您想要的解决方案。
<div class="main">
<div class="wrapper">
<div id="target" class=">This element has a background-image, which should be blured</div><!-- Start without classes -->
</div>
<div class="content-layer">
<input id="searchMain" class="animated fadeIn delay">
</div>
</div>
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript" defer>
$(function() {
setTimeout(function(){
console.log('done waiting!'); // Just to verify the delay works
$('#target').addClass('blur');
}, 1000); // A delay of 1000ms
});
</script>
不用说,请确保动画效果如您所愿。这只是为了延迟,在页面加载之后。从这里开始,也很容易在此基础上进行构建。比如在用户滚动到元素时添加动画等等
更新为#target
如评论中所述,有问题的代码向 target
元素添加了 transition
和 transition-delay
,但没有发生转换的状态更改。
仅当由于 :hover
、:focus
等用户交互或由于在单击时添加 class 等脚本或超时等。因此,转换不适合您的目的,您应该考虑改用 animation
。与 transition
.
对于在页面加载延迟 1 秒后要模糊的元素,将元素的原始状态设置为未模糊状态,然后将其设置为动画 to
模糊状态,如下面的代码片段所示。
#target{
height: 100px;
width: 500px;
background: url(http://lorempixel.com/500/100);
}
.blur {
-webkit-animation: blur 0.5s linear forwards;
-moz-animation: blur 0.5s linear forwards;
-ms-animation: blur 0.5s linear forwards;
-o-animation: blur 0.5s linear forwards;
animation: blur 0.5s linear forwards;
-webkit-animation-delay: 1s;
-moz-animation-delay: 1s;
animation-delay: 1s;
}
.delay {
-webkit-animation-delay: 1s;
-moz-animation-delay: 1s;
animation-delay: 1s;
}
@-webkit-keyframes blur {
to {
-webkit-filter: blur(5px);
filter: blur(5px);
}
}
@-moz-keyframes blur {
to {
-moz-filter: blur(5px);
filter: blur(5px);
}
}
@keyframes blur {
to {
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
filter: blur(5px);
}
}
<div class="main">
<div class="wrapper">
<div id="target" class="blur">This element has a background-image, which should be blured</div>
</div>
<div class="content-layer">
<input id="searchMain" class="animated fadeIn delay">
</div>
</div>