Como fazer texto intermitente / intermitente com CSS 3?

actualmente, tenho este código:

@-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;
}
Pisca, mas só pisca em "uma direcção". Quer dizer, apenas desaparece, e depois aparece de volta com opacity: 1.0, depois de novo desaparece, aparece de novo, e assim por diante... Gostaria que desaparecesse, e depois "aumentar" a partir deste desvanecer novamente para opacity: 1.0. Isso é possível?

Author: Peter Mortensen, 2013-05-02

9 answers

Você é a primeira configuração opacity: 1; e então você está terminando em 0, então ele começa a partir de 0% e termina em 100% então, em vez de apenas definir opacidade para 0 em 50% e o descanso vai cuidar de si mesmo.

Demonstração

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

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

Aqui, a duração de animação da configuração am deve ser 1 second, do que a de am definir o timing a {[11] } Isso significa que será constante durante todo o tempo, e última am usando infinite Isso significa que vai continuar e no.

Nota: Se isto não funcionar para si, use prefixos do navegador como -webkit, -moz e assim por diante, conforme exigido para animation e @keyframes. Você pode se referir ao meu código detalhadotoma.


Como comentado, isso não vai funcionar em versões mais antigas do Internet Explorer, para isso, você precisa usar jQuery ou JavaScript....

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

graças a Alnitak por sugerir uma melhor abordagem.

Demonstração )

 454
Author: Mr. Alien, 2018-03-08 05:47:12

Pode Usar o alternate valor para animation-direction (e você não precisa adicionar qualquer keframes desta forma).

alternate

A animação deve inverter a direcção de cada ciclo. Ao jogar ao contrário, os passos de animação são realizados para trás. Além disso, as funções de timing também são revertidas; por exemplo, uma animação de ease-in é substituída por uma animação de ease-out quando jogado em reverso. A contagem a determinar se é um par ou um ímpar a iteração começa à uma.

CSS:

.waitingForConnection {
  animation: blinker 1.7s cubic-bezier(.5, 0, 1, 1) infinite alternate;  
}
@keyframes blinker { to { opacity: 0; } }
Removi o servidor de chaves. Se estiver em falta, é gerado a partir do valor que você definiu para a propriedade animada (opacity neste caso) no elemento, ou se você não a definiu (e você não definiu neste caso), a partir do valor padrão (que é 1 para opacity).

E por favor não use apenas a versão WebKit. Adicione o sem preconceitos depois dele também. Se você só quiser escrever menos código, use o estenografia .

 61
Author: Ana, 2016-05-18 18:31:46

A melhor maneira de obter um "100% ligado, 100% desligado" piscar, como o velho {[[2]} é assim:

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

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

Em alternativa, se não quiser uma transição gradual entre mostrar e esconder( por exemplo, um cursor de texto a piscar), poderá usar algo do género:

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

Cada 1s .cursor irá de visible para hidden.

Se a animação CSS não for suportada (por exemplo, em algumas versões do Safari), poderá recuar para este simples intervalo 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);
})()

Este JavaScript simples é realmente muito rápido e em muitos casos pode até ser um padrão melhor do que o CSS. Vale a pena notar que é muito de Dom chamadas que fazem JS animações lentas (por exemplo, jquery $.animar()).

Também tem a segunda vantagem de que se você adicionar .cursor elementos mais tarde, eles ainda irão animar exatamente ao mesmo tempo que outros .cursor desde que o estado é compartilhado, isso é impossível com CSS, tanto quanto eu sei.

 15
Author: MattSturgeon, 2015-11-13 00:31:47

Não sei porquê, mas animar apenas a propriedade {[[2]} não está a funcionar em nenhum navegador.

O que você pode fazer é animar a propriedade opacity de tal forma que o navegador não tenha estruturas suficientes para desvanecer o texto.

Exemplo:

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
Author: josketres, 2017-01-08 10:09:27

Mudar a duração e opacidade de acordo.

.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
Author: James Hilliard, 2016-01-12 21:01:40
@-webkit-keyframes blinker {  
  0% { opacity: 1.0; }
  50% { opacity: 0.0; }
  100% { opacity: 1.0; }
}
 6
Author: onon15, 2013-05-02 17:41:05
Mais tarde, mas queria adicionar um novo com mais keyframes ... aqui está um exemplo no CodePen uma vez que houve um problema com os excertos de código incorporados:
    .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
Author: 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
Author: Shahaji, 2018-04-11 12:40:51