【Web前端开发基础】CSS3之空间转换和动画
CSS3之空间转换和动画
目录
- CSS3之空间转换和动画
 - 一、空间转换
 - 1.1 概述
 - 1.2 3D转换常用的属性
 - 1.3 3D转换:translate3d(位移)
 - 1.4 3D转换:perspective(视角)
 - 1.5 3D转换:rotate3d(旋转)
 - 1.6 3D转换:transform-style: preserve-3d(立体呈现)
 - 1.7 3D转换:scale3d(缩放)
 - 1.7 3D导航案例
 
- 二、动画
 - 2.1 动画介绍
 - 2.2 动画的基本使用
 - 2.3 动画的常用属性
 - 2.4 逐帧动画
 
一、空间转换
目标:使用transform属性实现元素在空间内的位移、旋转、缩放等效果
1.1 概述
-  
空间:是从坐标轴角度定义的。x 、y 和z三条坐标轴构成了一个立体空间,z轴位置与视线方向相同
 -  
空间转换也叫3D转换
 -  
属性:transform

 -  
2D转换能够改变元素X轴和Y轴方向特性,3D转换还能改变Z轴方向特性,并且可以通过视角设置透视关系,使元素具有透视效果
 
1.2 3D转换常用的属性

1.3 3D转换:translate3d(位移)
目标:使用translate实现元素空间位移效果
- 语法 
transform: translate3d(x, y, z);transform: translateX(x);transform: translateY(y);transform: translateZ(z);
 - 取值(正负即可):① 数字+px ② 百分比
 - 注意点:x,y,z是不能够省略的,如果没有就写0
 
1.4 3D转换:perspective(视角)
目标:使用perspective属性实现透视效果
- 思考:生活中,同一个物体,观察距离不同,视觉上有什么区别? 
- 答:近大远小、近清楚远模糊
 
 - 思考:默认情况下,为什么无法观察到Z轴位移效果? 
- 答:Z轴是视线方向,移动效果是距离的远或近, 电脑屏幕是平面,默认无法观察远近效果
 
 - 属性(添加给父级) 
- perspective: 值;
 - 取值:像素单位数值, 数值一般在800 – 1200
 
 - 作用 
- 空间转换时,为元素添加近大远小、近实远虚的视觉效果

 
 - 空间转换时,为元素添加近大远小、近实远虚的视觉效果
 
1.5 3D转换:rotate3d(旋转)
目标:使用rotate实现元素空间旋转效果
- 语法 
transform: rotate3d(x, y, z, angle);transform: rotateX(x);transform: rotateY(y);transform: rotateZ(z);
 - 注意点: 
rotate3d(x, y, z, angle):用来设置自定义旋转轴的位置及旋转的角度- x,y,z 取值为0-1之间的数字
 
 - 左手法则:判断旋转方向: 左手握住旋转轴, 拇指指向正值方向, 手指弯曲方向为旋转正值方向

 
1.6 3D转换:transform-style: preserve-3d(立体呈现)
目标: 使用transform-style: preserve-3d呈现立体图形
-  
思考:使用perspective透视属性能否呈现立体图形?
- 答:不能,perspective只增加近大远小、近实远虚的视觉效果
 
 -  
实现方法
- 添加transform-style: preserve-3d;
 - 使子元素处于真正的3d空间

 
 -  
transform-style取值
- preserve-3d :设置3D转换
 - flat :默认值
 
 -  
呈现立体图形步骤
- 盒子父元素添加transform-style: preserve-3d;
 - 按需求设置子盒子的位置(位移或旋转)
 
 -  
注意:空间内,转换元素都有自已独立的坐标轴,互不干扰

 
1.7 3D转换:scale3d(缩放)
目标:使用scale实现空间缩放效果
- 语法 
transform: scale3d(x, y, z)transform: scaleX(x)transform: scaleY(y)transform: scaleZ(z)
 
1.7 3D导航案例
目标:使用立体呈现技巧实现3D导航效果
- 实现思路: 
-  
搭建立方体:绿色盒子是立方体的前面,橙色盒子是立方体的上面

- li标签 
- 添加立体呈现属性transform-style: preserve-3d;
 - 添加旋转属性(为了便于观察效果,案例完成后删除即可)

 
 - a标签 
