Comment faire un texte clignotant/clignotant avec CSS 3?

actuellement, j'ai ce code:

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

il clignote, mais il clignote seulement dans"une direction". Je veux dire, il disparaît seulement , puis il apparaît avec opacity: 1.0 , puis il disparaît de nouveau, apparaît à nouveau, et ainsi de suite... Je voudrais qu'il s'efface, et puis "raise" de ce fondu à nouveau à opacity: 1.0 . Est-ce possible?

180
demandé sur Peter Mortensen 2013-05-02 21:39:06

9 réponses

vous mettez d'abord opacity: 1; et ensuite vous le terminez sur 0 , donc il commence de 0% et se termine sur 100% donc à la place de l'opacité de 0 à 50% et le repos prendra soin de lui-même.

Démo

.blink_me {
  animation: blinker 1s linear infinite;
}

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

ici, la durée de l'animation de mise en place de am devrait être 1 second , que je mets le timing à linear ce qui signifie qu'il sera constant tout au long, et dernier am en utilisant infinite ce qui signifie qu'il va continuer et sur.

Note: si cela ne fonctionne pas pour vous, utilisez des préfixes de navigateur comme -webkit , -moz et ainsi de suite comme requis pour animation et @keyframes . Vous pouvez vous référer à mon code détaillé ici


comme commenté, cela ne fonctionnera pas sur les anciennes versions D'Internet Explorer, pour cela, vous devez utiliser jQuery ou JavaScript....

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

merci à Alnitak pour avoir suggéré une meilleure approche .

Démo (Clignotant à l'aide de jQuery)

454
répondu Mr. Alien 2018-03-08 05:47:12

utiliser la valeur alternate pour animation-direction (et vous n'avez pas besoin d'ajouter des keframes de cette façon).

alternate

l'animation doit inverser la direction de chaque cycle. En jouant à l'envers, les pas d'animation sont exécutés à l'envers. En outre, les fonctions de synchronisation sont également inversées; par exemple, une remplacé par une animation de facilité d'accès lorsqu'il est joué à l'envers. Le comte de déterminer s'il est pair ou impair itération commence à un.

CSS :

.waitingForConnection {
  animation: blinker 1.7s cubic-bezier(.5, 0, 1, 1) infinite alternate;  
}
@keyframes blinker { to { opacity: 0; } }

j'ai enlevé le cadre clé from . Si elle est manquante, elle est générée à partir de la valeur que vous avez définie pour la propriété animée ( opacity dans ce cas) sur l'élément, ou si vous ne l'avez pas définie (et vous ne l'avez pas dans ce cas), à partir de la valeur par défaut (qui est 1 pour opacity ).

et n'utilisez pas seulement la version WebKit. Ajouter le unprefixed un après. Si vous voulez juste écrire moins de code, utilisez le raccourci .

61
répondu Ana 2016-05-18 18:31:46

La meilleure façon d'obtenir un pur "est de 100%, 100% off" clignote, comme l'ancienne 151920920" est comme ceci:

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

@keyframes blinker {
  50% {
    opacity: 0;
  }
}
<div class="blink">BLINK</div>
18
répondu Timmmm 2018-03-08 05:44:57

alternativement si vous ne voulez pas une transition progressive entre show et hide (par exemple un curseur texte clignotant) vous pouvez utiliser quelque chose comme:

/* 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;
}

chaque 1s .cursor passera de visible à hidden .

si l'animation CSS n'est pas prise en charge (par exemple dans certaines versions de Safari), vous pouvez revenir à ce simple intervalle 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);
})()

ce JavaScript simple est en fait très rapide et dans de nombreux cas peut-être même être un meilleur défaut que le CSS. Il est intéressant de noter que c'est beaucoup d'appels DOM qui font ralentir les animations JS (par exemple $JQuery.animer.))(

il a également le deuxième avantage que si vous ajoutez .cursor éléments plus tard, ils vont encore animer exactement en même temps que d'autres .cursor s puisque l'état est partagé, cela est impossible avec CSS autant que je sache.

15
répondu MattSturgeon 2015-11-13 00:31:47

Je ne sais pas pourquoi mais animer seulement la propriété visibility ne fonctionne sur aucun navigateur.

ce que vous pouvez faire est d'animer la propriété opacity d'une manière telle que le navigateur n'a pas assez de cadres pour s'effacer dans ou hors du texte.

exemple:

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>
11
répondu josketres 2017-01-08 10:09:27

Changement de la durée et de l'opacité en fonction de.

.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
répondu James Hilliard 2016-01-12 21:01:40
@-webkit-keyframes blinker {  
  0% { opacity: 1.0; }
  50% { opacity: 0.0; }
  100% { opacity: 1.0; }
}
6
répondu onon15 2013-05-02 17:41:05

en retard mais voulait en ajouter un nouveau avec plus d'images clés ... voici un exemple sur le CodePen car il y avait un problème avec les snippets de code intégrés:

    .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>
1
répondu hsobhy 2018-08-23 15:25:26
<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>
-1
répondu Shahaji 2018-04-11 12:40:51