css3-动画

news2025/4/6 18:30:19

目录

      • 语法
        • 转换
          • 平移
          • 旋转
          • 缩放
          • 复合属性的顺序问题
        • 过渡动画
        • 帧动画
      • 案例
        • 案例1-热点图dot(缩放)
        • 案例2-热点图dot(缩放)
        • 案例3-开红包(旋转)
      • 问题
        • 问题1-transform不起作用
        • 问题2 - 过渡动画不起效果

语法

转换

css3中的转换允许我们对元素进行旋转、缩放、移动或倾斜。它分为2D转换 或 3D转换,一般与动画结合使用。

平移

语法

transform:translate(x,y)
  • 以元素当前的位置为相对参照,进行水平、垂直方向移动;x 表示水平方向移动,y 表示垂直方向移动;若是只设置一个值则代表水平移动;
  • 单位
    • px
    • 百分比:x、y的取值如果是百分比,则是相对于元素本身尺寸
旋转

语法

rotateX()						/* 沿X轴旋转 */
rotateY()						/* 沿Y轴旋转 */
rotateZ()						/* 沿Z轴旋转 */
rotate()                      /* 默认沿着z轴旋转 */
  • 取值
    • 角度值为正数,表示顺时针旋转;
    • 角度值为负数,表示逆时针旋转;
缩放

语法

transform:scale(h,v)
  • h表示水平缩放比例,v表示垂直缩放比例 -> 如果设置1个值,表示水平以及垂直同时缩放
  • 取值
    • 0-1之间缩小
    • 大于1进行放大
复合属性的顺序问题

transform是一个复合属性,可以同时设置平移、旋转、缩放。
需要值得注意的是,变换的执行顺序是从后向前执行的!

过渡动画

语法

transition:all 1s ease 1s;

transition是一个复合属性

  • transition-property 指定应用过渡属性的名称 (width ,height,、、、、all表示所有的属性都有过渡效果)
  • transition-duration:过渡时间
  • transition-timing-function:过渡曲线
    • ease --默认 (由慢速开始,加速,慢速结束)
    • linear–匀速
    • ease-in --慢速开始
    • ease-out --慢速结束

过渡属性是谁过渡给谁加!
transition动画的缺点

  • [1]动画不能够自动开始(可以借助hover);
  • [2]动画次数只能固定一次,不能循环;​

帧动画

帧动画规则内指定一个 CSS 样式和动画将逐步从目前的样式更改为新的样式,使用帧动画分为两步:

  • [1] 定义帧动画
    @keyframes 动画名{
      from {
        // 开始的css样式
      }
      to{
       // 结束的css样式
      }
    }
    
    @keyframes 动画名{
      0% {
        // 开始的css样式
      }
      50%{
        // 中间过渡的css样式
      }
      ...
      100%{
        // 结束的css样式
      }
    }
    
  • [2] 使用帧动画
    • animation是一个复合属性,规定了除animation-play-state属性外的所有属性的简写属性;
        animation: 动画名 动画一个周期所需时间 动画速度 动画延迟时间 动画次数 停留位置;
      
      • animation-name:属性名
      • animation-duration:规定动画完成一个周期所花费的s数;
      • animation-timing-function: 规定动画的速度曲线
        • ease --默认 (由慢速开始,加速,慢速结束)
        • linear–匀速
        • ease-in --慢速开始
        • ease-out --慢速结束
      • animation-delay: 规定动画的延迟时间
      • animation-iteration-count:规定动画的播放次数
        • 1次(默认)
        • infinite:无数次
      • animation-paly-state:规定动画是否正在运行或暂停
        • running:正在运行
        • pause:暂停
      • animation-fill-mode: 规定动画结束时的状态
        • forwards:设置对象状态为动画结束时的状态
        • backwards(默认): 设置对象状态为动画开始时的状态
  • 注意:若是仅定义帧动画而没有使用,将不会产生任何效果。

案例

案例1-热点图dot(缩放)

现在存在图片在这里插入图片描述,做成一个呼吸效果的动画,->动画视频链接

实现代码如下:

<body>
  <img src="https://cdn.ituibei.cn/dist/welfareAT02/private/C/CFirstLayer_31/img/water_24855.png" alt="">
</body>
<style>
  @keyframes dot{
    0%{
      transform: scale(0);
      opacity: 0;
    }
    100%{
      transform: scale(1.3);
    }
  }
  body{
    background-color: red;
    text-align: center;
    padding-top: 100px;
  }
  img{
    animation: dot 0.6s linear infinite;
    width:24px;
    height: 24px;
  }