- 调节a标签的位置 
- a标签定位(子绝父相)
 - 英文部分添加旋转和位移样式
 - 中文部分添加位移样式

 
 
 - 调节a标签的位置 
 
 - li标签 
 -  
添加hover状态旋转切换效果
- 鼠标滑过li, 添加空间旋转样式
 - li添加过渡属性
 
 -  
注意: 案例完成后,删除li的旋转样式
 
 -  
 
二、动画
目标:使用animation添加动画效果
2.1 动画介绍
-  
动画是CSS3中具有颠覆性的特征之一,有通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。
相较于过渡,动画可以实现更多变化,更多控制,连续自动播放等效果 -  
动画效果:实现多个状态间的变化过程,动画过程可控(重复播放、最终画面、是否暂停)

 -  
动画的本质是快速切换大量图片时在人脑中形成的具有连续性的画面
 -  
构成动画的最小单元:帧或动画帧

 
2.2 动画的基本使用
-  
制作动画分为两步:
-  
先定义动画

 -  
再使用(调用)动画

 
 -  
 -  
动画的序列
- 0%是动画的开始,100%是动画的完成。这样的规则就是动画序列
 - 在 @keyframes 中规定某项CSS样式,就能创建由当前样式逐渐改为新样式的动画效果
 - 动画是元素从一种样式逐渐变化为另外一种样式的效果。你可以改变任意多的样式任意多的次数
 - 请使用百分比来规定变化发生的时间,或者关键词 from 和 to ,等同于 0% 和 100%
 
 
- 使用 @keyframes 定义动画(类似定义类选择器)
 
/* 定义动画 *//* ① 百分比 */
@keyframes 动画名 {0% {初始状态样式}100% {动画结束时样式}
}/* 关键字 */
@keyframes 动画名 {from {初始状态样式}to {动画结束时样式}
}
 
- 元素使用动画
 
/* 使用(调用动画) */使用动画的元素 {/* 调用动画 */animation-name: 动画名称;/* 持续时间 */animation-duration: 持续时间;
}
 
- 快速体验
定义并使用动画 
/* 需求:我们打开页面,盒子就从左边走到右边 */
/* 第1种:百分比 */
/* 1.定义动画 */
@keyframes move {0% {transform: translate(0, 0);}100% {transform: translate(1000px, 0);}
}
/* 第2种:关键字 */
/* 1.定义动画 */
/* from 和 to 等价于 0% 和 100% */
@keyframes move {from {transform: translate(0, 0);}to {transform: translate(1000px, 0);}
}
div {width: 200px;height: 200px;background-color: pink;/* 2.调用动画 *//* 动画名称 */animation-name: move;/* 动画持续时间 */animation-duration: 2s;
}
 
动画序列里的百分比
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initialscale=1.0"><title>Document</title><style>/* 动画序列 *//* 1. 可以做多个状态的变化 keyframes 关键帧*//* 2. 里面的百分比要是整数 *//* 3. 里面的百分比就是 总的时间的划分 eg: 6s * 25% = 1.25s*/@keyframes move {/* 起始状态,可以为空或者不写 */0% {transform: translate(0, 0);}25% {transform: translate(1000px, 0);}50% {transform: translate(1000px, 500px);}75% {transform: translate(0, 500px);}100% {transform: translate(0, 0);}}div {width: 200px;height: 200px;background-color: pink;/* 调用动画,直接使用名字调用 */animation-name: move;/* 设置动画持续时间 */animation-duration: 6s;}</style>
</head>
<body><div></div>
</body>
</html>
 
- 动画的连写
 - 动画名称和动画时长必须赋值
 - 取值不分先后顺序
 - 如果有2个时间值,第一个时间表示动画时长,第二个时间表示延迟时间
 
 
