CSS動畫

目錄

一、核心概念與語法

1.?@keyframes?關鍵幀

2.?animation?屬性

二、動畫調速函數(animation-timing-function)

1.?預設值

2.?貝塞爾曲線

3.?步進函數(steps())

三、動畫控制與交互

1.?暫停與恢復

2.?JavaScript 控制

3.逐幀動畫與精靈圖

四、性能優化

五、實際應用示例

1.?淡入淡出效果

2.?旋轉加載圖標

3.?彈跳效果

六、兼容性與前綴

示例:走馬燈

示例:全民出游季


CSS 動畫允許通過定義關鍵幀(@keyframes)和動畫屬性(animation)實現復雜的動態效果,相比?transition?更靈活,支持多階段控制和循環播放。


一、核心概念與語法

在 CSS 中,以?@?開頭的語法稱為?At-Rules(規則聲明),用于定義 CSS 的元數據、條件邏輯、外部資源引入等高級功能。

1.?@keyframes?關鍵幀

  • 作用:定義動畫的中間狀態。

  • 語法

    @keyframes 動畫名稱 {from { /* 初始狀態 */ }to { /* 結束狀態 */ }/* 或使用百分比 */0% { ... }50% { ... }100% { ... }
    }
  • 示例

    @keyframes fadeIn {from { opacity: 0; }to { opacity: 1; }
    }@keyframes slideAndRotate {0% { transform: translateX(0) rotate(0); }50% { transform: translateX(200px) rotate(180deg); }100% { transform: translateX(0) rotate(360deg); }
    }

2.?animation?屬性

?

  • 作用:將關鍵幀動畫應用到元素。

  • 子屬性

    屬性作用常用值
    animation-name指定關鍵幀名稱fadeIn,?slideAndRotate
    animation-duration動畫持續時間2s,?500ms
    animation-timing-function速度曲線ease(默認),?linear,?ease-in-out,?cubic-bezier(0.4, 0, 0.2, 1)
    animation-delay動畫延遲時間1s,?0.5s
    animation-iteration-count播放次數1(默認),?infinite,?3
    animation-direction播放方向normal(默認正向),?reverse(反向),?alternate(正反交替)
    animation-fill-mode動畫結束后的樣式保留none(默認),?forwards(保持最后一幀),?backwards(應用第一幀)
    animation-play-state控制播放狀態running(默認),?paused(暫停)
  • 簡寫語法

    .element {animation: name duration timing-function delay iteration-count direction fill-mode play-state;
    }

    示例

    .box {animation: fadeIn 2s ease-in-out 1s infinite alternate forwards;
    }

