我正在尝试制作省略号动画,并想知道CSS动画是否可能...
所以可能就像
Loading...
Loading..
Loading.
Loading...
Loading..
基本上就是这样继续。有任何想法吗?
编辑:像这样:http : //playground.magicrising.de/demo/ellipsis.html
我正在尝试制作省略号动画,并想知道CSS动画是否可能...
所以可能就像
Loading...
Loading..
Loading.
Loading...
Loading..
基本上就是这样继续。有任何想法吗?
编辑:像这样:http : //playground.magicrising.de/demo/ellipsis.html
Answers:
@xec的答案的略微修改版本如何:http : //codepen.io/thetallweeks/pen/yybGra
的HTML
将单个类添加到元素:
<div class="loading">Loading</div>
的CSS
使用的动画steps
。参见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;
}
}
@xec的答案在点上具有更多的滑入效果,而这允许点立即出现。
margin-right
(或填充?)20px
并将其设置为动画,0px
如果您不想在动画过程中移动文本。
1em
代替20px
在此答案中可能对CSS更好的工作
您可以尝试使用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/
编辑:
感谢@BradCollins指出那content
不是动画属性。
https://www.w3.org/TR/css3-transitions/#animatable-css
因此,这是仅WebKit / Blink / Electron的解决方案。(但它也适用于当前的FF版本)
content
。要获得均匀的动画节奏,您应该使用steps(1)
并定义一个额外的关键帧。step函数决定关键帧之间的步数,并且由于我们要指定每个帧,因此我们只希望它们之间有一个单步。codepen.io/anon/pen/VmEdXj
content
属性设置动画。(不了解Edge。)
简短的回答是“不是真的”。但是,您可以在隐藏动画宽度和溢出的情况下进行游戏,并且可能会获得“足够接近”的效果。(下面的代码仅适用于Firefox,请根据需要添加供应商前缀)。
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;
}
}
演示:http : //jsfiddle.net/MDzsR/1/
编辑
铬似乎在为伪元素设置动画方面存在问题。一个简单的解决方法是将省略号包装在其自己的元素中。查看http://jsfiddle.net/MDzsR/4/
您可以设置动画clip
(clip-path
如果不需要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>
好吧,实际上有一种纯粹的CSS方式可以做到这一点。
我从CSS Tricks获得了该示例,但也使其在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;
}
-webkit-keyframes
仅适用于webkit,并且内部只有IE代码。此代码只不过浪费了空间。
这是我的纯CSS解决方案https://jsfiddle.net/pduc6jx5/1/ 解释了:https : //medium.com/@lastseeds/create-text-ellipsis-animation-with-pure-css-7f61acee69cc
脚本
.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>