2.3 动画的常用属性

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>@keyframes move {0% {transform: translate(0, 0);}100% {transform: translate(1000px, 0);}}div {width: 100px;height: 100px;background-color: pink;/* 动画名称(必备属性) */animation-name: move;/* 持续时间(必备属性)*/animation-duration: 2s;/* 动画运动速度曲线 */animation-timing-function: ease;/* 动画何时开始 */animation-delay: 1s;/* 重复次数 iteration 重复的 count 次数 infinite 无限 */animation-iteration-count: infinite;/* 是否反方向播放 默认是normal 若需要逆向播放,则使用alternate*/animation-direction: alternate;/* 动画结束状态 默认是backwards 回到起始状态,我们也可以让他停留在结束状态
forwards */animation-fill-mode: forwards;}div:hover {/* 动画播放状态 *//* 鼠标经过 div, 让这个 div 的动画停止,鼠标离开 div 就继续播放动画 */animation-play-state: paused;}</style>
</head>
<body><div></div>
</body>
</html>
 
2.4 逐帧动画
目标:使用steps实现逐帧动画
-  
属性: animation-timing-function
 -  
取值: steps(数字):逐帧动画

 -  
逐帧动画:帧动画。开发中,一般配合精灵图实现动画效果
 -  
animation-timing-function: steps(N);将动画过程等分成N份

 -  
精灵动画制作步骤
- 准备显示区域 
- 设置盒子尺寸是一张小图的尺寸,背景图为当前精灵图
 
 - 定义动画 
- 改变背景图的位置(移动的距离就是精灵图的宽度)
 
 - 使用动画 
- 添加速度曲线steps(N),N与精灵图上小图个数相同
 - 添加无限重复效果

 
 
 - 准备显示区域 
 -  
多组动画
- 思考:如果想让小人跑远一些,该如何实现?
 - 答:精灵动画的同时添加盒子位移动画

 
 
/* 样式代码 */
.box {width: 140px;height: 140px;background: url("./images/jlbg.png") no-repeat 0 0;animation: run 1s steps(12) 3, move 3s linear forwards;
}
@keyframes run {/* 动画的开始状态和原来的默认样式相同时,可以省略开始状态的代码 */0% {background-position: 0 0;}100% {background-position: -1680px 0;}
}
@keyframes move {0% {transform: translate(0);}100% {transform: translate(1000px);}
}
 
