CSS 艺术之心形-彩虹-加载动画

news/2024/11/27 19:07:39/

CSS 艺术之心形-彩虹-加载动画(居中抖动问题)

  • 参考
  • 描述
  • 效果
  • HTML
  • CSS
      • 重置元素的部分默认样式
      • body
      • li
      • 动画
          • 定义
          • 指定
            • animation
      • ul
          • 居中抖动问题
      • 代码总汇

参考

项目描述
搜索引擎Bing
MDNMDN Web Docs

描述

项目描述
Edge109.0.1518.61 (正式版本) (64 位)

效果

效果

HTML

<!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>CSS 特效之心形-彩虹-加载动画</title><!-- 导入当前工作目录下的 index.css --><link rel="stylesheet" href="./index.css">
</head>
<body><ul><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul>
</body>
</html>

CSS

重置元素的部分默认样式

*{margin: 0px;padding: 0px;box-sizing: border-box;
}

body

body{/* 设置页面最小高度为视口(可以理解为浏览器中的可视区域)高度 。*/min-height: 100vh;/* 设置 flex 弹性布局,并将当前元素中的元素进行居中处理。*/display: flex;justify-content: center;align-items: center;/* 设置页面的背景颜色 */background-color: #282828;
}

li

li{width: 20px;height: 20px;/* 设置 li 为行内块元素,这样可以使得li 排列在一行中,当然你也可以通过使用 float 属性来达到这一效果。*/display: inline-block;/* 为 li 元素设置边框的圆角半径。*/border-radius: 20px;background-color: dodgerblue;/* 为每一个 li 元素设置 10px 的左边距 */margin-left: 10px;
}

注:

在该段代码中,请不要使用 border-radius: 50%; 来代替 border-radius: 20px; 。虽然在这段代码中,这两段代码均可以使得 li 元素在初始状态显示为圆形。但是,随着程序的运行,li 元素将被拉伸,该元素的 height 属性将发生变化,宽度与高度不相等,使用 border-radius: 50%; 将导致 li 元素的两端变得异常尖锐。具体效果如下:

效果

动画

定义
/* 
使用关键字 @keyframes 开始定义动画,
在该关键字后,花括号前的内容(空白字符除外)为
被定义动画的名称。
*/
@keyframes oneNine{/*当动画的进度(基准为动画播放一次所需要的时间)达到 30% 时需要将 li 元素逐渐拉伸至 60px;在动画的进度为 30%~50% 时,动画将保持 静止状态。*/30%, 50%{height: 60px;}/*当动画的进度(基准为动画播放一次所需要的时间)达到 80% 时需要将 li 元素逐渐缩减至 20px;在动画的进度为 80%~100% 时,动画将保持 静止状态。*/80%, 100%{height: 20px;}
}@keyframes twoEight{30%, 50%{height: 100px;}80%, 100%{height: 20px;}
}@keyframes threeSeven{30%, 50%{height: 140px;}80%, 100%{height: 20px;}
}@keyframes fourSix{30%, 50%{height: 150px;/*为实现心形形状,需要将部分 li 元素下移*/transform: translateY(30px);}80%, 100%{height: 20px;}
}@keyframes five{30%, 50%{height: 160px;transform: translateY(50px);}80%, 100%{height: 20px;}
}
指定

在该部分代码中,我们将为每一个 li 元素指定颜色及需要使用的动画。

ul li:nth-child(1){background-color: yellowgreen;animation: oneNine 4s infinite;
}ul li:nth-child(2)
{background-color: salmon;animation: twoEight 4s 0.15s infinite;
}ul li:nth-child(3){background-color: mediumorchid;animation: threeSeven 4s 0.3s infinite;
}ul li:nth-child(4){background-color: dodgerblue;animation: fourSix 4s 0.45s infinite;
}ul li:nth-child(5){background-color: tomato;animation: five 4s 0.6s infinite;
}ul li:nth-child(6){background-color: hotpink;animation: fourSix 4s 0.75s infinite;
}ul li:nth-child(7){background-color: mediumorchid;animation: threeSeven 4s 0.9s infinite;
}ul li:nth-child(8){background-color: salmon;animation: twoEight 4s 1.05s infinite;
}ul li:nth-child(9){background-color: yellowgreen;animation: oneNine 4s 1.2s infinite;
}
animation

