Есть ли в любом случае анимировать многоточие с анимацией CSS?
Я пытаюсь анимировать многоточие, и мне было интересно, возможно ли это с анимацией CSS...
Так что это может быть как
Loading...
Loading..
Loading.
Loading...
Loading..
и просто продолжать. Есть идеи?
редактировать: вот так:http://playground.magicrising.de/demo/ellipsis.html
5 ответов:
как насчет слегка измененной версии @xec это!--5-->: http://codepen.io/thetallweeks/pen/yybGra
HTML
один класс, добавленный к элементу:
<div class="loading">Loading</div>
CSS
анимация, которая использует
steps
. см. MDN docs.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: "26"; /* ascii code for the ellipsis character */ width: 0px; } @keyframes ellipsis { to { width: 20px; } } @-webkit-keyframes ellipsis { to { width: 20px; } }
ответ@xec имеет больше эффекта скольжения на точках, в то время как это позволяет точкам появляться немедленно.
вы можете попробовать использовать
animation-delay property
и время каждого символа многоточия. В этом случае я поставил каждый символ многоточия в<span class>
Так что я могу анимировать их по отдельности.Я демо, что не идеально, но это показывает, по крайней мере, что я имею в виду :)
код из моего примера:
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; } }
даже более простое решение, работает очень хорошо!
<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>
просто отредактировал содержимое с анимацией вместо того, чтобы скрывать некоторые точки...
демо здесь: https://jsfiddle.net/f6vhway2/1/
Edit: Спасибо @BradCollins за то, что указал на это
content
не анимируются свойство.https://www.w3.org/TR/css3-transitions/#animatable-css
Итак, это решение только для WebKit/Blink/Electron. (но он работает и в текущих версиях FF)
короткий ответ: "не очень". Тем не менее, вы можете поиграть с анимацией ширины и переполнения скрыты, и, возможно, получить эффект, который "достаточно близко". (код ниже адаптирован только для firefox, добавьте префиксы поставщиков по мере необходимости).
html
<div class="loading">Loading</div>
css
.loading:after { overflow: hidden; display: inline-block; vertical-align: bottom; -moz-animation: ellipsis 2s infinite; content: "26"; /* ascii code for the ellipsis character */ } @-moz-keyframes ellipsis { from { width: 2px; } to { width: 15px; } }
демо: http://jsfiddle.net/MDzsR/1/
edit
похоже, у chrome есть проблемы с анимацией псевдо-элемент. Легко исправить, чтобы обернуть многоточие в свой собственный элемент. Проверьте http://jsfiddle.net/MDzsR/4/
ну на самом деле есть чистый CSS способ сделать это.
Я получил пример из CSS-трюков, но сделал его также поддерживаемым в Internet Explorer (я тестировал его в 10+).
Проверьте демо: 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; }