</style>

实现过程

  • 在这里插入图片描述
    • 在定义动画时只定义了to(初始样式),没有定义from(结束样式),则默认结束样式为当前元素的样式----> img标签没有定义transform与opacity,则结束时的样式为默认值
      transform:scale(1);
      opacity:1;
      
    • 动画仅执行一次,此时在运行时这个图片是一个渐入的感觉-> 动画视频链接
  • 在这里插入图片描述
    • 只要将动画次数改成无数次,就已经实现了所需效果,但是若是想效果更丝滑一点,可以在from(结束时)方大一下,这样在每次动画结束下次动画开始时会有一个回缩的效果;
      100%{
        transform: scale(1.3);
      }
      

案例2-热点图dot(缩放)

若是dot为非图片,则一个类似案例1的呼吸动画,实现代码如下:

<!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>
      body {
        background-color: #999;
        padding-top: 100px;
        text-align: center;
      }
      .fa {
        position: relative;
      }
      .dot {
        position: absolute;
        width: 8px;
        height: 8px;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        border-radius: 50%;
        background-color: chartreuse;
      }
      .wave {
        /* 光波最初时与dot大小相同,只是带有阴影 */
        position: absolute;
        width: 8px;
        height: 8px;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        border-radius: 50%;
        box-shadow: 0 0 12px chartreuse;
        animation: bo 1.2s linear infinite;
      }
      @keyframes bo {
        /* 
          没有设置初始状态,则初始状态为添加动画元素的初始状态
          width: 8px;
          height: 8px;
          opacity: 1;
        */
        70% {
          width: 30px;
          height: 30px;
          opacity: 1;
        }
        100% {
          width: 50px;
          height: 50px;
          opacity: 0;
        }
      }
      .dal {
        animation-delay: 0.6s;
      }
    </style>
  </head>
  <body>
    <div class="fa">
      <div class="dot"></div>
      <div class="wave"></div>
      <div class="wave dal"></div>
    </div>
  </body>
</html>

案例3-开红包(旋转)

在这里插入图片描述
如上图在点击“开”时,希望这个“开”字能够沿着Y轴旋转几圈再进行页面跳转 ->动画视频链接 -> 添加动画效果,实现如下

<!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>开红包</title>
  </head>
  <body>
    <div class="bg">
      <img 
        src="https://lp-ag.umcdn.cn/952575f71c38ffee4ef9ccad033f2ed0/98afec881a187b8c7945a3f0eac7e032.png" 
        class="openbtn"
      />
    </div>
    <script>
      const imgbox = document.getElementsByClassName('openbtn')[0]
      imgbox.onclick= function(){
        imgbox.setAttribute('class','openbtn rotateClass')
        setTimeout(()=>{
          imgbox.setAttribute('class','openbtn')
          location.href = 'https://www.baidu.com'
        },1000)
      }
    </script>
  </body>
  <style>
    @keyframes torotate{
      from{
        transform: rotateY(360deg);
      }
    }
    *{
      padding:0;
      margin: 0;
    }
    .bg{
      position: relative;
      height: 100vh;
      background: url('https://static.adhudong.com/display/styles/images/bodyBg2.8a73276b.png') no-repeat left top;
      background-size: cover;
    }
    .openbtn{
      position: absolute;
      top: 175px;
      left:calc(50% - 50px);
      width: 100px;
      height: 100px;
    }
    .rotateClass{
      animation: torotate 0.5s linear infinite;
    }
  </style>
</html>

问题

问题1-transform不起作用

在这里插入图片描述
现在想做一个效果就是 “开”在水平方向居中且一直旋转,实现如下

 <body>
    <div class="bg">
      <img 
        src="https://lp-ag.umcdn.cn/952575f71c38ffee4ef9ccad033f2ed0/98afec881a187b8c7945a3f0eac7e032.png" 
        class="openbtn"
      />
    </div>
  </body>
  <style>
    @keyframes torotate{
      from{
        transform: rotateY(360deg);
      }
    }
    *{
      padding:0;
      margin: 0;
    }
    .bg{
      position: relative;
      height: 100vh;
      background: url('https://static.adhudong.com/display/styles/images/bodyBg2.8a73276b.png') no-repeat left top;
      background-size: cover;
    }
    .openbtn{
      position: absolute;
      top: 175px;
      left:50%;
      transform: translateX(-50%);
      width: 100px;
      height: 100px;
      animation: torotate 0.5s linear infinite;
    }
  </style>