二、動畫調速函數(animation-timing-function

1.?預設值

  • ease:默認緩入緩出(先加速后減速)。

  • linear:勻速。

  • ease-in:緩入(逐漸加速)。

  • ease-out:緩出(逐漸減速)。

  • ease-in-out:緩入緩出。

2.?貝塞爾曲線

  • 使用?cubic-bezier(x1, y1, x2, y2)?自定義速度曲線。

.box {animation-timing-function: cubic-bezier(0.68, -0.55, 0.27, 1.55);
}

3.?步進函數(steps()

  • 將動畫拆分為固定步數播放,適合幀動畫。

    .box {animation-timing-function: steps(5, jump-start); /* 分 5 步跳躍播放 */
    }

三、動畫控制與交互

1.?暫停與恢復

  • 通過?animation-play-state?控制:

    .box:hover {animation-play-state: paused; /* 懸停時暫停動畫 */
    }

2.?JavaScript 控制

  • 動態添加/移除動畫類:

    const box = document.querySelector('.box');
    box.classList.add('fadeIn');  // 觸發動畫
    box.style.animation = 'none'; // 停止動畫

3.逐幀動畫與精靈圖

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>test</title><link rel="stylesheet" href="./iconfont/iconfont.css"><style>.box {margin: 100px auto;width: 1000px;}.people {width: 140px;height: 140px;background-image: url(./res/run.png);animation: run 1s steps(12) infinite,move 4s linear infinite;}@keyframes run {from {background-position: 0 0;}to {background-position: -1680px 0;}}@keyframes move {0% {transform: translate(0) scaleX(1);}50% {transform: translate(800px) scaleX(1);}50.1% {transform: translate(800px) scaleX(-1);}100% {transform: translate(0) scaleX(-1);}}</style>
</head>
<body><div class="box"><div class="people"></div></div></body>
</html>

?


四、性能優化

  1. 優先使用?transform?和?opacity

    • 這些屬性由 GPU 加速,避免觸發重排(如?widthmargin)。

  2. 減少動畫數量

    • 同時運行過多動畫可能導致頁面卡頓。

  3. 使用?will-change?提示瀏覽器

    .box {will-change: transform, opacity; /* 提前告知瀏覽器可能變化的屬性 */
    }

五、實際應用示例

1.?淡入淡出效果

@keyframes fadeInOut {0%, 100% { opacity: 0; }50% { opacity: 1; }
}.element {animation: fadeInOut 3s ease-in-out infinite;
}

2.?旋轉加載圖標

@keyframes spin {from { transform: rotate(0deg); }to { transform: rotate(360deg); }
}.loader {animation: spin 1s linear infinite;
}

3.?彈跳效果

@keyframes bounce {0%, 100% { transform: translateY(0); }50% { transform: translateY(-30px); }
}.button {animation: bounce 1s ease-in-out infinite;
}

六、兼容性與前綴

  • 現代瀏覽器:無需前綴(Chrome 43+、Firefox 16+、Safari 9+)。

  • 舊版瀏覽器:需添加?-webkit-?前綴:

    @-webkit-keyframes fadeIn { ... }
    .box {-webkit-animation: fadeIn 2s;
    }

示例:走馬燈

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>test</title><link rel="stylesheet" href="./iconfont/iconfont.css"><style>* {margin: 0;padding: 0;box-sizing: border-box;}li {list-style: none;}a {text-decoration: none;color: #fff;}.box {margin: 100px auto;width: 300px;height: 50px;overflow: hidden;}.box ul {display: flex;animation: move 7s linear infinite;}.box:hover ul {animation-play-state: paused;}@keyframes move {from {transform: translateX(0);}to {transform: translateX(-700px);}}.box img {width: 100px;}</style>
</head>
<body><div class="box"><ul><li><img src="./res/1.jpg" alt=""></li><li><img src="./res/2.jpg" alt=""></li><li><img src="./res/3.jpg" alt=""></li><li><img src="./res/4.jpg" alt=""></li><li><img src="./res/5.jpg" alt=""></li><li><img src="./res/6.jpg" alt=""></li><li><img src="./res/7.jpg" alt=""></li><!-- 填補顯示區域的空白 --><li><img src="./res/1.jpg" alt=""></li><li><img src="./res/2.jpg" alt=""></li><li><img src="./res/3.jpg" alt=""></li></ul></div></body>
</html>

示例:全民出游季

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>test</title><link rel="stylesheet" href="./iconfont/iconfont.css"><style>* {margin: 0;padding: 0;box-sizing: border-box;}li {list-style: none;}a {text-decoration: none;color: #fff;}html {height: 100%;   }body {height: 100%;background: url(./res/images/f1_1.jpg) no-repeat center 0 / cover;   }.cover {width: 100%;height: 100%;   position: relative;}.cover div {position: absolute;}.title {top: 50%;left: 50%;transform: translate(-50%,-50%);animation: show 1s;}@keyframes show {0% {transform: translate(-50%,-50%) scale(1);}20% {transform: translate(-50%,-50%) scale(0.3);}50% {transform: translate(-50%,-50%) scale(1.7);}80% {transform: translate(-50%,-50%) scale(0.8);}100% {transform: translate(-50%,-50%) scale(1);}}.label {bottom: 10%;left: 50%;transform: translate(-50%);}.label ul {display: flex;justify-content: space-between;}.label ul img {width: 100px;margin: 0 85px;animation: bounce .8s ease-in infinite alternate;}.label ul li:nth-child(2) img {animation: bounce .8s 0.3s ease-in infinite alternate;}.label ul li:nth-child(3) img {animation: bounce .8s 0.6s ease-in infinite alternate;}.label ul li:nth-child(4) img {animation: bounce .8s 0.9s ease-in infinite alternate;}@keyframes bounce {from {transform: translateY(0);}to {transform: translateY(30px);}}.cloud {position: relative;left: 50%;}.cloud img:nth-child(1) {top: 20px;margin-left: -200px;}.cloud img:nth-child(2) {top: 100px;margin-left: 400px;}.cloud img:nth-child(3) {top: 180px;margin-left: -500px;}.cloud img {position: absolute;animation: move 2s linear infinite alternate;}@keyframes move {to {transform: translate(-50px);}}.lu {top: 15%;left: 60%;}.san {top: 15%;left: 25%;animation: float 1.5s linear infinite alternate;}@keyframes float {to {transform: translateY(50px);}}</style>
</head>
<body><div class="cover"><div class="cloud"><img src="./res/images/yun1.png" alt=""><img src="./res/images/yun2.png" alt=""><img src="./res/images/yun3.png" alt=""></div>    <div class="lu"><img src="./res/images/lu.png" alt=""></div>    <div class="san"><img src="./res/images/san.png" alt=""></div><div class="label"><ul><li><img src="./res/images/1.png" alt=""></li><li><img src="./res/images/2.png" alt=""></li><li><img src="./res/images/3.png" alt=""></li><li><img src="./res/images/4.png" alt=""></li></ul></div><div class="title"><img src="./res/images/font1.png" alt=""></div></div></body>
</html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898924.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898924.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898924.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025年河北省第二屆職業技能大賽網絡安全項目 模塊 B樣題任務書

2025年河北省第二屆職業技能大賽網絡安全項目 模塊 B樣題任務書 河北省第二屆職業技能大賽網絡安全項目-模塊 B-奪旗挑戰賽&#xff08;CTF&#xff09;一、目標系統1二、目標系統2三、目標系統3四、目標系統4 需要真題環境-培訓可以私信博主&#xff01; 河北省第二屆職業技能…

鈔票準備好了嗎?鴻蒙電腦 5 月見

3月20日&#xff0c;在華為 Pura 先鋒盛典及鴻蒙智行新品發布會上&#xff0c;華為常務董事、終端BG董事長、智能汽車解決方案BU董事長余承東表示&#xff0c;華為終端全面進入鴻蒙時代&#xff0c;今年5月將推出鴻蒙電腦。 在3月20日的華為Pura先鋒盛典及鴻蒙智行新品發布會上…

Java高頻面試之集合-15

hello啊&#xff0c;各位觀眾姥爺們&#xff01;&#xff01;&#xff01;本baby今天來報道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面試官&#xff1a;解決哈希沖突有哪些方法&#xff1f; 1. 開放尋址法&#xff08;Open Addressing&#xff09; 核心思想&#xff1a;當哈…

【機器學習】建模流程

1、數據獲取 1.1 來源 數據獲取是機器學習建模的第一步&#xff0c;常見的數據來源包括數據庫、API、網絡爬蟲等。 數據庫是企業內部常見的數據存儲方式&#xff0c;例如&#xff1a;MySQL、Oracle等關系型數據庫&#xff0c;以及MongoDB等非關系型數據庫&#xff0c;它們能夠…

GitHub 上的 Khoj 項目:打造你的專屬 AI 第二大腦

在信息爆炸的時代&#xff0c;高效管理和利用個人知識變得愈發重要。GitHub 上的 Khoj 項目為我們提供了一個強大的解決方案&#xff0c;它能成為你的 “AI 第二大腦”&#xff0c;幫你輕松整合、搜索和運用知識。今天&#xff0c;就來詳細了解下 Khoj。? Khoj 是什么&#x…

爬蟲(requsets)筆記

一、request_基本使用 pip install requests -i https://pypi.douban.com/simple 一個類型六個屬性 r.text 獲取網站源碼 r.encoding 訪問或定制編碼方式r.url 獲取請求的urlr.content 響應的字節類型r.status_code 響應的狀態碼r.headers 響應的頭信息 import requestsur…

centos7連不上接網絡

選擇編輯&#xff0c; 選擇虛擬機網絡編輯 右鍵虛擬機&#xff0c;點擊設置&#xff0c;設置網絡,選擇nat模式&#xff0c; 配置&#xff1a;/etc/sysconfig/network-scripts/ifcfg-ens33 vim /etc/sysconfig/network-scripts/ifcfg-ens33設置IP地址如圖所示&#xff0c;重…

OpenResty(Lua)+Redis實現動態封禁IP

文章目錄 架構設計環境準備源碼編輯安裝OpenResty下載安裝準備依賴編譯安裝配置環境變量&#xff08;可選&#xff09;OpenResty 服務管理命令 安裝Redis配置Lua腳本測試準備測試工具測試封禁邏輯 刪除版本信息清除編譯安裝的OpenResty 架構設計 通過 Nginx Redis 的方案&…

Turtle基本操作(前進、后退、旋轉)

1. Turtle基本移動概念 在Turtle繪圖中,“海龜”(Turtle)相當于一支筆,它在屏幕上移動時,會在經過的路徑上留下軌跡。我們可以通過一系列簡單的指令控制它的前進、后退和旋轉,從而繪制各種形狀和圖案。 2. 前進與后退 2.1 前進(forward() 或 fd()) Turtle的 forward…

C++類與對象的第一個簡單的實戰練習-3.24筆記

在嗶哩嗶哩學習的這個老師的C面向對象高級語言程序設計教程&#xff08;118集全&#xff09;講的真的很不錯 實戰一&#xff1a; 情況一&#xff1a;將所有代碼寫到一個文件main.cpp中 #include<iostream> //不知道包含strcpy的頭文件名稱是什么,問ai可知 #include<…

Jetson Orin NX使用 Ollama 本地部署 deepseek

本文記錄在 jetson orin nx 上使用 ollama 部署 deepseek 的過程 有用的網站及工具 NVIDIA Jetson AI LabOllama官網Jtop 工具 > 用以查看jetson GPU/CPU/Memory 等占用情況的工具&#xff0c;安裝過程如下&#xff1a; sudo apt-get install python3-pip sudo -H pip3 in…

目標檢測20年(三)

對這篇論文感興趣的小伙伴可以訂閱筆者《目標檢測》專欄&#xff0c;關注筆者對該文獻的閱讀和理解。 前兩篇解讀鏈接&#xff1a; 目標檢測20年&#xff08;一&#xff09;-CSDN博客 目標檢測20年&#xff08;二&#xff09;-CSDN博客 目錄 四、 檢測器的加速發展 4.1 特…

智能手持終端PDA在設備巡檢管理中的應用

在工業制造、能源電力、軌道交通等領域&#xff0c;設備巡檢是保障生產安全與連續性的核心環節。傳統巡檢模式存在效率低、易出錯、數據滯后等痛點。上海岳冉智能設備巡檢手持終端PDA&#xff0c;以智能化、數字化、高可靠為核心設計理念&#xff0c;集RFID、條碼掃描、AI圖像識…

AI知識補全(二):提示工程(Prompting)是什么?

名人說&#xff1a;人生如逆旅&#xff0c;我亦是行人。 ——蘇軾《臨江仙送錢穆父》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;AI知識補全&#xff08;一&#xff09;&#xff1a;tokens是什么…

C++友元:跨墻訪問的三種姿勢

目錄 友元 友元之普通函數形式 友元之成員函數形式 友元類 友元的特點 友元 什么叫友元&#xff1f; 一般來說&#xff0c;類的私有成員只能在類的內部訪問&#xff0c;類之外是不能訪問它們的。但如果將其他類/函數設置為類的友元&#xff0c;那么友元類/函數就可以在前…

位運算[找出唯一成對的數]

題目來源&#xff1a;藍橋云課 不用輔助儲存空間 import java.util.Random;public class T_01 {public class Util {public static void swap(int[] arr, int i, int j) {int temp arr[i];arr[i] arr[j];arr[j] temp;}public static void print(int[] arr) {for (int i 0; …

簡記_FPGA 硬件最小系統設計

一、FPGA板級設計的五要素 1.1、電源電路 核心電壓&#xff1a;一般為固定值 IO電壓&#xff1a;FPGA的IO分為多個bank&#xff0c;同一個bank的不同IO引腳電壓相同&#xff0c;不同bank的電壓可以不同 輔助電壓&#xff1a;除了核心電壓和IO電壓&#xff0c;FPGA工作所需的…

7.2 控件和組件

版權聲明&#xff1a;本文為博主原創文章&#xff0c;轉載請在顯著位置標明本文出處以及作者網名&#xff0c;未經作者允許不得用于商業目的 C#工具箱位于編輯窗口的左側&#xff0c;它默認內置了大量的控件和組件。控件一般派生于System.Windows.Forms.Control類&#xff0c;顯…

Spring Boot中接口數據字段為?Long?類型時,前端number精度丟失問題解決方案

Spring Boot中接口數據字段為 Long 類型時&#xff0c;前端number精度丟失問題解決方案 在Spring Boot中&#xff0c;當接口數據字段為 Long 類型時&#xff0c;返回頁面的JSON中該字段通常會被序列化為數字類型。 例如&#xff0c;一個Java對象中有一個 Long 類型的屬性 id …

OpenCV第2課 OpenCV的組成結構與圖片/視頻的加載及展示

1.OpenCV 的組成結構 2.OpenCV 的具體模塊 3. 圖像的讀取 4. 視頻的讀取 1.OpenCV 的組成結構 OpenCV 是由很多模塊組成的,這些模塊可以分成很多層: 最底層是基于硬件加速層(HAL)的各種硬件優化。再上一層是opencv_contrib 模塊所包含的OpenCV 由其他開發人員所貢獻的代…