【Web前端开发基础】CSS3之空间转换和动画

news2024/9/28 15:30:05

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 :默认值
  • 呈现立体图形步骤

    1. 盒子父元素添加transform-style: preserve-3d;
    2. 按需求设置子盒子的位置(位移或旋转)
  • 注意:空间内,转换元素都有自已独立的坐标轴,互不干扰
    在这里插入图片描述

1.7 3D转换:scale3d(缩放)

目标:使用scale实现空间缩放效果

  • 语法
    • transform: scale3d(x, y, z)
    • transform: scaleX(x)
    • transform: scaleY(y)
    • transform: scaleZ(z)

1.7 3D导航案例

目标:使用立体呈现技巧实现3D导航效果

  • 实现思路:
    1. 搭建立方体:绿色盒子是立方体的前面,橙色盒子是立方体的上面
      在这里插入图片描述

      • li标签
        • 添加立体呈现属性transform-style: preserve-3d;
        • 添加旋转属性(为了便于观察效果,案例完成后删除即可)
          在这里插入图片描述
      • a标签
        • 调节a标签的位置
          • a标签定位(子绝父相)
          • 英文部分添加旋转和位移样式
          • 中文部分添加位移样式
            在这里插入图片描述
    2. 添加hover状态旋转切换效果

      • 鼠标滑过li, 添加空间旋转样式
      • li添加过渡属性
    3. 注意: 案例完成后,删除li的旋转样式

二、动画

目标:使用animation添加动画效果

2.1 动画介绍

  • 动画是CSS3中具有颠覆性的特征之一,有通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。
    相较于过渡,动画可以实现更多变化,更多控制,连续自动播放等效果

  • 动画效果:实现多个状态间的变化过程,动画过程可控(重复播放、最终画面、是否暂停)
    在这里插入图片描述

  • 动画的本质是快速切换大量图片时在人脑中形成的具有连续性的画面

  • 构成动画的最小单元:帧或动画帧
    在这里插入图片描述

2.2 动画的基本使用

  • 制作动画分为两步:

    1. 先定义动画
      在这里插入图片描述

    2. 再使用(调用)动画
      在这里插入图片描述

  • 动画的序列

    • 0%是动画的开始,100%是动画的完成。这样的规则就是动画序列
    • 在 @keyframes 中规定某项CSS样式,就能创建由当前样式逐渐改为新样式的动画效果
    • 动画是元素从一种样式逐渐变化为另外一种样式的效果。你可以改变任意多的样式任意多的次数
    • 请使用百分比来规定变化发生的时间,或者关键词 from 和 to ,等同于 0% 和 100%
  1. 使用 @keyframes 定义动画(类似定义类选择器)
/* 定义动画 */

/* ① 百分比 */
@keyframes 动画名 {
    0% {
        初始状态样式
    }
    100% {
        动画结束时样式
    }
}

/* 关键字 */
@keyframes 动画名 {
    from {
        初始状态样式
    }
    to {
        动画结束时样式
    }
}
  1. 元素使用动画
/* 使用(调用动画) */
	使用动画的元素 {
	/* 调用动画 */
	animation-name: 动画名称;
	/* 持续时间 */
	animation-duration: 持续时间;
}
  1. 快速体验
    定义并使用动画
