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

ops/2024/9/23 14:27:48/

前端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/ops/20842.html

相关文章

css阴影效果制作

前言 欢迎来到我的博客 个人主页&#xff1a;北岭敲键盘的荒漠猫-CSDN博客 本文为我整理的为盒子添加阴影效果的方法 阴影效果展示 可以帮我们制作这种立体效果。 也可以用这个阴影作为一个选中效果。 阴影属性 语法: box-shadow: h-shadow v-shadow blur spread color inset;…

Rust学习03:解决了如何更改项目名称的小问题

好不容易跑通了第一个小程序&#xff01; 高兴之余&#xff0c;突然又对小程序的名字不满意了&#xff0c;想改一个更好的。奇怪么&#xff1f;不奇怪&#xff01;对于一位想不开而来自学Rust的人又有什么事情是做不出的呐~~ 开始我是直接改了项目文件夹的名字~捅了马蜂窝了&am…

视频怎么批量压缩?5个好用的电脑软件和在线网站

视频怎么批量压缩&#xff1f;有时候我们需要批量压缩视频来节省存储空间&#xff0c;便于管理文件和空间&#xff0c;快速的传输发送给他人。有些快捷的视频压缩工具却只支持单个视频导入&#xff0c;非常影响压缩效率&#xff0c;那么今天就向大家从软件和在线网站2个角度介绍…

【布客技术评论】大模型开源与闭源:原因、现状与前景

在人工智能领域&#xff0c;大模型的开源与闭源一直是一个备受争议的话题。近期&#xff0c;某大厂厂长说了“开源模型永远超不过闭源模型”&#xff0c;结果&#xff0c;脸书就发布了开源模型Llama3&#xff0c;超过了OpenAI 的闭源模型 GPT4。本文将探讨大模型开源与闭源的原…

开发语言漫谈-ABAP

大多数程序员可能都没有听说过这门语言。ABAP是SAP公司专门用于SAP软件环境的专门语言。这么多专门就能知道这门语言邻域有多么狭窄。这门语言过去据称是一条闷声挣大钱的好途径&#xff0c;非常不卷&#xff0c;简直躺赢的好事。这么说也没毛病&#xff0c;关键在SAP的业务能有…

抖音 小程序 获取手机号 报错 getPhoneNumber:fail auth deny

这是因为 当前小程序没有获取 手机号的 权限 此能力仅支持小程序通过试运营期后可用&#xff0c;默认获取权限&#xff0c;无需申请&#xff1b; https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/guide/open-capabilities/acquire-phone-number-acqu…

019Node.js的FS模块使用fs.stat检测文件还是目录

初始化项目 npm init或者 npm init --yes//fs.stat 检测是文件还是目录 const fsrequire(fs); //fs.stat(./html,function(err,data){fs.stat(./html,(err,data)>{if(err){console.log(err);return;}console.log(是文件${data.isFile()});console.log(是目录${data.isDire…

02 spring-boot+mybatis+elementui 的登录,文件上传,增删改查的入门级项目

前言 主要是来自于 朋友的需求 项目概况 就是一个 学生信息的增删改查 然后 具体到业务这边 使用 mybatis xml 来配置的增删改查 后端这边 springboot mybatis mysql fastjson hutool 的一个基础的增删改查的学习项目, 简单容易上手 前端这边 node14 vue element…