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

embedded/2024/9/23 14:31:52/

前端csskeyframes的使用

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

一、前言

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

  • 先创建一个动画效果,我们就命名为sun(太阳)
    animation: sun 8s linear 1s infinite; /* 动画持续8秒,无限循环 */
  • 然后对sun(使用关键帧)
css">@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,然后在大盒子里再创建一个小盒子。然后在小盒子里布置水和天空,以及太阳。使用animationkeyframes等功能以实现一个落日效果的动画。

(一)、例子源码1

css"><!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.ppmy.cn/embedded/14298.html

相关文章

Drive Scope for Mac:硬盘健康监测分析工具

Drive Scope for Mac是一款专为Mac用户设计的硬盘健康监测与分析工具&#xff0c;致力于保障用户的数据安全。这款软件功能强大且操作简便&#xff0c;能够实时检测硬盘的各项指标&#xff0c;帮助用户及时发现并解决潜在问题。 Drive Scope for Mac 1.2.23注册激活版下载 Driv…

51单片机入门_江协科技_35~36_OB记录的自学笔记_AD与DA转换(XPT2046)

35. AD_DA 35.1. AD/DA介绍 •AD&#xff08;Analog to Digital&#xff09;&#xff1a;模拟-数字转换&#xff0c;将模拟信号转换为计算机可操作的数字信号 •DA&#xff08;Digital to Analog&#xff09;&#xff1a;数字-模拟转换&#xff0c;将计算机输出的数字信号转换…

【八股】Java基础、集合、JVM

面向对象三大特性 1 封装&#xff1a; 将 方法 和 属性 写到同一个类中&#xff0c;并将属性 私有化&#xff0c;生成 get set方法&#xff0c;外部访问属性需要通过get和set方法,内部可以直接访问属性&#xff0c;这样的一个类我们认为它完成了封装。 2 继承&#xff1a; 子…

论机器学习(ML)在网络安全中的重要性

机器学习是什么&#xff1f; 机器学习(ML)是人工智能的一个分支&#xff0c;它使用算法来使计算机系统能够自动地从数据和经验中进行学习&#xff0c;并改进其性能&#xff0c;而无需进行明确的编程。机器学习涉及对大量数据的分析&#xff0c;通过识别数据中的模式来做出预测…

地形系统-unity3D地形的生成原理和地形表面贴图的混刷原理

Unity3D地形的生成原理是通过使用高度图来创建地形。高度图是一个灰度图像&#xff0c;其中每个像素的灰度值表示该位置的高度。在Unity中&#xff0c;可以使用工具或编程方式创建高度图&#xff0c;然后将其应用于地形对象。 地形表面贴图的混刷原理是通过将多个纹理图层叠加…

中介者模式:简化对象间的通信

在软件设计中&#xff0c;当一个系统中的对象相互高度依赖&#xff0c;且通信关系错综复杂时&#xff0c;理解和维护这样的系统将变得非常困难。中介者模式&#xff08;Mediator Pattern&#xff09;提供了一种解决方案&#xff0c;它通过定义一个中介者对象来封装一系列对象之…

十大排序算法之——快速排序算法(Java实现)及思路讲解

快速排序算法&#xff08;Java实现&#xff09;及思路讲解 目录 今天为大家介绍一下这个经典的排序算法&#xff01;&#xff01;快排&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 一、快速排序算法简介 快速排序&#xff08;Quick Sort&#x…

一些常见的Windows命令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言看版本号查找端口启动程序杀死某个端口查看全部端口看ip进入目录就是总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#x…