有没有一种仅使用CSS就能使元素(至少是文本)从左到右或者从右到左淡入淡出的方法?
这里展示了我想要的效果:
如果需要jQuery的话,作为备选方案也可以接受。
有没有一种仅使用CSS就能使元素(至少是文本)从左到右或者从右到左淡入淡出的方法?
这里展示了我想要的效果:
如果需要jQuery的话,作为备选方案也可以接受。
是的,您可以使用CSS3动画(在这里检查浏览器支持情况)。
这里有一个简单的文字淡出示例。
HTML:
.text {
position:relative;
line-height:2em;
overflow:hidden;
}
.fadingEffect {
position:absolute;
top:0; bottom:0; right:0;
width:100%;
background:white;
-moz-animation: showHide 5s ease-in alternate infinite; /* Firefox */
-webkit-animation: showHide 5s ease-in alternate infinite; /* Safari and Chrome */
-ms-animation: showHide 5s ease-in alternate infinite; /* IE10 */
-o-animation: showHide 5s ease-in alternate infinite; /* Opera */
animation: showHide 5s ease-in alternate infinite;
}
@-webkit-keyframes showHide { /* Chrome, Safari */
0% {width:100%}
40% {width:0%}
60% {width:0%;}
100% {width:100%;}
}
@-moz-keyframes showHide { /* FF */
0% {width:100%}
40% {width:0%}
60% {width:0%;}
100% {width:100%;}
}
@-ms-keyframes showHide { /* IE10 */
0% {width:100%}
40% {width:0%}
60% {width:0%;}
100% {width:100%;}
}
@-o-keyframes showHide { /* Opera */
0% {width:100%}
40% {width:0%}
60% {width:0%;}
100% {width:100%;}
}
@keyframes showHide {
0% {width:100%}
40% {width:0%}
60% {width:0%;}
100% {width:100%;}
}
<div class="text">
There is some text here!
<div class="fadingEffect"></div>
</div>
CSS:
正如您所看到的,边框之间存在明显的对比。如果您使用图像渐变而不是纯白背景,则会呈现更好的效果。
然后,您可以在IE9及以下版本中使用jQuery回退。
var textWrapper = document.querySelector('.demo');
textWrapper.innerHTML = textWrapper.textContent.replace(/\S/g, "<span class='letter'>$&</span>");
anime.timeline({loop: true})
.add({
targets: '.demo .letter',
opacity: [0,1],
easing: "easeInOutQuad",
duration: 2250,
delay: (el, i) => 150 * (i+1)
}).add({
targets: '.demo',
opacity: 0,
duration: 1000,
easing: "easeOutExpo",
delay: 1000
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/2.0.2/anime.min.js"></script>
<h1 class="demo">Text animation demo</h1>
最受赞同的答案不能适用于任何背景(如图像),因为它创建了一个可见的覆盖元素。
这个示例适用于任何背景(在Firefox、Chrome和Edge上测试过)。
.fade-in-text {
animation: left-to-right-fade-in 1s ease-in;
-webkit-mask-repeat: no-repeat;
}
@keyframes left-to-right-fade-in {
0% {
-webkit-mask-size: 0%;
-webkit-mask-image: linear-gradient(
to right,
rgba(0, 0, 0, 1) 70%,
rgba(0, 0, 0, 0)
);
}
100% {
-webkit-mask-size: 100%;
-webkit-mask-image: linear-gradient(
to right,
rgba(0, 0, 0, 1) 70%,
rgba(0, 0, 0, 0)
);
}
}
<span class="fade-in-text">This is a text that fades in from left to right</span>