CSS 3で点滅/点滅するテキストを作成する方法


288

現在、私はこのコードを持っています:

@-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ます。それは可能ですか?


1
このページの右側に見てみる場合は、題したコラムがある関連の多くの「関連」トピックを。それらのいくつかを見てみましょう..あなたが必要とするすべてを学ぶことができるでしょう。
Milche Patern

2
:あなたはブラッドショーのCSS遷移に関するクイックコース取ることができますcss3.bradshawenterprises.com
Milche摂餌

82
彼が自分のテキストを点滅させたいのであれば、彼は自分のテキストを点滅させたいのです。何年でもかまいません。世界で最も革新的な人々は、ルールに従って生活していない人々です。全く逆で、彼らは通常それらを壊し、次に、誰もがそれらをコピーします。アップルはその良い例だと思います。Mackieなどもそうです。人々が自分の意見をそのままにして、質問に答えるだけでいいと思います:-)言ったように、問題はありません。少し厳しいように聞こえますが、私は誰かを怒らせないで挑発したくありません。何恨みっこない。;-)
ローレンス


回答:


657

最初に設定しopacity: 1;、次にで終了します0。そのため、で始まり、0%で終了します100%。代わりに、不透明度を0atに設定するだけ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ここで私の詳細なコードを参照できます


コメントしたように、これは古いバージョンのInternet Explorerでは機能しません。そのためには、jQueryまたはJavaScriptを使用する必要があります...

(function blink() {
  $('.blink_me').fadeOut(500).fadeIn(500, blink);
})();

より良いアプローチを提案しくれたAlnitakに感謝します。

デモ (jQueryを使用したブリンカー)


7
これを1つのテキスト要素に適用すると、Firefoxを使用している私のコンピューターで途方もない量のCPUを消費することに気づきました。注意してください。
Alex

2
最もわかりやすいソリューションを利用できるようにするための最良の答え
elad silver

4
@ Mr.Alien 2つの間に同期はありません-フェードはタイマーよりも少し長くかかり(そしてタイマーはいずれにせよ信頼性がありません)、最終的には要素にキューされたアニメーションの無制限のキューで終わる可能性があります。正しいアプローチは、タイマーなしで実行blinkerし、.fadeIn呼び出しへの完了コールバックとして「再帰的に」呼び出します。
Alnitak

3
Mr.Alien @も全体のことは、単に生命維持可能性-この1行は、最初の呼び出しを含む全体のことを行います: (function blink() { $('.blink_me').fadeOut(500).fadeIn(500, blink); })();
オリオン座ゼータ星

2
step-end代わりにlinear私が欲しかったものでした。
Alex S

71

alternate値を使用しますanimation-direction(この方法で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バージョンのみを使用しないでください。後に接頭辞なしのものも追加します。より少ないコードを記述したい場合は、省略形を使用ます。


速く点滅させる方法は?1.7sを変更すると混乱します。
Alex G

1
@AlexG cubic-bezierパーツをease-in-out別のものに置き換えることができます:cubic-bezier.com
Danilo Bargen

+すべての興味深いものは非線形であるため、3次
ベジエに

57

従来のように、純粋な「100%オン、100%オフ」の点滅を実現する最良の方法<blink>は次のとおりです。

.blink {
  animation: blinker 1s step-start infinite;
}

@keyframes blinker {
  50% {
    opacity: 0;
  }
}
<div class="blink">BLINK</div>


5
唯一の真の「点滅」ソリューション。また、colorプロパティなどでも機能します。その他の回避策または「フェード」アニメーションです。
Martin Schneider

15

または、表示と非表示を段階的に切り替えたくない場合(テキストカーソルの点滅など)、次のように使用できます。

/* 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よりも優れたデフォルトである可能性さえあります。JSアニメーションが遅くなるのは、多くのDOM呼び出し(JQueryの$ .animate()など)であることは注目に値します。

また.cursor、後で要素を追加した場合でも.cursor、状態が共有されているため、要素が他のとまったく同時にアニメーション化するという2番目の利点があります。これは、CSSでは私が知る限り不可能です。


これはiOS Safari以外ではうまく機能します。Safariで動作させるためのアイデアはありますか?
Joe Orost、2015

@JoeOrost CSSアニメーションをサポートしないブラウザー用のJS代替を含めました。私の意見では、それは一般的に実際にはより良い解決策かもしれません!
MattSturgeon、2015年

14

なぜなのかはわかりませんが、visibilityプロパティのみのアニメーションがどのブラウザでも機能しません。

あなたができることはopacity、ブラウザがテキストをフェードインまたはフェードアウトするのに十分なフレームを持たないような方法でプロパティをアニメーション化することです。

例:

span {
  opacity: 0;
  animation: blinking 1s linear infinite;
}

@keyframes blinking {
  from,
  49.9% {
    opacity: 0;
  }
  50%,
  to {
    opacity: 1;
  }
}
<span>I'm blinking text</span>


2
これはばかげています-使用してstep-startください(私の答えを参照してください)。
Timmmm、

完璧、まさに私が探していたもの。いいぞ。
Samuel Ramzan

9

期間と不透明度を適切に変更します。

.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; } 
}

9
@-webkit-keyframes blinker {  
  0% { opacity: 1.0; }
  50% { opacity: 0.0; }
  100% { opacity: 1.0; }
}


4

遅くなったが、キーフレームを追加した新しいキーフレームを追加したかった... 組み込みのコードスニペットに問題があったため、ここに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>


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>

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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.