但是结果却与预期不同,原因是因为在帧动画中 transform这个属性一直在被重新;
解决办法是将translateX(-50%)添加到帧动画中

@keyframes torotate{
  from{
    transform: translateX(-50%) rotateY(360deg);
  }
  to{
    transform: translateX(-50%) rotateY(0deg);
  }
}

问题2 - 过渡动画不起效果

在这里插入图片描述

问题:上图在展开和收缩的时候想做一个过渡动画,但是发现设置了不起作用;

原因:过渡属性要有明确的属性值变化;width、height值被撑开但是值没变就没有办法过渡动画了;

总结:内容撑开的盒子没有办法做宽高的过渡动画

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

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

相关文章

开箱即用的物联网平台-IoTLink

物联网平台是物联网生态系统的重要组成部分&#xff0c;也是一个快速增长的市场&#xff0c;物联网平台为企业提供了巨大的价值&#xff0c;使他们能够降低开发成本、加速启动和简化流程。 一个完整的物联网系统需要硬件、连接、软件、用户界面等。在较高的层面上&#xff0c;…

menuconfig的执行过程

menuconfig &#xff08;1&#xff09;首先在uboot源码顶层目录下的Makefile文件中查找config&#xff08;%表示省略&#xff09; &#xff08;2&#xff09;执行make menuconfig&#xff0c;分别打印输出$(MAKE)、$(bulid)、$可知其对应的内容&#xff0c;如上图所示 总结&a…

用docker部署django后台作为webstack的后台管理系统-其二

0 序言 在之前的博客中&#xff1a; 用docker部署webstack导航网站-其一https://blog.csdn.net/qq_41938259/article/details/128736551?spm1001.2014.3001.5501我成功的将webstack官方推荐的docker容器部署了出来&#xff0c;但是官方的docker容器后端使用的是PHP&#xff0…

08_FreeRTOS列表和列表项讲解

目录 列表和列表项的简介 列表 列表项 迷你列表项 列表和列表项的关系 列表相关API函数介绍 初始化列表vListInitialise函数详解 列表项的初始化函数vListInitialiseItem函数 列表项的插入vListInsert函数 列表项末尾插入vListInsertEnd函数 列表项的删除函数uxLis…

零入门容器云网络实战-5->路由知识总结

本篇文章主要用于收集、整理、总结路由相关知识点。 1、路由分为几种&#xff1f; 直连路由静态路由&#xff08;基本静态路由&#xff0c;等价静态路由&#xff0c;活动静态路由&#xff0c;缺省静态路由&#xff09;动态路由 通过路由协议从相邻路由器学习到的。路由协议&am…

一,SpringMVC入门

0 MVC设计模式 View&#xff08;视图&#xff09;&#xff1a;页面&#xff08;jsp、html&#xff09;&#xff0c;接收用户数据和显示结果。 Controller&#xff08;控制器&#xff09;&#xff1a;action&#xff0c;接收请求&#xff0c;决定程序执行流程。 Model&#xf…

【深度学习】——循环神经网络RNN及实例气温预测

引言 密集连接网络和卷积神经网络都有主要的特点&#xff0c;那就是它们没有记忆。它们单独处理每个输入&#xff0c;在输入和输入之间没有保存任何状态。举个例子&#xff1a;当你在阅读一个句子的时候&#xff0c;你需要记住之前的内容&#xff0c;我们才能动态的了解这个句子…

三、SqlSession的创建以及执行流程

简介 SqlSession接口提供了查询&#xff0c;插入&#xff0c;更新&#xff0c;删除方法&#xff0c;Mybatis中所有的数据库交互都由SqlSession来完成。SqlSession 对象完全包含以数据库为背景的所有执行 SQL 操作的方法&#xff0c;它的底层封装了 JDBC 连接&#xff0c;可以用…

微服务链路追踪SkyWalking学习笔记

目录 1、skywalking是什么 1.2 链路追踪框架对比 1.3 性能对比 1.4 Skywalking主要功能特性 2、 SkyWalking 环境搭建部署 2.1 下载 SkyWalking 2.2 搭建SkyWalking OAP 服务 2.3 SkyWalking中三个概念 3、 SkyWalking 接入微服务 3.1 linux环境—通过jar包方式接入 …

