Imitando una etiqueta de parpadeo con animaciones CSS3


149

Realmente quiero hacer que un texto parpadee al estilo de la vieja escuela sin usar javascript o decoración de texto.

¡Sin transiciones, solo * parpadeo *, * parpadeo *, * parpadeo *!


EDITAR : Esto es diferente de esa pregunta porque pido parpadeo sin transiciones continuas, mientras que OP de las otras preguntas pregunta cómo reemplazar el parpadeo con transiciones continuas


1
Desafortunadamente, la mejor respuesta que he encontrado para esto fue eliminada por el póster original, @ m93a, por lo que aún no se puede votar. Creo que la respuesta debería ser eliminada y votada, ya que es la solución más simple que produce el mejor efecto de parpadeo, y funciona en todas las versiones actuales de los principales navegadores . También puede leer una breve publicación de blog sobre la misma solución en Emular <blink> usando la animación WebKit CSS3 .

Lo que no entiendo es por qué cada respuesta aquí parece tener la @-webkit-keyframesregla después de la @keyframesregla no prefijada , y algunas incluso tienen la -webkit-animationdeclaración después de la no prefijada.
BoltClock

@BoltClock: es porque las animaciones CSS3 son relativamente nuevas y aún no estables en los navegadores Webkit. El llamado "prefijo" está aquí para los desarrolladores que desean usar animaciones incluso si son inestables y no están terminadas.
m93a

@ m93a: Lo sé, pero pregunto por qué se colocan después de la regla sin prefijar y no antes (aparentemente no incluí esa frase en mi comentario original, mi error).
BoltClock

Respuestas:


242

El Netscape original <blink>tenía un ciclo de trabajo del 80%. Esto se acerca bastante, aunque lo real <blink>solo afecta al texto:

.blink {
  animation: blink-animation 1s steps(5, start) infinite;
  -webkit-animation: blink-animation 1s steps(5, start) infinite;
}
@keyframes blink-animation {
  to {
    visibility: hidden;
  }
}
@-webkit-keyframes blink-animation {
  to {
    visibility: hidden;
  }
}
This is <span class="blink">blinking</span> text.

Puede encontrar más información sobre las animaciones de fotogramas clave aquí .


2
Sí, es mucho más simple. Puede agregar el prefijo webkit para que funcione en Chrome y Safari.
m93a

2
Esto podría no funcionar en Chrome / safari sin los prefijos de webkit.
David Peláez

2
Lo que disfruto haciendo es, en lugar de hacer que blink sea una clase, hacer que blink sea una etiqueta (con blink { animation: blink 1s steps(5, start) infinite; -webkit-animation: blink 1s steps(5, start) infinite; }). De esa manera, puede usar la <blink>etiqueta, en lugar de <span class="blink">=)
416E64726577

Nota: Esta es solo la "imitación <blink>" solicitada por el OP. No se puede usar con, por ejemplo, la colorpropiedad como animación de "encendido-apagado".
Martin Schneider

97

Déjame mostrarte un pequeño truco.

Como dijo Arkanciscan , puedes usar transiciones CSS3. Pero su solución se ve diferente de la etiqueta original.

Lo que realmente necesitas hacer es esto:

@keyframes blink {
  50% {
    opacity: 0.0;
  }
}
@-webkit-keyframes blink {
  50% {
    opacity: 0.0;
  }
}
.blink {
  animation: blink 1s step-start 0s infinite;
  -webkit-animation: blink 1s step-start 0s infinite;
}
<span class="blink">Blink</span>

JSfiddle Demo


@ Cuarenta y dos Lo siento, olvidé el prefijo -webkit- . Funcionó, creo, para todos los navegadores reales, excepto Chrome y Safari. Ahora, después de la actualización, debería funcionar para Firefox, Chrome, Opera, Safari y MSIE10.
m93a

Tal como está escrito, esta respuesta funcionará en las versiones actuales de Firefox, Chrome, Safari e IE .

2
No funcionó debido a un error tipográfico: en la parte del kit web blink, faltaba el nombre de la animación . Fijo.
Andrea Ligios

1
Funciona bien, gracias, aquí está mi implementación basada en su solución: jsfiddle.net/gnx4mqc4
Hamid Behnam

1
@ m93a: Las 0% 100% { opacity: 1.0; }secciones parecen ser superfluas, ya que son predeterminadas, ¿no?
jamadagni

48

Prueba este CSS

