前端css中keyframes(关键帧)的简单使用

前端css中keyframes的使用

  • 一、前言
  • 二、例子
    • (一)、例子源码1
    • (二)、源码1运行效果
      • 1.视频效果
      • 2.截图效果
  • 三、结语
  • 四、定位日期

一、前言

关键帧keyframes是css动画的一种,主要用于定义动画过程中某一阶段的样式变化,可以在动画中定义多个状态。关键帧常配合animation(动画)使用。主要使用步骤如下:

  • 先创建一个动画效果,我们就命名为sun(太阳)
    animation: sun 8s linear 1s infinite; /* 动画持续8秒,无限循环 */
  • 然后对sun(使用关键帧)
@keyframes sun {
      90% {
        transform: translate(-100px, 500px) scale(4); /* 在动画的90%时,太阳下移并放大 */
        background-color: rgb(161, 80, 50); /* 太阳颜色 */
      }
      100% {
        transform: translate(-100px, 600px) scale(4); /* 在动画的100%时,太阳继续下移 */
        filter: drop-shadow(0px 0px 50px rgba(155, 57, 4, 0.5)); /* 添加阴影 */
      }
    }

由上方法,便可生成一个可以变化的太阳了。上方的代码我们只是对90%和100%阶段的关键帧进行属性调整,让太阳效果进行变换。若需求其他动画或想让效果更细致入微,也可以自行多加关键帧,如20%,30%,50%阶段各加一个关键帧,然后再对关键帧调整成自己想要的参数。
我们结合前面学过的filter、transform等知识,对关键帧进行使用。

二、例子

我们先创建一个盒子作为容器用于放置背景,叫他大盒子box_max,然后在大盒子里再创建一个小盒子。然后在小盒子里布置水和天空,以及太阳。使用animation、keyframes等功能以实现一个落日效果的动画。

(一)、例子源码1

<!DOCTYPE html> <!-- 声明文档类型 -->
<html lang="en"> <!-- 设置页面语言为英文 -->
<head>
  <meta charset="UTF-8"> <!-- 设置字符编码为UTF-8 -->
  <title>Keyframes Animation Example</title> <!-- 页面标题 -->

  <!-- 定义页面样式 -->
  <style>
    /* 最外层容器,背景为黑色 */
    .box_max {
      background-color: black; /* 设置容器背景颜色 */
      display: flex; /* 使用flex布局 */
      flex-direction: column; /* 子元素垂直排列 */
      justify-content: center; /* 垂直居中 */
      align-items: center; /* 水平居中 */
    }

    /* 内层容器,包含天空和水部分 */
    .box_min {
      width: 90vw; /* 宽度为视窗宽度的90% */
      height: 100vh; /* 高度为视窗高度的100% */
      overflow: hidden; /* 隐藏溢出内容 */
    }

    /* 天空部分,包含太阳 */
    .sky {
      width: 100%; /* 天空宽度占满 */
      height: 50vh; /* 天空高度为视窗高度的50% */
      background-color: aqua; /* 初始背景颜色 */
      position: relative; /* 设置定位方式 */
      animation: sky 8s linear 1s infinite; /* 动画持续8秒,1秒延迟,无限循环 */
    }

    /* 水部分,包含水中太阳 */
    .water {
      width: 100%; /* 水部分宽度占满 */
      height: 50vh; /* 水部分高度为视窗高度的50% */
      position: relative; /* 设置定位方式 */
      background-color: rgb(22, 62, 196); /* 初始背景颜色 */
      animation: water 8s linear 1s infinite; /* 动画持续8秒,线性,无限循环 */
    }

    /* 太阳的动画部分 */
    .sun {
      position: absolute; /* 绝对定位 */
      width: 50px; /* 设置太阳的宽度 */
      height: 50px; /* 设置太阳的高度 */
      background-color: rgb(215, 113, 113); /* 太阳颜色 */
      border-radius: 50%; /* 圆形 */
      top: 10px; /* 距离顶部10px */
      left: 300px; /* 距离左边300px */
      animation: sun 8s linear 1s infinite; /* 动画持续8秒,无限循环 */
      filter: blur(1px); /* 模糊效果 */
    }

    /* 水中太阳的动画部分 */
    .water-sun {
      position: absolute; /* 绝对定位 */
      width: 75px; /* 宽度 */
      height: 75px; /* 高度 */
      border-radius: 50%; /* 圆形 */
      bottom: 10px; /* 距离底部10px */
      left: 300px; /* 距离左边300px */
      animation: water-sun 8s linear 1s infinite; /* 动画持续8秒,无限循环 */
      background-color: rgb(141, 86, 86); /* 水中太阳的初始颜色 */
    }

    /* 定义天空的关键帧动画 */
    @keyframes sky {
      80% {
        background-color: rgb(67, 32, 19); /* 在动画的80%时,变为棕色 */
      }
      100% {
        background-color: black; /* 在动画的100%时,变为黑色 */
      }
    }

    /* 定义水的关键帧动画 */
    @keyframes water {
      90% {
        background-color: rgb(9, 9, 53); /* 在动画的90%时,变为深蓝色 */
      }
      100% {
        background-color: rgb(1, 1, 21); /* 在动画的100%时,变为更深的蓝色 */
      }
    }

    /* 太阳的关键帧动画 */
    @keyframes sun {
      90% {
        transform: translate(-100px, 500px) scale(4); /* 在动画的90%时,太阳下移并放大 */
        background-color: rgb(161, 80, 50); /* 太阳颜色 */
      }
      100% {
        transform: translate(-100px, 600px) scale(4); /* 在动画的100%时,太阳继续下移 */
        filter: drop-shadow(0px 0px 50px rgba(155, 57, 4, 0.5)); /* 添加阴影 */
      }
    }

    /* 水中太阳的关键帧动画 */
    @keyframes water-sun {
      70% {
        transform: translate(-100px, -200px) scale(3); /* 在动画的70%时,太阳上移并缩小 */
        background-color: orangered; /* 改变颜色 */
        height: 200px; /* 调整高度 */
        filter: blur(50px); /* 增加模糊 */
      }
      100% {
        transform: translate(-100px, -400px) scale(2); /* 在动画的100%时,太阳继续上移 */
        height: 100px; /* 调整高度 */
        filter: blur(100px); /* 增加模糊 */
      }
    }
  </style>
