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

news2024/12/24 8:40:24

前端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.coloradmin.cn/o/1621636.html

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

相关文章

[2021年最新]国产时序性数据TDenige入门

一、TDenige简介 TDengine&#xff1a;是涛思数据面对高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品&#xff0c;它不依赖任何第三方软件&#xff0c;也不是优化或包装了一个开源的数据库或流式计算产品&#xff0c;而是在吸取众多传统关系型数据库、NoS…

Prompt-to-Prompt Image Editing with Cross Attention Control

Prompt-to-Prompt Image Editing with Cross Attention Control TL; DR&#xff1a;prompt2prompt 提出通过替换 UNet 中的交叉注意力图&#xff0c;在图像编辑过程中根据新的 prompt 语义生图的同时&#xff0c;保持图像整体布局结构不变。从而实现了基于纯文本&#xff08;不…

Checkpoint机制和生产配置

1.前提 在将Checkpoint之前&#xff0c;先回顾一下flink处理数据的流程&#xff1a; 2. 概述 Checkpoint机制&#xff0c;又叫容错机制&#xff0c;可以保证流式任务中&#xff0c;不会因为异常时等原因&#xff0c;造成任务异常退出。可以保证任务正常运行。 &#xff08;1&…

【iCloud】土耳其苹果礼品卡购买

礼品购买官网 注册账号后&#xff0c;点击苹果礼品卡&#xff0c;选择自己想要的一款加购 没有国外的卡&#xff0c;只能选这种方式付款&#xff0c;使用银联卡&#xff1a; 接着填入银行卡信息付款即可。

Xbox VR头盔即将推出,但它是Meta Quest的‘限量版’。

&#x1f4f3;Xbox VR头盔即将推出&#xff0c;但它是Meta Quest的‘限量版’。 微软与Meta合作推出限量版Meta Quest VR头映射Xbox风格&#xff0c;可能是Meta Quest 3或未来版本的特别定制版&#xff0c;附带Xbox控制器。这一合作是Meta向第三方硬件制造商开放其Quest VR头盔…

介绍一个开源IOT组态项目

项目介绍 金合可视化平台是一款强大而操作简便的低代码平台&#xff0c;专为满足物联网领域的可视化开发需求而设计。通过该平台&#xff0c;用户可以利用拖拽配置的方式&#xff0c;轻松创建个性化的可视化大屏&#xff0c;无需熟练的编程技能&#xff0c;大幅提高了开发效率。…

Go Sync并发包之errgroup

你是否写过一个函数&#xff0c;它之所以很长&#xff0c;是因为它要完成很多任务&#xff0c;即使这些任务之间并不相互依赖&#xff1f; 你是否写过一个很长的函数&#xff0c;因为它要完成很多任务&#xff0c;即使这些任务并不相互依赖&#xff1f;我就遇到过这种情况。 想…

k8s集群CD工具-ArgoCD

ArgoCD是什么 Argo CD 是 Kubernetes 的声明式 GitOps 持续交付工具。应用程序定义、配置和环境应该是声明性的和版本控制的。应用程序部署和生命周期管理应该是自动化的、可审计的且易于理解。 官方文档 CD工作流&#xff08;无ArgoCD&#xff09; 假设有一个微服务应用程序…

Python解析和嵌入媒体资源的工具库之micawber使用详解

概要 在Web开发中,经常需要处理媒体资源的解析和嵌入,例如视频、音频、图片等。Python Micawber库就是一个用于解析和嵌入媒体资源的工具,它可以自动识别各种媒体资源的URL,并生成对应的嵌入代码,方便在网页中展示多媒体内容。 安装 可以通过pip来安装Micawber库: pip…

RustGUI学习(iced)之小部件(一):如何使用按钮和文本标签部件