@keyframes blink {  
  0% { color: red; }
  100% { color: black; }
}
@-webkit-keyframes blink {
  0% { color: red; }
  100% { color: black; }
}
.blink {
  -webkit-animation: blink 1s linear infinite;
  -moz-animation: blink 1s linear infinite;
  animation: blink 1s linear infinite;
} 
This is <span class="blink">blink</span>

Necesita prefijos específicos del navegador / proveedor: http://jsfiddle.net/es6e6/1/ .


1
No hay nada como -ms-animation u -o-animation y -moz-animation solo en la versión 15, no lo uses ahora. Mira caniuse.com para ver el soporte real. Lo siento, pero no aceptaré esta pregunta :( PD: puede usar 'editar' en las respuestas de otros.
m93a

Es solo mi viejo mal hábito: agregar sufijos a todas las nuevas propiedades CSS3. Respuesta actualizada.
Belyash

esto no es "parpadeo" sino "parpadeo-desvanecimiento".
Martin Schneider

30

En realidad, no es necesario visibilityo opacitysimplemente puede usarlo color, lo que tiene la ventaja de mantener cualquier "parpadeo" solo en el texto:

blink {
    display: inline;
    color: inherit;
    animation: blink 1s steps(1) infinite;
    -webkit-animation: blink 1s steps(1) infinite;
}
@keyframes blink { 50% { color: transparent; } }
@-webkit-keyframes blink { 50% { color: transparent; } }
Here is some text, <blink>this text will blink</blink>, this will not.

Violín: http://jsfiddle.net/2r8JL/


44
¡Maravilloso! Esta es la única solución que proporciona un parpadeo de solo texto. Todas las demás soluciones parpadean también en el fondo del elemento. Para probar, use un texto <span>con blanco sobre azul contra un <body>con fondo verde. Solo en esta solución, el fondo azul no parpadeará.
jamadagni

10

Voy al infierno por esto:

=keyframes($name)
  @-webkit-keyframes #{$name}
    @content
  @-moz-keyframes #{$name}
    @content
  @-ms-keyframes #{$name}
    @content
  @keyframes #{$name}
    @content


+keyframes(blink)
  25%
    zoom: 1
    opacity: 1

  65%
    opacity: 1 

  66%
    opacity: 0

  100%
    opacity: 0

body
  font-family: sans-serif
  font-size: 4em
  background: #222
  text-align: center

  .blink
    color: rgba(#fff, 0.9)
    +animation(blink 1s 0s reverse infinite)
    +transform(translateZ(0))

.table
  display: table
  height: 5em
  width: 100%
  vertical-align: middle

  .cell
    display: table-cell
    width: 100%
    height: 100%
    vertical-align: middle

http://codepen.io/anon/pen/kaGxC (sass with bourbon)


1
Su codepen genera un Undefined mixin 'experimental'.error y, por lo tanto, parece que no se compilará y mostrará la animación de parpadeo.

6

Otra variante

.blink {
    -webkit-animation: blink 1s step-end infinite;
            animation: blink 1s step-end infinite;
}
@-webkit-keyframes blink { 50% { visibility: hidden; }}
        @keyframes blink { 50% { visibility: hidden; }}
This is <span class="blink">blink</span>


2

Está funcionando en mi caso, parpadeando el texto a intervalos de 1 s.

.blink_me {
  color:#e91e63;
  font-size:140%;
  font-weight:bold;
  padding:0 20px 0  0;
  animation: blinker 1s linear infinite;
}

@keyframes blinker {
  50% { opacity: 0.4; }
}

-3

si quieres un efecto de brillo usa esto

@keyframes blink {
  50% {
    opacity: 0.0;
  }
}
@-webkit-keyframes blink {
  50% {
    opacity: 0.0;
  }
}

atom-text-editor::shadow  .bracket-matcher .region {
    border:none;
    background-color: rgba(195,195,255,0.1);
    border-bottom: 1px solid rgb(155,155,255);
    box-shadow: 0px 0px 9px 4px rgba(155,155,255,0.1);
    border-radius: 3px;
    animation: blink 2s steps(115, start) infinite;
    -webkit-animation: blink 2s steps(115, start) infinite;
}

-5

Encuentre a continuación la solución para su código.

@keyframes blink {
  50% {
    color: transparent;
  }
}

.loader__dot {
  animation: 1s blink infinite;
}

.loader__dot:nth-child(2) {
  animation-delay: 250ms;
}

.loader__dot:nth-child(3) {
  animation-delay: 500ms;
}
Loading <span class="loader__dot">.</span><span class="loader__dot">.</span><span class="loader__dot">.</span>

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.