</head>

<body>
  <!-- 最外层容器 -->
  <div class="box_max">
    <!-- 内层容器 -->
    <div class="box_min">
      <!-- 天空部分,包含太阳 -->
      <div class="sky">
        天空
        <div class="sun"></div> <!-- 太阳 -->
      </div>

      <!-- 水部分,包含水中太阳 -->
      <div class="water">
        水
        <div class="water-sun"></div> <!-- 水中太阳 -->
      </div>
    </div>
  </div>
</body>
</html>

(二)、源码1运行效果

1.视频效果

css中落日的动画效果

2.截图效果

  • 开始时动画效果截图如下:
    在这里插入图片描述
  • 中间时段效果截图如下:
    在这里插入图片描述
  • 结尾时段效果截图如下:
    在这里插入图片描述

三、结语

本文用到了animation(动画)的效果。关于此部分的内容还未详细学习,后面会根据需要另起一篇博文。其中还用到了布局的相关内容,让太阳的落日效果更真实,让太阳可以落日消失而不是掉在水面上。关于布局的内容后面也会详细学习一下。
笔者今日状态不怎么好,但为了不断提升自己,多多少少也要学习一些新东西,便对着动画效果捣鼓着有所感发,也由此作文。
由于笔者的能力有限,创作的内容有所不足在所难免,也敬请读者包涵和指出,万分感谢!

四、定位日期

2024.4.24;
19:21

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【小白误闯】这可能是对 Tomcat 工作原理解释最详细的文章

脑子一闪而过&#xff0c;当年 V 哥在面试 Java 开发时&#xff0c;被问到让你写一个 Tomcat 服务器&#xff0c;你有什么想法&#xff1f;尼码&#xff0c;面试官摆明是在压工资了&#xff0c;你得逞了&#xff0c;我回答不上来&#xff0c;当时也没研究过 Tomcat 的源码&…

Codeforces Round 940 E. Carousel of Combinations 【威尔逊定理】

题意 给定一个正整数 n n n&#xff0c;定义 C ( i , j ) C(i, j) C(i,j) 为&#xff1a;从 ( 1 , 2 , 3 , . . . , i ) (1,2,3,...,i) (1,2,3,...,i) 中选出 j j j 个不同的数&#xff0c;构成一个圆排列的不同的方案数 求出&#xff1a; ∑ i 1 n ∑ j 1 i ( C ( i ,…

STM32的GPIO控制寄存器开发

寄存器GPIO控制 寄存器地址 寄存器地址计算 某个寄存器地址&#xff0c;由三个参数决定&#xff1a;1、总线基地址&#xff08;BUS_BASE_ADDR&#xff09;&#xff1b;2&#xff0c;外设基于总线基地址的偏移量&#xff08;PERIPH_OFFSET&#xff09;&#xff1b;3&#xff…

Linux系统CPU持续飙高,如何排查

若一台服务器CPU使用率持续处于一个高峰值&#xff0c;可能导致如&#xff1a;无法ssh链接、操作卡顿、用户访问超时等问题 1.查看CPU使用情况 top命令常用于分析内存指标使用情况 htop命令更直观于top 当CPU达到70%-80%以上时&#xff0c;使用率已过高需要处理 2.找出CPU占…

C++ Qt QMainWindow实现无边框窗口自定义标题栏可拖拽移动拉伸改变窗口大小

本篇博客介绍C Qt QMainWindow实现无边框窗口&#xff0c;适用于win10/win11系统。 QMainWindow相对于QWidget多了dockedwidget功能&#xff0c;跟多人可能更喜欢用QMainWindow做主窗口&#xff0c;如果不需要dockedwidget功能&#xff0c;QMainWindow与QWidget做主窗口基本无…

一款新型的Linux服务器管理工具

