前端每日實戰:140# 視訊演示如何用純 CSS 創作文字的淡入動畫效果(並祝大家中秋節快樂!)
阿新 • • 發佈:2018-12-11
效果預覽
按下右側的“點選預覽”按鈕可以在當前頁面預覽,點選連結可以全屏預覽。
可互動視訊
此視訊是可以互動的,你可以隨時暫停視訊,編輯視訊中的程式碼。
請用 chrome, safari, edge 開啟觀看。
原始碼下載
每日前端實戰系列的全部原始碼請從 github 下載:
程式碼解讀
定義 dom,容器中包含若干子元素,每個子元素是 1 個字母:
<div class="container"> <span>h</span> <span>a</span> <span>p</span> <span>p</span> <span>y</span> <span> </span> <span>h</span> <span>o</span> <span>l</span> <span>i</span> <span>d</span> <span>a</span> <span>y</span> <span>s</span> </div>
居中顯示:
body {
margin: 0;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(pink, white, pink);
}
設定字型樣式:
.container span { display: inline-block; color: purple; font-weight: bold; text-transform: uppercase; font-size: 40px; }
定義文字從左到右的移動效果:
.container span { animation: sideSlide 4s forwards infinite; transform: translateX(-100vw); } @keyframes sideSlide { 15%, 20% { transform: translateX(0.5em); } 24% { transform: translateX(0); } 25%, 75% { transform: translateX(0); } 90%, 100% { transform: translateX(100vw); } }
增加文字縮放的動畫效果:
.container span {
transform: translateX(-100vw) scale(0);
}
@keyframes sideSlide {
15%, 20% {
transform: translateX(0.5em) scale(1);
}
24% {
transform: translateX(0) scale(1.2);
}
25%, 75% {
transform: translateX(0) scale(1);
}
90%, 100% {
transform: translateX(100vw) scale(0);
}
}
增加文字入場和出場時的淡入淡出效果:
.container span {
filter: opacity(0);
}
@keyframes sideSlide {
15%, 20% {
transform: translateX(0.5em) scale(1);
}
24% {
transform: translateX(0) scale(1.2);
}
25%, 75% {
transform: translateX(0) scale(1);
filter: opacity(1);
}
90%, 100% {
transform: translateX(100vw) scale(0);
filter: opacity(0);
}
}
增加文字變色的效果:
@keyframes sideSlide {
15%, 20% {
transform: translateX(0.5em) scale(1);
color: purple;
}
24% {
transform: translateX(0) scale(1.2);
color: cyan;
}
25%, 75% {
transform: translateX(0) scale(1);
filter: opacity(1);
color: purple;
}
90%, 100% {
transform: translateX(100vw) scale(0);
filter: opacity(0);
}
}
設定子元素的下標變數:
.container span:nth-child(1) { --n: 1; }
.container span:nth-child(2) { --n: 2; }
.container span:nth-child(3) { --n: 3; }
.container span:nth-child(4) { --n: 4; }
.container span:nth-child(5) { --n: 5; }
.container span:nth-child(6) { --n: 6; }
.container span:nth-child(7) { --n: 7; }
.container span:nth-child(8) { --n: 8; }
.container span:nth-child(9) { --n: 9; }
.container span:nth-child(10) { --n: 10; }
.container span:nth-child(11) { --n: 11; }
.container span:nth-child(12) { --n: 12; }
.container span:nth-child(13) { --n: 13; }
.container span:nth-child(14) { --n: 14; }
設定子元素的動畫延時:
.container span {
animation-delay: calc((var(--n) - 1) * 0.05s);
}
大功告成!