/* 需求:我们打开页面,盒子就从左边走到右边 */
/* 第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>
  1. 动画的连写
    在这里插入图片描述
    • 动画名称和动画时长必须赋值
    • 取值不分先后顺序
    • 如果有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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1409906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

城市开发区视频系统建设方案:打造视频基座、加强图像数据治理

一、背景需求 随着城市建设的步伐日益加快&#xff0c;开发区已经成为了我国工业化、城镇化和对外开放的重要载体。自贸区、开发区和产业园的管理工作自然也变得至关重要。在城市经开区的展览展示馆、进出口商品展示交易中心等地&#xff0c;数千路监控摄像头遍布各角落&#…

matlab窗函数-hann窗和hamming窗函数

窗函数的作用 在时域上&#xff0c;窗函数可以看作是对原始信号进行截断或调制的加权函数。这些窗函数通常在时域上是有限的宽度&#xff0c;并且具有对称性&#xff0c;如矩形窗、汉宁窗、汉明窗和布莱克曼窗等。例如&#xff0c;汉明窗是一种对称窗函数&#xff0c;它可以用…

Cuda笔记1

1、培训001 1 1…100&#xff0c;CPU是串行执行&#xff0c;GPU是分成几部分同时计算&#xff0c;如123,456… 2、培训002 一来一回 每种定义有对应的调用位置&#xff0c;和执行位置&#xff0c;不对会报错。 下图是用NVPROF时间分析 下图是资源分析 1&#xff09; CUDA…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第 2章感知机

文章目录 第 2章感知机2.1 感知机模型2.2 感知机学习策略2.2.1 数据集的线性可分性2.2.2 感知机学习策略 2.3 感知机学习算法2.3.1 感知机学习算法的原始形式2.3.2 算法的收敛性2.3.3 感知机学习算法的对偶形式 实践&#xff1a;二分类模型&#xff08;iris数据集&#xff09;数…

爬虫正则+bs4+xpath+综合实战详解

Day3 - 1.数据解析概述_哔哩哔哩_bilibili 聚焦爬虫&#xff1a;爬取页面中指定的页面内容 编码流程&#xff1a;指定url -> 发起请求 -> 获取响应数据 -> 数据解析 -> 持久化存储 数据解析分类&#xff1a;正则、bs4、xpath(本教程的重点) 数据解析原理概述&am…

2024群硕荣誉首响,第十三届公益节斩获企业大奖

2024年1月23日至24日&#xff0c;第十三届公益节在北京顺利举行。 历经多年的探索和实践&#xff0c;公益节已经成为中国公益慈善领域颇具影响力的年度盛事。本届公益节全面恢复线下活动&#xff0c;各大企业齐聚现场&#xff0c;展现社会责任的力量&#xff0c;现场气氛热烈而…

什么是5G RedCap?5G RedCap有什么优势?

5G RedCap&#xff08;Reduced Capability&#xff09;是指5G轻量化技术&#xff0c;即通过对5G技术进行一定程度的“功能裁剪”&#xff0c;来降低终端和模组的复杂度、成本、尺寸和功耗等指标&#xff0c;从而“量体裁衣”适配不同的物联需求&#xff0c;实现兼顾物联网系统的…

【送书活动八期】docker容器中登陆并操作postgresql

这里的背景比较简单&#xff0c;因为区块链浏览器使用的是blockscout&#xff0c;blockscout的数据库选择的是postgresql&#xff0c;这些服务组件都是使用的docker容器来管理&#xff0c;今天进行区块链上交易查询的时候&#xff0c;发现数据存在部分问题&#xff0c;因此需要…

大数据信用查询系统能查到什么呢?

在金融助贷行业&#xff0c;大数据有叫大数据信用或者网贷大数据&#xff0c;在申贷的时候&#xff0c;想必大多数人都有听说过&#xff0c;很多人因为大数据不良的原因申贷被拒过&#xff0c;那大数据信用查询系统能查到什么呢?本文就简单为大家总结几点大数据信用查询的内容…

freeRTOS总结(十)消息 队列

1&#xff0c;队列简介&#xff08;了解&#xff09; 队列是任务到任务、任务到中断、中断到任务数据交流的一种机制&#xff08;消息传递&#xff09; 与全局变量的区别 类似全局变量&#xff1f;假设有一个全局变量a 0&#xff0c;现有两个任务都在写这个变量a 假如 当任务…

三层架构-pc通外网小实验

要求:pc端能上外网(isp) 效果图:pc1(VLAN2)和pc3(vlan3)都能ping通2.2.2.2(R2环回) 代码:#先配置好r1,r2,端口ip # [R1] ip route-static 0.0.0.0 0.0.0.0 10.1.1.2 acl 2000 rule permit source any interface GigabitEthernet0/0/2 nat outbound 2000 …

Android消息推送 SSE(Server-Sent Events)方案实践

转载请注明出处&#xff1a;https://blog.csdn.net/kong_gu_you_lan/article/details/135777170 本文出自 容华谢后的博客 0.写在前面 最近公司项目用到了消息推送功能&#xff0c;在技术选型的时候想要找一个轻量级的方案&#xff0c;偶然看到一篇文章讲ChatGPT的对话机制是基…

Bank_Code_FullName_2020.06.16.xlsx

Bank_Code_FullName_2020.06.16.xlsx 银行联行号和全称 https://download.csdn.net/download/spencer_tseng/88780566 144692条记录&#xff0c;没法子贴上去

抖音VR直播:沉浸式体验一键打通360度精彩

随着5G技术的发展&#xff0c;VR直播近年来也逐步进入到大众的视野中&#xff0c;相比于传统直播&#xff0c;VR直播能够提供更加丰富的内容和多样化的互动方式&#xff0c;让观众更有沉浸感和参与感。现如今&#xff0c;抖音平台也上线了VR直播&#xff0c;凭借沉浸式体验和有…

基于 pytorch-openpose 实现 “多目标” 人体姿态估计

前言 还记得上次通过 MediaPipe 估计人体姿态关键点驱动 3D 角色模型&#xff0c;虽然节省了动作 K 帧时间&#xff0c;但是网上还有一种似乎更方便的方法。MagicAnimate 就是其一&#xff0c;说是只要提供一张人物图片和一段动作视频 (舞蹈武术等)&#xff0c;就可以完成图片…

【Kubernetes】深入了解Kubernetes(K8s):现代容器编排的引领者

欢迎来到英杰社区&#xff1a; https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区&#xff1a; https://bbs.csdn.net/topics/617897397 作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xf…

JVM-初始JVM

什么是JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 Java源代码执行流程如下&#xff1a; JVM的功能 1 - 解释和运行 2 - 内存管理 3 - 即时编译 解释和运行 解释…

LeetCode.2865. 美丽塔 I

题目 题目链接 分析 闲谈&#xff1a;每次读 LeetCode 的题目描述都要费老大劲&#xff0c;o(╥﹏╥)o 题意&#xff1a;这个其实意思就是以数组的每一位作为最高点&#xff0c;这个点&#xff08;数字&#xff09;左右两边的数字都不能大于这个数字(可以等于)&#xff0c;…

Qt基础-屏蔽qDebug()、qWarning()调试和警告消息

本文讲解Qt如何-屏蔽qDebug()、qWarning()调试和警告消息 在工程文件.pro里面添加 DEFINES QT_NO_WARNING_OUTPUT\ QT_NO_DEBUG_OUTPUT 如果只想Release版本的时候不打印&#xff1a; Release:DEFINES QT_NO_WARNING_OUTPUT\ QT_NO_DEBUG_OUTPUT 这样只是在Release版本…

想要透明拼接屏展现更加效果,视频源是技术活,尤其作为直播背景

随着科技的飞速发展&#xff0c;视频制作和显示技术也在不断进步。透明拼接屏视频作为一种新型的视频形式&#xff0c;在许多场合都得到了广泛的应用。尼伽小编将深入探讨透明拼接屏视频的制作过程、要求、清晰度&#xff0c;以及目前常作为直播背景的优势。 一、透明拼接屏视频…