animation 在 CSS 中常用来为选中的元素指定使用的动画并对动画的播放进行设置(如指定动画的持续时间)。
提交给 animation 参数中如果有两个时间参数,则第一个参数用于指定动画的持续时间,第二个参数用于指定动画的延迟时间(在指定当前元素使用的动画后,经过指定的时间开始进行动画的播放)。
在上述代码中,提交给 animation 的第一个参数用于指定使用的动画的名称,最后一个参数用于指定动画播放的次数,当该参数的值为 infinite 时,表示将无限次播放该动画。

ul

ul{width: 400px;height: 400px;display: flex;justify-content:center;align-items: center;
}
居中抖动问题

在该部分代码中,你如果没有为 ul 设置宽高,则 li 标签在动画过程中将发生轻微的抖动(在 li 标签使用的动画处于静止状态时):

抖动

这是因为你使用 justify-contentalign-itemsul 中的元素居中显示,但没有为其 ul 设置宽高。li 标签在动画过程中会被拉伸,导致父元素 ul 的高度被迫上升。此时需要不断对 li 标签进行移动以使其处于居中状态。
在动画进行过程中,元素的部分操作会具有过渡效果,过渡使 li 标签的移动变得平滑。因此在动画进行时,抖动的状况并不会发生;而在动画处于静止状态时,由于其他 li 元素的动画还在进行,ul 的高度仍将发生变化,此时由于没有过渡效果,导致在移动 li 元素以使其维持居中状态的过程并不平滑,从而产生了抖动状态。

代码总汇

*{margin: 0px;padding: 0px;box-sizing: border-box;
}body{/* 设置页面最小高度为视口(可以理解为浏览器中的可视区域)高度 。*/min-height: 100vh;/* 设置 flex 弹性布局,并将当前元素中的元素进行居中处理。*/display: flex;justify-content: center;align-items: center;/* 设置页面的背景颜色 */background-color: #282828;
}ul{width: 400px;height: 400px;display: flex;justify-content:center;align-items: center;
}li{width: 20px;height: 20px;/* 设置 li 为行内块元素,这样可以使得li 排列在一行中,当然你也可以通过使用 float 属性来达到这一效果。*/display: inline-block;/* 为 li 元素设置边框的圆角半径。*/border-radius: 20px;background-color: dodgerblue;/* 为每一个 li 元素设置 10px 的左边距 */margin-left: 10px;
}ul li:nth-child(1){background-color: yellowgreen;animation: oneNine 4s infinite;
}ul li:nth-child(2)
{background-color: salmon;animation: twoEight 4s 0.15s infinite;
}ul li:nth-child(3){background-color: mediumorchid;animation: threeSeven 4s 0.3s infinite;
}ul li:nth-child(4){background-color: dodgerblue;animation: fourSix 4s 0.45s infinite;
}ul li:nth-child(5){background-color: tomato;animation: five 4s 0.6s infinite;
}ul li:nth-child(6){background-color: hotpink;animation: fourSix 4s 0.75s infinite;
}ul li:nth-child(7){background-color: mediumorchid;animation: threeSeven 4s 0.9s infinite;
}ul li:nth-child(8){background-color: salmon;animation: twoEight 4s 1.05s infinite;
}ul li:nth-child(9){background-color: yellowgreen;animation: oneNine 4s 1.2s infinite;
}/* 
使用关键字 @keyframes 开始定义动画,
在该关键字后,花括号前的内容(空白字符除外)为
被定义动画的名称。
*/
@keyframes oneNine{/*当动画的进度(基准为动画播放一次所需要的时间)达到 30% 时需要将 li 元素逐渐拉伸至 60px;在动画的进度为 30%~50% 时,动画将保持 静止状态。*/30%, 50%{height: 60px;}/*当动画的进度(基准为动画播放一次所需要的时间)达到 80% 时需要将 li 元素逐渐缩减至 20px;在动画的进度为 80%~100% 时,动画将保持 静止状态。*/80%, 100%{height: 20px;}
}@keyframes twoEight{30%, 50%{height: 100px;}80%, 100%{height: 20px;}
}@keyframes threeSeven{30%, 50%{height: 140px;}80%, 100%{height: 20px;}
}@keyframes fourSix{30%, 50%{height: 150px;/*为实现心形形状,需要将部分 li 元素下移*/transform: translateY(30px);}80%, 100%{height: 20px;}
}@keyframes five{30%, 50%{height: 160px;transform: translateY(50px);}80%, 100%{height: 20px;}
}