最近发现了一款新型的Linux服务器管理工具&#xff0c;名称叫1Panel&#xff0c;本文跟大伙分享一下。 一. 产品介绍 1Panel 是一个开源的 Linux 服务器运维管理面板&#xff0c;具有丰富的功能&#xff0c;可对服务器和容器进行管理。 产品提供简洁直观的We图形界面&#x…

如何使用RRT模式进行交易,昂首资本实例讲解

在上篇文章中&#xff0c;昂首资本用一篇文章讲解了&#xff0c;如何使用RRT模式进行交易以及背后的原理。如果没有看到的各位投资者可以往前翻一下&#xff0c;当然了也有投资者提到了新的问题&#xff0c;那就如何使用&#xff0c;今天昂首资本就用下面有几个例子实例讲解&am…

【C++】---STL之list详解

【C】---STL之list详解 一、了解list的基本信息二、成员函数1、构造2、迭代器3、empty()4、size()5、front()6、back()7、push_front()8、pop_front()9、push_back()10、pop_back()11、insert()12、erase()13、swap()14、sort()15、reverse() 一、了解list的基本信息 1、库里面…

windows查看xxx的版本号

node -v python --version redis-server --version java -version go version mvn -version git --version

【python】随机模拟——赶火车问题、醉汉回家

问题描述 1.赶火车问题。2.模拟二维随机游动&#xff08;醉汉回家&#xff09; 1.赶火车问题。 一列列车从A站开往B站&#xff0c;某人每天赶往B站上车。他已经了解到火车从A站到B站的运行时间是服从均值为30min&#xff0c;标准差为2min的正态随机变量。火车大约下午13&#…

Linux 深入理解Linux文件系统与日志分析

在Linux系统中&#xff0c;文件名和文件数据是分开存储的 文件数据包含 元信息(即不包含文件名的文件属性) 和 实际数据 文件元信息存储在 inode(索引节点)里&#xff0c; 文件实际数据存储在 block(块)里; 文件名存储在目录块里 查看文件的元信息 stat 文件名 [ro…

曲线救国|基于函数计算FC3.0部署AI数字绘画stable-diffusion

曲线救国|基于函数计算FC3.0部署AI数字绘画stable-diffusion 基于函数计算FC2.0部署AI数字绘画stable-diffusion基于函数计算FC3.0部署AI数字绘画stable-diffusion总结 在经过了上一次曲线救国失败经历之后&#xff0c;失败经历参考博文&#xff1a;https://developer.aliyun.c…

C++ —— 继承

什么是继承&#xff1f; 继承是指一种代码可以被复用的机制&#xff0c;在一个类的基础上进行扩展&#xff0c;产生的新类叫做派生类&#xff0c;被继承的类叫基类。&#xff08;也可称为子类和父类&#xff09; 继承的写法&#xff1a; class B : 继承方式 A (…

MCU功耗测量

功耗测量 一、相关概念二、功耗的需求三、测量仪器仪表测量连接SMU功能SMU性能指标 四、功耗测量注意点板子部分存在功耗MCU方面&#xff0c;可能存在干扰项仪器仪表方面 一、相关概念 静态功耗和动态功耗&#xff1a;动态功耗为运行功耗&#xff0c;功耗测量注重每MHz下的功耗…

智能调度|AIRIOT智能车队管理解决方案

客运、货运、汽车租赁、出租运营等行业对车辆管理、车队管理以及司乘人员的管理方式&#xff0c;逐渐向数字化和智能化转型。传统的依赖人工调度、记录和跟踪的管理模式已经难以满足业务发展需要&#xff0c;存在如下痛点&#xff1a; 实时监控与定位功能弱&#xff1a;无法实时…

实验4 数字频率计

实验目的&#xff1a; 1、使用铆孔U7输出一个脉冲&#xff0c;频率不定。 2、使用铆孔V7测量脉冲频率&#xff0c;并在数码管上显示。 实验内容及步骤&#xff1a; 设计原理 测量频率的方法有很多&#xff0c;按照其工作原理分为无源测量法、比较法、示波器法和计数法等。…

restful请求风格的增删改查-----修改and删除

一、修改&#xff08;和添加类似&#xff09; 前端&#xff1a; <script type"text/javascript">function update(){//创建user对象var user {id:$("#id").val(),username:$("#username").val(),password:$("#password").val…

aweraweg

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

​「Python绘图」绘制小猪佩奇

python 绘制小猪佩奇 一、预期结果 二、核心代码 import turtle print("开始绘制小猪佩奇") pen turtle.Turtle() pen.pensize(4) #pen.hideturtle()pen.speed(1000)pen.color("#ff9bc0","pink") pen.setheading(-30) pen.pu() pen.goto(-100,…

34. BI - 美国大学生足球队的 GCN 案例

本文为 「茶桁的 AI 秘籍 - BI 篇 第 34 篇」 文章目录 美国大学生足球队 Embedding&#xff08;GCN&#xff09; Hi&#xff0c;你好。我是茶桁。 在上一节课中&#xff0c;因为需要&#xff0c;我们先是回顾了一下 Graph Embedding&#xff0c;然后跟大家讲解了 GCN 以及其算…