CSS的2D和3D动画效果
CSS的2D和3D动画效果:网页动态设计的魔法
在现代网页设计中,动画已经成为提升用户体验的重要元素。通过引入动态效果,我们不仅可以使交互更加流畅和直观,还能吸引用户的注意力,增强品牌认知度。CSS提供了强大的工具,可以轻松实现2D和3D动画效果。在这篇博客中,我们将详细探讨CSS动画的基本概念、实现方法以及如何在项目中有效应用这些技巧。
一、CSS动画的基础
1.1 动画与过渡
CSS动画主要通过两种方式实现:过渡(transitions)和关键帧动画(keyframes)。
-
过渡(Transitions):用于平滑改变CSS属性值。通过
transition
属性,可以让属性在一段时间内逐渐变化。.box {width: 100px;height: 100px;background-color: red;transition: width 2s, height 2s, transform 2s; }.box:hover {width: 200px;height: 200px;transform: rotate(45deg); }
-
关键帧动画(Keyframes):用于创建更复杂的动画序列。通过定义一组样式状态,动画在不同时间点逐渐过渡。
@keyframes example {from {background-color: red;}to {background-color: yellow;} }.box {animation: example 5s infinite; }
1.2 动画属性详解
animation-name
:指定要绑定到选择器的关键帧名称。animation-duration
:设置动画完成一个周期所需的时间。animation-timing-function
:定义动画的速度曲线。animation-delay
:动画开始前的延迟时间。animation-iteration-count
:动画的播放次数。animation-direction
:指定动画是否逆向播放。
二、2D动画
2D动画在网页设计中被广泛使用,它们可以轻松实现元素移动、旋转、缩放等效果,使网站看起来更具活力。
2.1 平移动画
平移动画可以通过translate
属性实现,利用X和Y轴的变化来移动元素。
@keyframes move {from {transform: translateX(0);}to {transform: translateX(200px);}
}.box {animation: move 3s ease-in-out infinite alternate;
}
2.2 旋转动画
旋转动画通常使用rotate
属性,通过指定角度使元素旋转。
@keyframes spin {from {transform: rotate(0deg);}to {transform: rotate(360deg);}
}.box {animation: spin 4s linear infinite;
}
2.3 缩放动画
缩放动画借助scale
属性实现,用于改变元素的大小。
@keyframes scale {0% {transform: scale(1);}50% {transform: scale(1.5);}100% {transform: scale(1);}
}.box {animation: scale 2s ease-in-out infinite;
}
2.4 淡入淡出
通过调整元素的不透明度,可以实现淡入淡出的效果。
@keyframes fade {from {opacity: 0;}to {opacity: 1;}
}.box {animation: fade 3s ease forwards;
}
三、3D动画
3D动画为网页设计注入了新的可能性,可以创建出更加吸引眼球的视觉效果。利用CSS3的3D变换属性,开发者可以在网页上实现立体的动画效果。
3.1 3D变换的基础
perspective
:定义3D空间的视距即观察者与Z=0平面的距离。较小的值导致较强的透视效果。transform-style
:指明子元素是如何被看待的,preserve-3d
用于保留3D环境。transform-origin
:设置变换的基点,即元素的旋转和缩放中心。
3.2 3D旋转
通过rotateX
、rotateY
和rotateZ
实现3D旋转效果。
@keyframes rotate3D {from {transform: rotateY(0deg);}to {transform: rotateY(360deg);}
}.cube {width: 100px;height: 100px;background-color: lime;animation: rotate3D 5s infinite linear;transform-style: preserve-3d;
}
3.3 3D翻转
通过结合rotateX
和rotateY
可以实现3D翻转效果。
.card {width: 200px;height: 300px;perspective: 1000px;
}.inner-card {width: 100%;height: 100%;position: relative;transform-style: preserve-3d;transition: transform 0.8s;
}.card:hover .inner-card {transform: rotateY(180deg);
}.front, .back {position: absolute;width: 100%;height: 100%;backface-visibility: hidden;
}.back {transform: rotateY(180deg);
}
四、结合实例实现生动效果
4.1 创建加载动画
<div class="loader"></div>
.loader {border: 16px solid #f3f3f3;border-top: 16px solid #3498db;border-radius: 50%;width: 120px;height: 120px;animation: spinLoader 2s linear infinite;
}@keyframes spinLoader {0% { transform: rotate(0deg); }100% { transform: rotate(360deg); }
}
4.2 实现旋转立方体
<div class="cube"><div class="face front">Front</div><div class="face back">Back</div><div class="face left">Left</div><div class="face right">Right</div><div class="face top">Top</div><div class="face bottom">Bottom</div>
</div>
.cube {position: relative;width: 100px;transform-style: preserve-3d;animation: rotateCube 10s infinite linear;
}.face {position: absolute;width: 100px;height: 100px;background: rgba(255, 255, 255, 0.8);border: 1px solid #ccc;
}.front { transform: rotateY( 0deg) translateZ(50px); }
.back { transform: rotateY(180deg) translateZ(50px); }
.left { transform: rotateY(-90deg) translateZ(50px); }
.right { transform: rotateY( 90deg) translateZ(50px); }
.top { transform: rotateX( 90deg) translateZ(50px); }
.bottom { transform: rotateX(-90deg) translateZ(50px); }@keyframes rotateCube {from { transform: rotateX(0) rotateY(0); }to { transform: rotateX(360deg) rotateY(360deg); }
}
五、优化与性能建议
在使用CSS动画时,性能优化是重要的考虑因素。以下是一些建议:
-
利用复合图层:使用
will-change
来提示浏览器即将发生动画的元素,这可能会创建新的复合图层,从而提高性能。 -
避免大量DOM操作:动画中尽量减少触发重绘和布局的DOM操作。
-
减少使用大尺寸图片:如果动画需要图像,使用响应式图像和矢量图形可以提高性能。
-
CSS过JavaScript:在可能的情况下优先使用CSS动画,因为它们通常比JavaScript可以更高效地运行。
六、总结
通过CSS实现2D和3D动画,可以显著提升网页的视觉表现力和用户交互体验。现代浏览器提供了丰富的CSS动画工具,开发者可以通过合理设计和优化,在网页中轻松加入动感效果。希望这篇文章能够帮助您更好地理解和应用CSS动画技术,为您的网页设计添上炫丽的一笔。
相关文章:
CSS的2D和3D动画效果
CSS的2D和3D动画效果:网页动态设计的魔法 在现代网页设计中,动画已经成为提升用户体验的重要元素。通过引入动态效果,我们不仅可以使交互更加流畅和直观,还能吸引用户的注意力,增强品牌认知度。CSS提供了强大的工具&a…...
30天学会Go--第9天 GO语言 Mysql 学习与实践
30天学会Go–第9天 GO语言 MySQL学习与实践 文章目录 30天学会Go--第9天 GO语言 MySQL学习与实践前言一、MySQL 基础知识1.1 MySQL 的核心特征1.2 MySQL 的常见使用情景 二、安装 MySQL2.1 Windows 安装2.2 macOS 安装2.3 Linux 安装 三、MySQL 常用命令3.1 数据库操作3.2 表操…...
跟李笑来学美式俚语(Most Common American Idioms): Part 54
Most Common American Idioms: Part 54 前言 本文是学习李笑来的Most Common American Idioms这本书的学习笔记,自用。 Github仓库链接:https://github.com/xiaolai/most-common-american-idioms 使用方法: 直接下载下来(或者clone到本地…...

