J'essaye d'avoir une ellipse animée, et je me demandais si c'était possible avec des animations CSS ...
Donc ça pourrait être comme
Loading...
Loading..
Loading.
Loading...
Loading..
Et en gros, continuez comme ça. Des idées?
Edit: comme ceci: http://playground.magicrising.de/demo/ellipsis.html
Réponses:
Que diriez-vous d'une version légèrement modifiée de la réponse de @ xec : http://codepen.io/thetallweeks/pen/yybGra
HTML
Une seule classe ajoutée à l'élément:
<div class="loading">Loading</div>
CSS
Animation qui utilise
steps
. Voir la documentation 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 réponse de @ xec a davantage un effet de glissement sur les points, alors que cela permet aux points d'apparaître instantanément.
la source
margin-right
(ou un remplissage?) De20px
et de l'animer0px
si vous ne voulez pas que votre texte se déplace pendant l'animation.1em
à la place de20px
peut mieux fonctionner pour le CSS dans cette réponseVous pouvez essayer d'utiliser le
animation-delay property
et l'heure de chaque caractère d'ellipse. Dans ce cas, j'ai mis chaque caractère d'ellipse dans un<span class>
afin que je puisse les animer séparément.J'ai fait une démo , ce qui n'est pas parfait, mais ça montre au moins ce que je veux dire :)
Le code de mon exemple:
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; } }
la source
Même une solution plus simple, fonctionne plutôt 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>
Je viens de modifier le contenu avec une animation au lieu de cacher des points ...
Démo ici: https://jsfiddle.net/f6vhway2/1/
Edit: Merci à @BradCollins pour avoir souligné que ce
content
n'est pas une propriété animable.https://www.w3.org/TR/css3-transitions/#animatable-css
Il s'agit donc d'une solution WebKit / Blink / Electron uniquement. (Mais cela fonctionne également dans les versions actuelles de FF)
la source
content
. Pour obtenir un rythme d'animation uniforme, vous devez utilisersteps(1)
et définir une image clé supplémentaire. La fonction step dicte le nombre d'étapes entre les images clés et puisque nous spécifions chaque image, nous voulons juste une seule étape entre elles. codepen.io/anon/pen/VmEdXjcontent
propriété. (Je ne sais pas pour Edge.)La réponse courte est "pas vraiment". Cependant, vous pouvez jouer avec la largeur d'animation et le débordement masqués, et peut-être obtenir un effet "assez proche". (code ci-dessous conçu pour Firefox uniquement, ajoutez des préfixes de fournisseur si nécessaire).
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; } }
démo: http://jsfiddle.net/MDzsR/1/
Éditer
Il semble que Chrome ait des problèmes avec l'animation du pseudo-élément. Une solution simple consiste à envelopper les points de suspension dans son propre élément. Consultez http://jsfiddle.net/MDzsR/4/
la source
-webkit
partir de-moz
).Un ajout tardif, mais j'ai trouvé un moyen de le faire qui prend en charge le texte centré.
<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: '...'; } }
la source
Vous pouvez animer
clip
(ou mieuxclip-path
si vous n'avez pas besoin du support 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>
la source
Eh bien, en fait, il existe un moyen purement CSS de faire cela.
J'ai eu l'exemple de CSS Tricks, mais je l'ai également pris en charge dans Internet Explorer (je l'ai testé dans 10+).
Vérifiez la démo: 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; }
la source
-webkit-keyframes
ne s'appliquera qu'au kit Web, et à l'intérieur, vous avez du code uniquement pour IE. Ce code ne fait que perdre de l'espace.Voici ma solution avec pur css https://jsfiddle.net/pduc6jx5/1/ expliqué: 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>
la source