http://www.ppmy.cn/news/19332.html

相关文章

Allegro如何自动居中走线操作指导

Allegro如何自动居中走线操作指导 Allegro支持自动将走线居中到两个孔的中间,避免手动去调整的麻烦,类似下图 具体操作如下 点击Spread Between VoidsOptions选择需要居中走线的层面,并且Void clearance输入0

C Primer Plus 中关于*修饰符(抑制赋值)的一些总结

C Primer Plus 中关于*修饰符&#xff08;抑制赋值&#xff09;的一些总结printf()中的抑制赋值示例scanf()中的抑制赋值示例在比姓名宽度宽3的字段中打印名字示例printf()中的抑制赋值 当转换说明是%d&#xff0c;那么参数列表应该包括和d对应的值&#xff08;这个技巧也适用于…

尚医通-手机登录-判断用户登录状态-用户网关整合(三十)

目录&#xff1a; &#xff08;1&#xff09;前台用户系统-手机登录-前端整合 &#xff08;2&#xff09;全局的登录事件-判断登录状态 &#xff08;3&#xff09;登录注册-用户认证和网关整合 &#xff08;1&#xff09;前台用户系统-手机登录-前端整合 service-user模块的配…

【Hadoop】HDFS+Shell实践(定时上传数据至HDFS)

这篇博客是一个结合HDFS的Shell练习&#xff0c;相对简单。现有需求&#xff1a;每天1:00需要从系统上传一份昨天的日志文件到HDFS&#xff0c;日志文件的格式为access_2023_01_01.log&#xff0c;HDFS目录格式为20230101。这个需求是相对简单的&#xff0c;分为以下几个步骤&a…

Issues with peer dependencies found

问题背景&#xff1a; 今天安装一些依赖&#xff0c;报了这个错误 Issues with peer dependencies found 那么这个错误是什么意思呢&#xff1f; WARN  Issues with peer dependencies found . └─┬ typescript-eslint/eslint-plugin ├── ✕ missing peer typescrip…

十二、创建和管理表

文章目录一、基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 数据类型及数据库操作二、创建表三、查看表结构3.1 使用 SHOW COLUMNS 语句查看3.2 使用 DESCRIBE 语句查看3.3 查看表详细结构语句 SHOW CREATE TABLE四、修改表结构4.1 添加新字段和修改字段定义4.2 修改字…

基于Andriod的智慧校园卡系统的设计与实现

目录 1.课题研究立项依据 2.文献综述 3.课题研究的基本内容及预期目标或成果 4.课题的研究方案 5.研究进度安排 6.主要参考文献 1.课题研究立项依据 随着信息技术的不断发展,数字化、智能化校园的提出与教育现代化建设的不断推进,智能卡技术的不断发展进步,国内各高校都在…

【蓝桥云课】进制

对于任意数制RRR的数nnn&#xff0c;都可以表达为n∑i0kaiRia0R0a1R1a2R2...akRkn\sum_{i0}^{k}a_{i}R^{i} a_{0}R^{0}a_{1}R^{1}a_{2}R^{2}...a_{k}R^{k}ni0∑k​ai​Ria0​R0a1​R1a2​R2...ak​Rk 一、十进制转RRR进制 方法&#xff1a;十进制数除RRR取余&#xff0c;余数…