前言 本专栏是学习Rust的GUI库iced的合集&#xff0c;将介绍iced涉及的各个小部件分别介绍&#xff0c;最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个&#xff0c;目前处于发展中&#xff08;即版本可能会改变&#xff09;&#xff0c;本专栏基于版本0.12.1. 概述…

开源文本嵌入模型M3E

进入正文前&#xff0c;先扯点题外话 这两天遇到一个棘手的问题&#xff0c;在用 docker pull 拉取镜像时&#xff0c;会报错&#xff1a; x509: certificate has expired or is not yet valid 具体是下面&#x1f447;这样的 rootDS918:/volume2/docker/xiaoya# docker pul…

数据中台工具的选型要点_光点科技

数据中台工具扮演着举足轻重的角色。想要全面理解数据中台工具的意义、作用以及应用方式&#xff0c;就必须深入探讨这一概念以及相关实践。 数据中台工具概述 数据中台&#xff0c;是一个支持数据集成、管理、分析和服务的平台&#xff0c;它能够帮助企业统一数据资源&#xf…

Linux使用操作(一)

Linux创建链接的方式 在Linux中&#xff0c;可以给文件创建链接。链接的意思可以理解是快捷方式&#xff0c;它指向另一个文件或目录。 软链接 软连接&#xff08;也叫符号链接&#xff09;是一种特殊类型的文件&#xff0c;它指向另一个文件或目录 语法 ln -s 原文件路径…

udp/tcp错误总结

udp tcp——多进程 tcp——多线程 tcp——线程池 tcp——守护进程 &#x1f386;udp  ✨pthread_create 错误总结  ✨LockGuard错误总结  ✨服务端需要写成多线程  ✨客户端也需要写成多线程  ✨多线程调试工具 &#x1f386;tcp  ✨tcp独有调试工具——telnet  ✨Threa…

【Unity】UnityEvent(一)

​UnityEvent----高效管理游戏事件的利器 在游戏开发中&#xff0c;事件系统是实现各种功能的关键组成部分。它允许我们将不同对象之间的交互解耦&#xff0c;使得代码更加模块化和易于维护。而UnityEvent作为Unity引擎提供的一种强大的事件系统工具&#xff0c;为开发者提供了…

CTFHub(web sql)(四)

Cookie注入 Cookie 注入的原理也和其他注入一样&#xff0c;只不过是将提交的参数已 Cookie 方式提交&#xff0c;而一般的注入是使用 GET 或者 POST 方式提交&#xff0c;GET 方式提交就是直接在网址后面加上需要注入的语句&#xff0c;POST 方式则是通过表单&#xff0c;GET …

数据仓库与数据挖掘(实验一2024.4.24)

实验准备&#xff1a; 1.下载conda 2.配置环境C:\ProgramData\miniconda3\Scripts 3.创建文件夹panda进入虚拟环境qq 激活虚拟环境&#xff1a;activate qq 启动jupyter lab&#xff08;python语言环境编译&#xff09;&#xff1a;jupyter lab 4.panda下载 &#xff08;…

【行为型模式】中介者模式

一、中介者模式概述 中介者模式定义&#xff1a;用一个中介对象来封装一系列的对象交互&#xff0c;中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式。(对象行为型模式) 中介者模式…

基于uni-app的动态表单

一、应用场景和意义 可以通过配置字段和校验规则&#xff0c;快速完成页面开发、提升开发效率 二、应用前提 形成ui/业务规范&#xff0c;最好是应用在问卷调查之类的业务 三、动态表单的功能 字段报错、快速滚动定位报错信息、支持字段值和字段规则拆分&#xff0c;便于实…

《R语言与农业数据统计分析及建模》学习——描述性统计分析

一、描述性统计概念和方法 1、概念和作用 描述性统计是对数据进行概括和描述&#xff0c;便于理解数据的特征、趋势和分布&#xff0c;帮助我们了解数据基本情况和总体特征&#xff0c;为后续更深入的数据分析和建模提供基础。 2、基础方法 &#xff08;1&#xff09;中心趋…