目前,我有这段代码:
@-webkit-keyframes blinker {
from { opacity: 1.0; }
to { opacity: 0.0; }
}
.waitingForConnection {
-webkit-animation-name: blinker;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: cubic-bezier(.5, 0, 1, 1);
-webkit-animation-duration: 1.7s;
}
它闪烁,但它只在“一个方向”闪烁。我的意思是,它只会消失,然后它会显示回opacity: 1.0
,然后再次淡出,再次出现,等等...我希望它淡出,然后从这个淡入淡出“提升”再回到opacity: 1.0
。这可能吗?
答案 0 :(得分:531)
您首先设置opacity: 1;
,然后在0
上结束,因此它从0%
开始,到100%
结束,因此只需将不透明度设置为{{ 1}}在0
,休息会照顾好自己。
50%
.blink_me {
animation: blinker 1s linear infinite;
}
@keyframes blinker {
50% {
opacity: 0;
}
}
此处,设置动画持续时间应为<div class="blink_me">BLINK ME</div>
,而不是将1 second
设置为timing
,这意味着它将始终保持不变,并且最后一次使用linear
意味着它会继续下去。
注意:如果这对您不起作用,请使用浏览器前缀
infinite
和-webkit
所需的-moz
,animation
等等@keyframes
。您可以参考我的详细代码here
如评论所述,这不适用于旧版本的Internet Explorer,因为您需要使用jQuery或JavaScript ....
(function blink() {
$('.blink_me').fadeOut(500).fadeIn(500, blink);
})();
感谢Alnitak建议better approach。
Demo (使用jQuery的Blinker)
答案 1 :(得分:65)
使用animation-direction
的 alternate
值(您不需要以这种方式添加任何keframe)。
alternate
动画应该在每个循环中反转方向。反向播放时,向后执行动画步骤。此外,定时功能也相反;例如,当反向播放时,轻松动画会被轻松动画取代。确定它是偶数还是奇数迭代的计数从1开始。
<强> CSS 强>:
.waitingForConnection {
animation: blinker 1.7s cubic-bezier(.5, 0, 1, 1) infinite alternate;
}
@keyframes blinker { to { opacity: 0; } }
我删除了from
关键帧。如果它丢失,它将从您为元素设置的动画属性(在这种情况下为opacity
)生成的值生成,或者如果您尚未设置它(在这种情况下您没有) ,来自默认值(1
为opacity
)。
请不要只使用WebKit版本。在它之后添加未加前缀的那个。如果您只想编写更少的代码,请使用the shorthand。
答案 2 :(得分:43)
获得纯正&#34; 100%开启,100%折扣&#34;的最佳方式眨眼,就像旧的<blink>
一样:
.blink {
animation: blinker 1s step-start infinite;
}
@keyframes blinker {
50% {
opacity: 0;
}
}
&#13;
<div class="blink">BLINK</div>
&#13;
答案 3 :(得分:15)
或者,如果您不希望在show和hide之间逐渐过渡(例如闪烁的文本光标),您可以使用以下内容:
/* Also use prefixes with @keyframes and animation to support current browsers */
@keyframes blinker {
from { visibility: visible }
to { visibility: hidden }
/* Alternatively you can do this:
0% { visibility: visible; }
50% { visibility: hidden; }
100% { visibility: visible; }
if you don't want to use `alternate` */
}
.cursor {
animation: blinker steps(1) 500ms infinite alternate;
}
每个1s
.cursor
都会从visible
转到hidden
。
如果不支持CSS动画(例如在某些版本的Safari中),您可以回退到这个简单的JS间隔:
(function(){
var show = 'visible'; // state var toggled by interval
var time = 500; // milliseconds between each interval
setInterval(function() {
// Toggle our visible state on each interval
show = (show === 'hidden') ? 'visible' : 'hidden';
// Get the cursor elements
var cursors = document.getElementsByClassName('cursor');
// We could do this outside the interval callback,
// but then it wouldn't be kept in sync with the DOM
// Loop through the cursor elements and update them to the current state
for (var i = 0; i < cursors.length; i++) {
cursors[i].style.visibility = show;
}
}, time);
})()
这个简单的JavaScript实际上非常快,在许多情况下甚至可能是比CSS更好的默认值。值得注意的是,很多DOM调用使JS动画变慢(例如JQuery的$ .animate())。
它还有第二个好处,即如果稍后添加.cursor
个元素,它们仍会在与共享状态的其他.cursor
完全相同的时间生成动画,这对于CSS来说是不可能的据我所知。
答案 4 :(得分:12)
我不知道为什么但仅动画visibility
属性不能在任何浏览器上运行。
您可以做的是为opacity
属性设置动画,使浏览器没有足够的帧来淡入或淡出文本。
示例:
span {
opacity: 0;
animation: blinking 1s linear infinite;
}
@keyframes blinking {
from,
49.9% {
opacity: 0;
}
50%,
to {
opacity: 1;
}
}
&#13;
<span>I'm blinking text</span>
&#13;
答案 5 :(得分:8)
@-webkit-keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.0; }
100% { opacity: 1.0; }
}
答案 6 :(得分:8)
更改持续时间和不透明度以适应。
.blink_text {
-webkit-animation-name: blinker;
-webkit-animation-duration: 3s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
-moz-animation-name: blinker;
-moz-animation-duration: 3s;
-moz-animation-timing-function: linear;
-moz-animation-iteration-count: infinite;
animation-name: blinker;
animation-duration: 3s;
animation-timing-function: linear;
animation-iteration-count: infinite; color: red;
}
@-moz-keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.3; }
100% { opacity: 1.0; }
}
@-webkit-keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.3; }
100% { opacity: 1.0; }
}
@keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.3; }
100% { opacity: 1.0; }
}
答案 7 :(得分:2)
最近但想添加一个具有更多关键帧的新代码...这是example on CodePen,因为内置代码段存在问题:
.block{
display:inline-block;
padding:30px 50px;
background:#000;
}
.flash-me {
color:#fff;
font-size:40px;
-webkit-animation: flash linear 1.7s infinite;
animation: flash linear 1.7s infinite;
}
@-webkit-keyframes flash {
0% { opacity: 0; }
80% { opacity: 1; color:#fff; }
83% { opacity: 0; color:#fff; }
86% { opacity: 1; color:#fff;}
89% { opacity: 0}
92% { opacity: 1; color:#fff;}
95% { opacity: 0; color:#fff;}
100% { opacity: 1; color:#fff;}
}
@keyframes flash {
0% { opacity: 0; }
80% { opacity: 1; color:#fff; }
83% { opacity: 0; color:#fff; }
86% { opacity: 1; color:#fff;}
89% { opacity: 0}
92% { opacity: 1; color:#fff;}
95% { opacity: 0; color:#fff;}
100% { opacity: 1; color:#fff;}
}
<span class="block">
<span class="flash-me">Flash Me Hard</span>
</span>
答案 8 :(得分:1)
我的解决方案:
.blink {
animation: blinkMe 2s linear infinite;
}
@keyframes blinkMe {
0% {
opacity: 0;
}
50% {
opacity: 1;
}
100% {
opacity: 0;
}
}
<p class="blink">Blink</p>
我使用blinkMe作为动画名称,持续时间为2s,时间为线性,无限以使其永远重复。
我们需要为旧版浏览器使用 JavaScript 和 jQuery,因为它们不支持动画和/或 @keyframes:
$(document).ready(function() {
window.setInterval(function() {
$(".blink").fadeIn(1000).fadeOut(1000);
}, 2000)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<p class="blink">Blink</p>
如果你想制作一个像眨眼标签一样工作的眨眼效果,这会起作用:
.blink {
animation: blink 0.5s step-start infinite;
}
@keyframes blink {
0% {
opacity: 1;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
<p class="blink">Blink</p>
如果您想调整速度,请更改持续时间。
答案 9 :(得分:0)
<style>
.class1{
height:100px;
line-height:100px;
color:white;
font-family:Bauhaus 93;
padding:25px;
background-color:#2a9fd4;
border:outset blue;
border-radius:25px;
box-shadow:10px 10px green;
font-size:45px;
}
.class2{
height:100px;
line-height:100px;
color:white;
font-family:Bauhaus 93;
padding:25px;
background-color:green;
border:outset blue;
border-radius:25px;
box-shadow:10px 10px green;
font-size:65px;
}
</style>
<script src="jquery-3.js"></script>
<script>
$(document).ready(function () {
$('#div1').addClass('class1');
var flag = true;
function blink() {
if(flag)
{
$("#div1").addClass('class2');
flag = false;
}
else
{
if ($('#div1').hasClass('class2'))
$('#div1').removeClass('class2').addClass('class1');
flag = true;
}
}
window.setInterval(blink, 1000);
});
</script>
答案 10 :(得分:0)
通过对各个元素使用 class = blink ,它对我有用
简单的JS代码
// Blink
setInterval(function()
{
setTimeout(function()
{
//$(".blink").css("color","rgba(0,0,0,0.1)"); // If you want simply black/white blink of text
$(".blink").css("visibility","hidden"); // This is for Visibility of the element
},900);
//$(".blink").css("color","rgba(0,0,0,1)"); // If you want simply black/white blink of text
$(".blink").css("visibility","visible"); // This is for Visibility of the element
},1000);
答案 11 :(得分:0)
.neon {
font-size: 20px;
color: #fff;
text-shadow: 0 0 8px yellow;
animation: blinker 6s;
animation-iteration-count: 1;
}
@keyframes blinker {
0% {
opacity: 0.2;
}
19% {
opacity: 0.2;
}
20% {
opacity: 1;
}
21% {
opacity: 1;
}
22% {
opacity: 0.2;
}
23% {
opacity: 0.2;
}
36% {
opacity: 0.2;
}
40% {
opacity: 1;
}
41% {
opacity: 0;
}
42% {
opacity: 1;
}
43% {
opacity: 0.5;
}
50% {
opacity: 1;
}
100% {
opacity: 1;
}
}
我使用了 font-family: "Quicksand", sans-serif;
这是字体的导入(在style.css的顶部)
@import url("https://fonts.googleapis.com/css2?family=Quicksand:wght@300&display=swap");
答案 12 :(得分:0)
如果你想要流畅的动画,试试这个。
.blink {
animation: blinker 1s infinite;
}
@keyframes blinker {
from { opacity: 1.0; }
50% { opacity: 0.5; }
to { opacity: 1.0; }
}
.
<span class="blink">I am blinking</span>