SAP ADM100-2.5 系统启动:日志文件

本节将介绍SAP ABAP系统启动时最重要的log文件和Trce文件,以掌握通过使用系统启动log文件和trace文件分析系统问题。 1、记录系统启动过程 启动过程是一个特别重要的阶段,因此该过程将被操作系统、SAP系统、数据库记录。如果SAP系统没有启动,那么你将在log日志文件中发现相…

C#使用IronPython调用Python

一、前言以下摘自百度百科&#xff1a;IronPython 是一种在 NET 和 Mono 上实现的 Python 语言&#xff0c;由 Jim Hugunin&#xff08;同时也是 Jython 创造者&#xff09;所创造。1.0 版于2006年9月5日发布。随后&#xff0c;在 2007 年&#xff0c;开发者决定改写架构&#…

音视频xxxx

文章目录前言编解码硬件解码(高级)软解码(低级)软、硬解码对比视频解码有四个步骤Android 系统中编解码器的命名方式查看当前设备支持的硬解码基础知识RGB色彩空间常见的格式对比YUV索引格式分离RGB24像素数据中的R、G、B分量BMP 文件格式格式组成像素排列顺序RGB24格式像素数据…

Apache Solr 9.1-(三)集群模式下通过Http API操作Apache Solr

Apache Solr 9.1-&#xff08;三&#xff09;集群模式下通过Http API操作Apache Solr Solr是一个基于Apache Lucene的搜索服务器&#xff0c;Apache Lucene是开源的、基于Java的信息检索库&#xff0c;Solr能为用户提供无论在任何时候都可以根据用户的查询请求返回结果&#xf…

网络原理(TCP/IP)(3)

4)滑动窗口 1)咱们滑动窗口的效果就是说在我们尽可能地保证可靠性的情况下&#xff0c;尽可能的提高传输效率2)况且咱们进行发送滑动窗口的本质就是说进行批量的发送数据&#xff0c;咱们尽可能说是把等待ACK的时间总体进行缩短&#xff0c;咱们可以把等待一份ACK的时间变成等待…

凸优化学习:PART1凸集

凸优化学习PART1 一、引言&#xff1a;优化问题简介 优化问题的定义 凸优化是优化的一种&#xff0c;是优化中比较容易的问题。在讲解优化问题前&#xff0c;首先说明什么是优化/数学规划&#xff08;Optimization/Mathematical Planning&#xff09;。 优化&#xff1a;从一…

搭建electron开发环境

electron是使用js,html,css构建桌面端应用程序的框架&#xff0c;可以使用electron开发Windows和Mac端应用。 安装nodejs,npm,cnpm 首先需要安装nodejs,npm和cnpm&#xff0c;安装后在命令行输入 node -v 和npm -v&#xff0c;如果输出了版本号&#xff0c;说明已经正常安装。…

数据仓库-数据模型建设方法总结(全)

一、大数据领域建模综述 1.1 为什么需要数据建模 有结构地分类组织和存储是我们面临的一个挑战。 数据模型强调从业务、数据存取和使用角度合理存储数据。 数据模型方法&#xff0c;以便在性能、成本、效率之间取得最佳平衡 成本&#xff1a;良好的数据模型能极大地减少不必…

MyBatis:批量添加记录

MyBatis&#xff0c;一款优秀的ORM映射框架&#xff0c;可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;Plain Old Java Objects&#xff0c;普通老式 Java 对象&#xff09;为数据库中的记录。同时&#xff0c;MyBatis提供了动态SQL特性&#x…

梦熊杯-十二月月赛-白银组题解-C.永恒

C. Problem C.永恒&#xff08;eternity.cpp&#xff09; 内存限制&#xff1a;256 MiB 时间限制&#xff1a;1000 ms 标准输入输出 题目类型&#xff1a;传统 评测方式&#xff1a;文本比较 题目描述: 「稻妻」是「永恒」的国度。 巴尔泽布认为&#xff0c;如果一个数…

感知机与门电路

前言&#xff1a;简述单层感知机特征及三种表示方式&#xff0c;并用单层感知机描述门电路&#xff0c;借由单层感知机无法处理非线性空间的问题&#xff0c;引出多层感知机。 单层感知机 感知机&#xff08;preceptron&#xff09;接收多个输入信号&#xff0c;输出一个信号…