Estoy tratando de animar una elipsis y me preguntaba si era posible con animaciones CSS ...
Entonces podría ser como
Loading...
Loading..
Loading.
Loading...
Loading..
Y básicamente continúa así. ¿Algunas ideas?
Editar: así: http://playground.magicrising.de/demo/ellipsis.html
css
css-animations
Rey
fuente
fuente

Respuestas:
¿Qué tal una versión ligeramente modificada de la respuesta de @ xec : http://codepen.io/thetallweeks/pen/yybGra
HTML
Una sola clase agregada al elemento:
<div class="loading">Loading</div>CSS
Animación que usa
steps. Ver documentos de MDN.loading:after { overflow: hidden; display: inline-block; vertical-align: bottom; -webkit-animation: ellipsis steps(4,end) 900ms infinite; animation: ellipsis steps(4,end) 900ms infinite; content: "\2026"; /* ascii code for the ellipsis character */ width: 0px; } @keyframes ellipsis { to { width: 20px; } } @-webkit-keyframes ellipsis { to { width: 20px; } }La respuesta de @ xec tiene más un efecto de deslizamiento en los puntos, mientras que esto permite que los puntos aparezcan instantáneamente.
fuente
margin-right(¿o un relleno?)20pxY lo anime0pxsi no desea que su texto cambie durante la animación.1emen lugar de20pxpuede funcionar mejor para el CSS en esta respuestaPuede intentar usar el
animation-delay propertyy el tiempo en cada carácter de puntos suspensivos. En este caso, he puesto cada carácter de puntos suspensivos en un<span class>para poder animarlos por separado.Hice una demostración , que no es perfecta, pero muestra al menos lo que quiero decir :)
El código de mi ejemplo:
HTML
Loading<span class="one">.</span><span class="two">.</span><span class="three">.</span>CSS
.one { opacity: 0; -webkit-animation: dot 1.3s infinite; -webkit-animation-delay: 0.0s; animation: dot 1.3s infinite; animation-delay: 0.0s; } .two { opacity: 0; -webkit-animation: dot 1.3s infinite; -webkit-animation-delay: 0.2s; animation: dot 1.3s infinite; animation-delay: 0.2s; } .three { opacity: 0; -webkit-animation: dot 1.3s infinite; -webkit-animation-delay: 0.3s; animation: dot 1.3s infinite; animation-delay: 0.3s; } @-webkit-keyframes dot { 0% { opacity: 0; } 50% { opacity: 0; } 100% { opacity: 1; } } @keyframes dot { 0% { opacity: 0; } 50% { opacity: 0; } 100% { opacity: 1; } }fuente
Incluso una solución más simple, ¡funciona bastante bien!
<style> .loading:after { display: inline-block; animation: dotty steps(1,end) 1s infinite; content: ''; } @keyframes dotty { 0% { content: ''; } 25% { content: '.'; } 50% { content: '..'; } 75% { content: '...'; } 100% { content: ''; } } </style> <div class="loading">Loading</div>Acabo de editar el contenido con animación en lugar de ocultar algunos puntos ...
Demostración aquí: https://jsfiddle.net/f6vhway2/1/
Editar: Gracias a @BradCollins por señalar que
contentno es una propiedad animable.https://www.w3.org/TR/css3-transitions/#animatable-css
Así que esta es una solución única de WebKit / Blink / Electron. (Pero también funciona en las versiones actuales de FF)
fuente
content. Para obtener un ritmo de animación uniforme, debe usarsteps(1)y definir un fotograma clave adicional. La función de paso dicta el número de pasos entre fotogramas clave y, dado que estamos especificando cada fotograma, solo queremos un paso entre ellos. codepen.io/anon/pen/VmEdXjcontentpropiedad. (No sé sobre Edge.)La respuesta corta es "no realmente". Sin embargo, puede jugar con el ancho de animación y el desbordamiento ocultos, y tal vez obtener un efecto que sea "lo suficientemente cercano". (código a continuación adaptado solo para Firefox, agregue prefijos de proveedor según sea necesario).
html
<div class="loading">Loading</div>css
.loading:after { overflow: hidden; display: inline-block; vertical-align: bottom; -moz-animation: ellipsis 2s infinite; content: "\2026"; /* ascii code for the ellipsis character */ } @-moz-keyframes ellipsis { from { width: 2px; } to { width: 15px; } }demostración: http://jsfiddle.net/MDzsR/1/
editar
Parece que Chrome tiene problemas para animar el pseudoelemento. Una solución fácil es envolver la elipsis en su propio elemento. Consulte http://jsfiddle.net/MDzsR/4/
fuente
-webkitfrom-moz).Una adición tardía, pero encontré una manera de hacer esto que admite texto centrado.
<element>:after { content: '\00a0\00a0\00a0'; animation: progress-ellipsis 5s infinite; } @keyframes progress-ellipsis { 0% { content: '\00a0\00a0\00a0'; } 30% { content: '.\00a0\00a0'; } 60% { content: '..\00a0'; } 90% { content: '...'; } }fuente
Puede animar
clip(o mejorclip-pathsi no necesita el soporte de IE)div { position: relative; display: inline-block; font-size: 1.4rem; } div:after { position: absolute; margin-left: .1rem; content: ' ...'; display: inline-block; animation: loading steps(4) 2s infinite; clip: rect(auto, 0px, auto, auto); } @keyframes loading { to { clip: rect(auto, 20px, auto, auto); } }<div>Loading</div>fuente
Bueno, en realidad hay una forma pura de CSS de hacer esto.
Obtuve el ejemplo de CSS Tricks, pero también lo hice para que sea compatible con Internet Explorer (lo he probado en 10+).
Consulte la demostración: http://jsfiddle.net/Roobyx/AT6v6/2/
HTML:
<h4 id="searching-ellipsis"> Searching <span>.</span> <span>.</span> <span>.</span> </h4>CSS:
@-webkit-keyframes opacity { 0% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; } 100% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; } } @-moz-keyframes opacity { 0% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; } 100% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; } } @-webkit-keyframes opacity { 0% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; } 100% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; } } @-moz-keyframes opacity { 0% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; } 100% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; } } @-o-keyframes opacity { 0% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; } 100% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; } } @keyframes opacity { 0% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; } 100% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; } } #searching-ellipsis span { -webkit-animation-name: opacity; -webkit-animation-duration: 1s; -webkit-animation-iteration-count: infinite; -moz-animation-name: opacity; -moz-animation-duration: 1s; -moz-animation-iteration-count: infinite; -ms-animation-name: opacity; -ms-animation-duration: 1s; -ms-animation-iteration-count: infinite; } #searching-ellipsis span:nth-child(2) { -webkit-animation-delay: 100ms; -moz-animation-delay: 100ms; -ms-animation-delay: 100ms; -o-animation-delay: 100ms; animation-delay: 100ms; } #searching-ellipsis span:nth-child(3) { -webkit-animation-delay: 300ms; -moz-animation-delay: 300ms; -ms-animation-delay: 300ms; -o-animation-delay: 300ms; animation-delay: 300ms; }fuente
-webkit-keyframessolo se aplicará a webkit, y dentro tienes un código solo de IE. Este código no hace más que desperdiciar espacio.Aquí está mi solución con CSS puro https://jsfiddle.net/pduc6jx5/1/ explicado: https://medium.com/@lastseeds/create-text-ellipsis-animation-with-pure-css-7f61acee69cc
scss
.dot1 { animation: visibility 3s linear infinite; } @keyframes visibility { 0% { opacity: 1; } 65% { opacity: 1; } 66% { opacity: 0; } 100% { opacity: 0; } } .dot2 { animation: visibility2 3s linear infinite; } @keyframes visibility2 { 0% { opacity: 0; } 21% { opacity: 0; } 22% { opacity: 1; } 65% { opacity: 1; } 66% { opacity: 0; } 100% { opacity: 0; } } .dot3 { animation: visibility3 3s linear infinite; } @keyframes visibility3 { 0% { opacity: 0; } 43% { opacity: 0; } 44% { opacity: 1; } 65% { opacity: 1; } 66% { opacity: 0; } 100% { opacity: 0; } }html
Loading <span class="dot dot1">.</span><span class="dot dot2">.</span><span class="dot dot3">.</span>fuente