<!-- 结构代码 -->
<div class="box"></div>
相关文章:
【Web前端开发基础】CSS3之空间转换和动画
CSS3之空间转换和动画 目录 CSS3之空间转换和动画一、空间转换1.1 概述1.2 3D转换常用的属性1.3 3D转换:translate3d(位移)1.4 3D转换:perspective(视角)1.5 3D转换:rotate3d(旋转&a…...
Go实现一个简单的烟花秀效果(附带源码)
在 Go 语言中,要实现烟花秀效果可以使用 github.com/fogleman/gg 包进行绘图。以下是一个简单的例子: 首先,确保你已经安装了(有时候需要梯子才可以安装) github.com/fogleman/gg 包: go get -u github.c…...
【数学建模】插值与拟合
文章目录 插值插值方法用Python解决插值问题 拟合最小二乘拟合数据拟合的Python实现 适用情况 处理由试验、测量得到的大量数据或一些过于复杂而不便于计算的函数表达式时,构造一个简单函数作为要考察数据或复杂函数的近似 定义 给定一组数据,需要确定满…...
全卷积网络:革新图像分析
一、介绍 全卷积网络(FCN)的出现标志着计算机视觉领域的一个重要里程碑,特别是在涉及图像分析的任务中。本文深入探讨了 FCN 的概念、它们的架构、它们与传统卷积神经网络 (CNN) 的区别以及它们在各个领域的应用。 就像…...
ubuntu20.04 格式化 硬盘 扩展硬盘GParted
如何在 Ubuntu 22.04 LTS 上安装分区编辑器 GParted?_gparted安装-CSDN博客 sudo apt install gparted 步骤5:启动GParted 安装完成后,您可以在应用程序菜单中找到GParted。点击它以启动分区编辑器。 通过以上步骤,您可以在Ubun…...
docker的资源限制(cgroup)
前瞻 Docker 通过 Cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面, 基本覆盖了常见的资源配额和使用量控制。 Cgroup 是 ControlGroups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 CPU、…...
ChatGPT与文心一言:应用示例与体验比较
ChatGPT 和文心一言哪个更好用? 为了更好地感受ChatGPT和文心一言这两款AI助手如何在实际运用中竞相辉映,我将提供一些典型的应用示例。这些示例都取自真实的用户体验,以帮助解释这两种工具如何让日常生活或工作变得更加轻松。 ChatGPT Ch…...
紫光展锐T760_芯片性能介绍_展锐T760安卓核心板定制
展锐T760核心板是一款基于国产5G芯片的智能模块,采用紫光展锐T760制程工艺为台积电6nm工艺,支持工艺具有出色的能效表现。其采用主流的44架构的八核设计,包括4颗2.2GHz A76核心和4颗A55核心设计,内存单元板载可达8GB Ram256GB ROM…...
从动力系统研究看当今数学界
6.3... Milnor’s definition of “attractors” which has been criticized above by us). The work of [KSS2] of asserting the existence of “nice open set” of Ω(p.148) would be likely not verified, for example we think the first sentence “… since f is nont…...
【征服redis15】分布式锁的功能与整体设计方案
目录 1. 分布式锁的概念 2.基于数据库做分布式锁 2.1 基于表主键唯一做分布式锁 2.2 基于表字段版本号做分布式锁 2.3 基于数据库排他锁做分布式锁 3.使用Redis做分布式锁 3.1 redis实现分布式锁的基本原理 3.2 问题一:增加超时机制,防止长期持有…...
MATLAB中实现机械臂逆运动学求解的方法之一是使用阻尼最小二乘法
MATLAB中实现机械臂逆运动学求解的方法之一是使用阻尼最小二乘法。阻尼最小二乘法通常用于处理数值求解问题中的不稳定性和噪声。以下是一个简单的MATLAB代码示例,演示了机械臂逆运动学的阻尼最小二乘法求解: % 机械臂参数 L1 1; % 机械臂长度 L2 1;…...
2024.1.24 GNSS 学习笔记
1.伪距观测值公式 2.载波相位观测值公式 3.单点定位技术(Single Point Positionin, SPP) 仅使用伪距观测值,不使用其他的辅助信息获得ECEF框架下绝对定位技术。 使用广播星历的轨钟进行定位,考虑到轨钟的米级精度,所以对于<1米的误差&…...
2024-01-22(MongoDB)
1.Mongodb使用的业务场景: 传统的关系型数据库/mysql在“三高”需求以及应对web2.0的网站需求面前,有点力不从心,什么是“三高”需求: a. 对数据库高并发的读写需求 b. 对海量数据的高效率存储和访问需求 c. 对数据库的高可扩…...
无人机航迹规划(六):七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)
一、七种算法(DBO、LO、SWO、COA、LSO、KOA、GRO)简介 1、蜣螂优化算法DBO 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…...
《WebKit 技术内幕》学习之十二(2):安全机制
2 沙箱模型 2.1 原理 一般而言,对于网络上的网页中的JavaScript代码和插件是不受信的(除非是经过认证的网站),特别是一些故意设计侵入浏览器运行的主机代码更是非常危险,通过一些手段或者浏览器中的漏洞,…...
算法优化:LeetCode第122场双周赛解题策略与技巧
接下来会以刷常规题为主 ,周赛的难题想要独立做出来还是有一定难度的,需要消耗大量时间 比赛地址 3011. 判断一个数组是否可以变为有序 public class Solution {public int minimumCost(int[] nums) {if (nums.length < 3) {// 数组长度小于3时&a…...
IDEA导出jar
1、选择导出方式 2、选择Main Class 3、构建jar...
Win10/11中VMware Workstation设置网络桥接模式
文章目录 一、添加VMware Bridge Protocol服务二、配置桥接参数1.启用系统Device Install Service服务2.配置VMware 需要确认物理网卡是否有添加VMware Bridge Protocol服务 添加VMware Bridge Protocol服务 提示:以下是本篇文章正文内容,下面案例可供参…...
html Canvas粒子文字特效
代码有点长,下面是代码: <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>HTML5 Canvas粒子效果文字动画特效DEMO演示</title><link rel"stylesheet" href"css/normalize.c…...
@JsonFormat失效,被jackson自定义配置覆盖
jackson配置类 我的jackson配置类如下,其中serializerByType(LocalDateTime.class, new LocalDateTimeSerializer()) 覆盖了JsonFormat注解 Configuration public class JacksonConfiguration {public static final DateTimeFormatter optionalDateTimePattern (n…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
