用戶正在瀏覽網站網頁時,為了更好的用戶體驗,經常會使用 加載中 文字或者動畫來表示正在 加載數據 或 執(zhí)行某項操作。而使用動畫不僅能夠吸引用戶的注意力,同時也能夠傳達信息"系統正在工作中",需要一些時間來完成任務。本文將詳細介紹如何通過 CSS 創(chuàng)建一個 加載中 動畫效果。
首先是HTML代碼,定義了一個類名container的<div>容器:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS Animation</title>
<link rel="stylesheet" href="./index.css">
</head>
<body>
<div class="container">
<div class="loader" style="--r: 1">
<span style="--i: 1"></span>
<span style="--i: 2"></span>
<span style="--i: 3"></span>
<span style="--i: 4"></span>
<span style="--i: 5"></span>
<span style="--i: 6"></span>
<span style="--i: 7"></span>
<span style="--i: 8"></span>
<span style="--i: 9"></span>
<span style="--i: 10"></span>
<span style="--i: 11"></span>
<span style="--i: 12"></span>
<span style="--i: 13"></span>
<span style="--i: 14"></span>
<span style="--i: 15"></span>
<span style="--i: 16"></span>
<span style="--i: 17"></span>
<span style="--i: 18"></span>
<span style="--i: 19"></span>
<span style="--i: 20"></span>
</div>
<div class="loader" style="--r: 2">
<span style="--i: 1"></span>
<span style="--i: 2"></span>
<span style="--i: 3"></span>
<span style="--i: 4"></span>
<span style="--i: 5"></span>
<span style="--i: 6"></span>
<span style="--i: 7"></span>
<span style="--i: 8"></span>
<span style="--i: 9"></span>
<span style="--i: 10"></span>
<span style="--i: 11"></span>
<span style="--i: 12"></span>
<span style="--i: 13"></span>
<span style="--i: 14"></span>
<span style="--i: 15"></span>
<span style="--i: 16"></span>
<span style="--i: 17"></span>
<span style="--i: 18"></span>
<span style="--i: 19"></span>
<span style="--i: 20"></span>
</div>
<div class="loader" style="--r: 3">
<span style="--i: 1"></span>
<span style="--i: 2"></span>
<span style="--i: 3"></span>
<span style="--i: 4"></span>
<span style="--i: 5"></span>
<span style="--i: 6"></span>
<span style="--i: 7"></span>
<span style="--i: 8"></span>
<span style="--i: 9"></span>
<span style="--i: 10"></span>
<span style="--i: 11"></span>
<span style="--i: 12"></span>
<span style="--i: 13"></span>
<span style="--i: 14"></span>
<span style="--i: 15"></span>
<span style="--i: 16"></span>
<span style="--i: 17"></span>
<span style="--i: 18"></span>
<span style="--i: 19"></span>
<span style="--i: 20"></span>
</div>
<div class="loader" style="--r: 4">
<span style="--i: 1"></span>
<span style="--i: 2"></span>
<span style="--i: 3"></span>
<span style="--i: 4"></span>
<span style="--i: 5"></span>
<span style="--i: 6"></span>
<span style="--i: 7"></span>
<span style="--i: 8"></span>
<span style="--i: 9"></span>
<span style="--i: 10"></span>
<span style="--i: 11"></span>
<span style="--i: 12"></span>
<span style="--i: 13"></span>
<span style="--i: 14"></span>
<span style="--i: 15"></span>
<span style="--i: 16"></span>
<span style="--i: 17"></span>
<span style="--i: 18"></span>
<span style="--i: 19"></span>
<span style="--i: 20"></span>
</div>
</div>
</body>
</html>
接下來看CSS代碼,重置全局樣式后,給.container元素定義了水平垂直居中布局,然后使用filter樣式屬性來應用色相旋轉(hue-rotate)濾鏡,將背景色調整為90度的色相。因此,子元素的任何顏色同樣會添加濾鏡。
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.container {
min-height: 100vh;
background-color: #042104;
filter: hue-rotate(90deg);
display: flex;
justify-content: center;
align-items: center;
}
.loader {
position: relative;
transform: rotate(calc(var(--r) * 45deg));
}
.loader span {
position: absolute;
top: 0;
left: -200px;
width: 200px;
height: 2px;
transform-origin: right;
transform: rotate(calc(var(--i) * 18deg));
}
.loader span::before {
content: "";
display: block;
width: 15px;
height: 15px;
background-color: #00ff0a;
border-radius: 15px;
box-shadow: 0 0 10px #00ff0a,
0 0 20px #00ff0a,
0 0 40px #00ff0a,
0 0 60px #00ff0a,
0 0 80px #00ff0a, 0 0 100px #00ff0a;
animation: animate 5s linear infinite;
animation-delay: calc(-0.5s * var(--i));
}
@keyframes animate {
0% {
transform: translateX(200px) scale(1);
opacity: 0;
}
10% {
opacity: 1;
}
80% {
opacity: 1;
}
100% {
transform: translateX(0) scale(0);
opacity: 1;
}
}
@media screen and (max-width: 576px) {
.container .loader {
scale: .6;
}
}
此外,通過animation屬性和@keyframes規(guī)則,定義了名為animate的關鍵幀動畫。該動畫在5秒內線性地進行,無限循環(huán)播放。動畫的每個關鍵幀設置了不同的變換效果,包括 平移、縮放和透明度 變化。根據時間的進展,加載器的形狀和位置會發(fā)生變化,從而創(chuàng)造出動態(tài)的效果。
關于減少長時間等待的焦慮感,相關 加載中 動畫效果的文章。
通過本篇文章的詳細介紹,相信能夠幫助你更好地使用CSS來創(chuàng)建一個loading加載中動畫,從而理解掌握和應用這個效果。你可以根據自己的需求調整大小、顏色和持續(xù)時間等參數,創(chuàng)建符合你網頁風格的加載中動畫。加載中動畫不僅能夠提供視覺上的反饋,告訴用戶系統正在工作中,還能夠改善用戶體驗,減少長時間等待的焦慮感。
作者:掘一
鏈接:https://juejin.cn/post/7296404570949173298
CSS3引入了強大的動畫功能,使得開發(fā)者能夠在不依賴JavaScript的情況下創(chuàng)建豐富的視覺動效。本文將深入探討CSS3動畫的核心概念、主要特性以及如何通過關鍵幀動畫和過渡效果實現各類動畫效果。
1.1 過渡(Transition)
過渡是CSS3中最為基礎的動畫形式之一,它定義了一個元素在兩種狀態(tài)之間變化時的速度曲線和時間間隔。
/* 基本語法 */
.element {
transition: property duration timing-function delay;
}
/* 示例 */
.button {
background-color: red;
transition: background-color 0.5s ease-in-out;
}
在這個例子中,當.button的background-color屬性發(fā)生變化時,將會在0.5秒內平滑過渡。
關鍵幀動畫允許我們自定義更復雜的動畫序列,包括多個中間狀態(tài)。
/* 定義關鍵幀動畫 */
@keyframes fadeInOut {
0% { opacity: 0; }
50% { opacity: 1; }
100% { opacity: 0; }
}
/* 應用動畫 */
.element {
animation: fadeInOut 2s infinite;
}
上述代碼定義了一個名為fadeInOut的關鍵幀動畫,該動畫讓元素從透明度0漸變至1再回到0,整個動畫循環(huán)持續(xù)2秒,并且無限重復。
示例1 - 圖片淡入淡出滾動效果
.image-slide {
opacity: 0;
transition: opacity 0.5s;
will-change: opacity;
/* 當圖片進入可視區(qū)域時觸發(fā)動畫 */
&.is-visible {
opacity: 1;
}
}
示例2 - 旋轉動畫
.rotate {
animation: rotate 2s linear infinite;
}
@keyframes rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
總結起來,CSS3動畫功能強大且靈活,通過過渡和關鍵幀動畫,我們可以輕松構建豐富多樣的網頁動態(tài)效果,提升用戶體驗并增強交互性。隨著對CSS3動畫特性的深入理解和掌握,開發(fā)者能夠更加自如地運用這些技術來創(chuàng)作富有創(chuàng)意和吸引力的Web界面。
1.什么是CSS?
2.為什么使用CSS?
3.CSS作用
動畫的原理
定義
概念
瀏覽器渲染過程步驟
三棵樹
如何更新樣式
一般JS來更新樣式
三種更新方式
1.JS/CSS》樣式》布局》繪制》合成
全走
比如:div.remove()會觸發(fā)當前消失,其它元素relayout。
2.JS/CSS》樣式》繪制》合成
跳過Layout
比如:改變背景色,直接repaint+composite。
3.JS/CSS》樣式》合成
跳過Layout和Paint
比如:改變transform,直接composite。
CSS動畫優(yōu)化
一. transform
四個常用功能
經驗:
transform: translate
經驗:
#demo{
left:50%;
top:50%;
transform:translate(-50%,-50%);
}
transform: scale
經驗:
transform: rotate
經驗:
transform: skew
經驗:
transform 可以組合使用
transition 過渡
作用
語法
并不是所有的屬性都能過度
二. animation
縮寫語法
使用animation
如何讓動畫停在最后一幀
@keyframes 完整語法
本文為作者本人的原創(chuàng)文章,著作權歸作者本人和饑人谷所有,轉載務必注明來源。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。