Angular由一个bug说起之十一:排序之后无法展开 Row
问题现象 在使用 Material Table 时,排序功能触发了一个奇怪的 Bug:表格的 Row 无法展开。最终排查发现,问题的根源在于 trackBy 的错误使用。trackBy 方法接受两个参数:index(数据索引)和 row(…...
使用 Flutter 进行移动应用开发:深入探索
文章目录 前言一、介绍二、安装 Flutter 环境三、Flutter 应用结构与基础组件四、状态管理策略五、高级主题结语 前言 随着移动技术的迅猛发展,跨平台开发的需求日益增长。开发者们一直在寻找一种既能保证应用性能又能减少开发成本和时间的技术方案。Flutter 应运而…...
2024年天津市职业院校技能大赛高职组 “信息安全管理与评估”样题第三阶段
(四)第三阶段竞小组(赛项)目(300分) 第三阶段竞赛内容是:网络安全渗透(夺旗挑战赛CTF) 本模块要求参赛者作为攻击方,运用所学的信息收集、漏洞发现、漏洞利用等渗透测试技…...
docker批量创建cloudstack虚拟主机脚本
批量创建cloudstack脚本 #!/bin/bash # 配置变量 container_prefix"cloudworker-" base_ip"192.168.1." start_ip2 #开始ip start_container2 #上同 end_container4 #结束ip 包括 network_name"my_macvlan_network" image_name"dockedahi:…...

npm发布插件到私有仓库保姆级教程
在开发项目的过程中,我们经常需要安装插件依赖,那么怎么把自己开发的组件封装成一个插件,并发布到npm 插件市场或者上传到私有仓库里面呢?今天总结下自己发布插件到私有仓库的记录: 一、创建组件 执行命令创建一个空…...

WinRAR V7.10纯净体验
前言 很多同学在安装了WinRAR之后,每次用这个软件解压文件时,都会先跳出一个广。这个广就像打开了一个新窗口,很打扰人。从WinRAR的5.40版本开始,哪怕是简体中文版的,都会这样弹广告。不管你有没有注册账号࿰…...

scss文件内引入其他scss文件报错
1、今天在编译一些老项目的时候,老是提示下面信息 2、而且有很多Sass import rules are deprecated and will be removed in Dart Sass 3.0.0.警告 3、用npm view sass versions看,其中sass的最新版本是1.82.0 4、经过测试"sass": "1.75…...

1-12 GD32基于定时器输入捕获
前言: 基于本人对相关知识回顾与思考,仅供学习参考 目录 前言: 1.0 输入捕获 2.0 信号周期 3.0 定时器配置 4.0 定时器配置 5.0 定时器中断 后记: 1.0 输入捕获 2.0 信号周期 获取信号周期的方法,在第一次捕获与…...
前端基础的讲解-JS(22)
什么是JSON? 1.json 是一种轻量级的数据交换格式 简单来说:json 就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。 类似于: 国际通用语言 - 英语 中国 56 个民族不同地区的通用语言 - 普通话 …...

Minecraft-Datapack数据包开发3-进度与成就
目录 简介成就与进度根进度叶子进度更多的检测方式 简介 代码已经上传: gitee github 成就与进度 工欲善其事必先利其器,别死记硬背,多使用自动生成网站 进度数据包生成器:https://misode.github.io/advancement/指令生成器&…...

泷羽sec-shell编程(3)
shell(3) 声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他…...

如何解决压测过程中JMeter堆内存溢出问题
如何解决压测过程中JMeter堆内存溢出问题 背景一、为什么会堆内存溢出?二、解决堆内存溢出措施三、堆内存参数应该怎么调整?四、堆内存大小配置建议 背景 Windows环境下使用JMeter压测运行一段时间后,JMeter日志窗口报错“java.lang.OutOfMe…...

爬虫项目基础知识详解
文章目录 Python爬虫项目基础知识一、爬虫与数据分析1.1 Python中的requests库Requests 库的安装Requests 库的 get() 方法爬取网页的通用代码框架HTTP 协议及 Requests 库方法Requests 库主要方法解析 1.2 python中的json库1.3 xpath学习之python中lxml库html了解html结构html…...
uniapp 微信小程序webview 和 h5数据通信
项目是uniapp编写,因为是先开发了h5和app,小程序是突然要用的,做兼容开发已经来不及,由于微信小程序webview载入h5 因为通信必须要特殊限制(网页向小程序 postMessage 时,会在以下特定时机触发并收到消息&a…...

SSM01-MyBatis框架(一文学会MyBatis)
Mybatis框架 一、Mybatis框架简介 1.1 传统JDBC的缺陷 (1)数据库连接创建、释放频繁会造成系统资源浪费 【MyBatis通过在核心配置文件中配置数据路连接池解决此问题】 (2) SQL语句在代码中硬编码(PreparedStatement向占位符传…...

【PlantUML系列】状态图(六)
一、状态图的组成部分 状态:对象在其生命周期内可能处于的条件或情形,使用 state "State Name" as Statename 表示。初始状态:表示对象生命周期的开始,使用 [*] 表示。最终状态:表示对象生命周期的结束&…...
JS中重排和重绘的区别是什么?
在JavaScript中,当DOM(文档对象模型)发生变化时,浏览器需要重新计算和更新渲染树,这个过程通常涉及到重排(reflow)和重绘(repaint)。了解这两者之间的区别对于优化页面性…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...