一个字一个字地调整大小,但保持字母之间的填充
Resize letter by letter a word but keeping the padding between the letters
我想制作一个进出动画来逐个字母地显示用户名。每个字母一个接一个地调整大小。整个单词的锚点应该在中间,但是每个字母应该在整个单词出现后的位置。
这是我现在所在的位置:
HTML
<div id="username">
<span class="animate-username-letter" style="animation-delay:0s, 3s">U</span>
<span class="animate-username-letter" style="animation-delay:0.1s, 3.1s">S</span>
<span class="animate-username-letter" style="animation-delay:0.2s, 3.2s">E</span>
<span class="animate-username-letter" style="animation-delay:0.3s, 3.3s">R</span>
<span class="animate-username-letter" style="animation-delay:0.4s, 3.4s">N</span>
<span class="animate-username-letter" style="animation-delay:0.5s, 3.5s">A</span>
<span class="animate-username-letter" style="animation-delay:0.6s, 3.6s">M</span>
<span class="animate-username-letter" style="animation-delay:0.7s, 3.7s">E</span>
</div>
CSS
#username {
text-align: center;
}
.animate-username-letter {
font-family: Tahoma;
display: inline-block;
white-space: nowrap;
font-size: 50px;
animation: forwards;
animation-name: animate-username-in, animate-username-out;
animation-delay: 2s, 6s;
animation-duration: 0.10s;
}
@keyframes animate-username-in {
from {
font-size: 0px;
}
to {
font-size: 50px;
}
}
@keyframes animate-username-out {
from {
font-size: 50px;
}
to {
font-size: 0px;
}
}
JSFIDDLE
https://jsfiddle.net/zc5u1tmk/2/
因为这个词是居中的,而且因为所有的字母都放在彼此之间,所以当这个词消失时,我们可以看到字母从中心向左和相反的方向移动。如何确保它不会发生?我尝试使用固定宽度,但这是不可能的,因为有些字母比其他字母宽,它会重叠或在字母之间产生间隙。
红色表示前面的单词消失,黑色表示动画播放。这就是我所能达到的,也是我正在努力达到的。
动画 scale
而不是 font-size
#username {
text-align: center;
display: flex;
flex-flow: row wrap;
justify-content: center;
align-items: flex-end;
}
.animate-username-letter {
font-family: Tahoma;
display: inline-block;
white-space: nowrap;
font-size: 50px;
animation: forwards;
animation-name: animate-username-in, animate-username-out;
animation-delay: 2s, 6s;
animation-duration: 0.50s;
text-align: center;
transform: scale(0);
transform-origin: bottom;
}
@keyframes animate-username-in {
from {
transform: scale(0);
}
to {
transform: scale(1);
}
}
@keyframes animate-username-out {
from {
transform: scale(1);
}
to {
transform: scale(0);
}
}
<div id="username">
<span class="animate-username-letter" style="animation-delay:0s, 3s">U</span>
<span class="animate-username-letter" style="animation-delay:0.1s, 3.1s">S</span>
<span class="animate-username-letter" style="animation-delay:0.2s, 3.2s">E</span>
<span class="animate-username-letter" style="animation-delay:0.3s, 3.3s">R</span>
<span class="animate-username-letter" style="animation-delay:0.4s, 3.4s">N</span>
<span class="animate-username-letter" style="animation-delay:0.5s, 3.5s">A</span>
<span class="animate-username-letter" style="animation-delay:0.6s, 3.6s">M</span>
<span class="animate-username-letter" style="animation-delay:0.7s, 3.7s">E</span>
</div>
我想制作一个进出动画来逐个字母地显示用户名。每个字母一个接一个地调整大小。整个单词的锚点应该在中间,但是每个字母应该在整个单词出现后的位置。
这是我现在所在的位置:
HTML
<div id="username">
<span class="animate-username-letter" style="animation-delay:0s, 3s">U</span>
<span class="animate-username-letter" style="animation-delay:0.1s, 3.1s">S</span>
<span class="animate-username-letter" style="animation-delay:0.2s, 3.2s">E</span>
<span class="animate-username-letter" style="animation-delay:0.3s, 3.3s">R</span>
<span class="animate-username-letter" style="animation-delay:0.4s, 3.4s">N</span>
<span class="animate-username-letter" style="animation-delay:0.5s, 3.5s">A</span>
<span class="animate-username-letter" style="animation-delay:0.6s, 3.6s">M</span>
<span class="animate-username-letter" style="animation-delay:0.7s, 3.7s">E</span>
</div>
CSS
#username {
text-align: center;
}
.animate-username-letter {
font-family: Tahoma;
display: inline-block;
white-space: nowrap;
font-size: 50px;
animation: forwards;
animation-name: animate-username-in, animate-username-out;
animation-delay: 2s, 6s;
animation-duration: 0.10s;
}
@keyframes animate-username-in {
from {
font-size: 0px;
}
to {
font-size: 50px;
}
}
@keyframes animate-username-out {
from {
font-size: 50px;
}
to {
font-size: 0px;
}
}
JSFIDDLE
https://jsfiddle.net/zc5u1tmk/2/
因为这个词是居中的,而且因为所有的字母都放在彼此之间,所以当这个词消失时,我们可以看到字母从中心向左和相反的方向移动。如何确保它不会发生?我尝试使用固定宽度,但这是不可能的,因为有些字母比其他字母宽,它会重叠或在字母之间产生间隙。
红色表示前面的单词消失,黑色表示动画播放。这就是我所能达到的,也是我正在努力达到的。
动画 scale
而不是 font-size
#username {
text-align: center;
display: flex;
flex-flow: row wrap;
justify-content: center;
align-items: flex-end;
}
.animate-username-letter {
font-family: Tahoma;
display: inline-block;
white-space: nowrap;
font-size: 50px;
animation: forwards;
animation-name: animate-username-in, animate-username-out;
animation-delay: 2s, 6s;
animation-duration: 0.50s;
text-align: center;
transform: scale(0);
transform-origin: bottom;
}
@keyframes animate-username-in {
from {
transform: scale(0);
}
to {
transform: scale(1);
}
}
@keyframes animate-username-out {
from {
transform: scale(1);
}
to {
transform: scale(0);
}
}
<div id="username">
<span class="animate-username-letter" style="animation-delay:0s, 3s">U</span>
<span class="animate-username-letter" style="animation-delay:0.1s, 3.1s">S</span>
<span class="animate-username-letter" style="animation-delay:0.2s, 3.2s">E</span>
<span class="animate-username-letter" style="animation-delay:0.3s, 3.3s">R</span>
<span class="animate-username-letter" style="animation-delay:0.4s, 3.4s">N</span>
<span class="animate-username-letter" style="animation-delay:0.5s, 3.5s">A</span>
<span class="animate-username-letter" style="animation-delay:0.6s, 3.6s">M</span>
<span class="animate-username-letter" style="animation-delay:0.7s, 3.7s">E</span>
</div>