CSS 实现跳动的方块动画

news2024/11/15 15:40:39

前言

👏transform-style+transform实现多个小方块,速速来Get吧~
🥇文末分享源代码。记得点赞+关注+收藏!

1.实现效果

在这里插入图片描述

2.实现步骤

  • 定义css变量:正方形长/宽为w;
:root {
  --w: 30px;
 }
  • 父容器为一个圆角正方形,添加box-shadow阴影,设置transform-style: preserve-3d,让转换的子元素保留3D转换

在这里插入图片描述

<div class="container"></container>
 .container {
   height: 150px;
   width: 150px;
   padding: 30px;
   box-shadow: 0 12px 20px 6px rgb(104 112 118 / 0.2);
   border-radius: 15px;
   transform-style: preserve-3d;
 }
  • 父元素设置box-sizing: border-box
  • 在此容器内,添加9个正方形并设置transform-style: preserve-3d,长/宽为w,按照这样的布局,改写父容器的大小,正方形平均分布,父元素设置flex横向布局,超出换行

在这里插入图片描述

 <div class="container">
    <div class="square"></div>
    	...// 共9个
    <div class="square"></div>
  </div>
 .container {
 - height: 150px;
 - width: 150px;
 - padding: 30px;
 - border-radius: 15px;
 + height: calc(var(--w) * 5);
 + width: calc(var(--w) * 5);
 + padding: var(--w);
 + border-radius: calc(var(--w) / 2);
 + display: flex;
 + flex-wrap: wrap;
   box-shadow: 0 12px 20px 6px rgb(104 112 118 / 0.2);
   transform-style: preserve-3d;
 }
.square {
    height: var(--w);
    width: var(--w);
    border: 1px solid red;
    background-color: rgb(207, 52, 40);
    position: relative;
    transform-style: preserve-3d;
 }
  • 正方形添加背景色,实现效果如下

在这里插入图片描述

.square {
    + background-color: rgb(207, 52, 40);
 }
  • 将父容器添加rotateX旋转45deg,rotateZ旋转45deg

在这里插入图片描述

.container {
 + transform: rotateX(45deg) rotateZ(45deg);
}
  • 为square添加前后伪元素,宽/高为w,这里可以先注释其他正方形,保留一个进行调试
.square:after,
.square:before {
   content: "";
   position: absolute;
   height: var(--w);
   width: var(--w);
   left: 0;
   top: 0;
 }
  • 调试square的前伪元素,设置transform进行Y轴方向的旋转

在这里插入图片描述

.square:before {
 background-color: rgb(56, 35, 35);
 transform: rotateY(-90deg);
}
  • 修改该元素的transform-origin,更改一个元素变形的原点,rotate()函数的转换原点是旋转中心(即center center),调整到合适位置

在这里插入图片描述

.square:before {
 + transform-origin: right center;
 }
  • 调试square的后伪元素,设置transform进行X轴方向的旋转

在这里插入图片描述

.square:after {
   background-color: rgb(80, 39, 36);
   transform: rotateX(0deg);
 }
  • 修改该元素的transform-origin,调整到合适位置

在这里插入图片描述

.square:after {
   +transform-origin: right bottom;
}
  • 九个正方体实现的效果如下

在这里插入图片描述

  • 将square在z轴方向进行偏移,偏移量为w

在这里插入图片描述

.square {
 + transform: translateZ(var(--w));
}
  • square添加hover效果

在这里插入图片描述

.square:hover {
   cursor: pointer;
   filter: brightness(2.1);
 }
  • square添加box-shadow底部阴影,调整为合适位置

在这里插入图片描述

.square {
 + box-shadow: calc(var(--w) * 3) calc(var(--w) * 3) 15px rgba(0, 0, 0, 0.2);
 }
  • 为每个方块添加上下浮动动画

在这里插入图片描述

.square {
 + animation: beating 1s infinite;
}
@keyframes beating {
  50% {
    transform: translateZ(calc(var(--w) / 2));
  }
}
  • 在每个square 上添加css变量,定义动画延时时间,去掉辅助线,就实现好了哇~

在这里插入图片描述

<div class="container">
   <div class="square" style="--d: 1"></div>
 	..// 依次
   <div class="square" style="--d: 9"></div>
 </div>
.square {
  - border: 1px solid red;
  + animation-delay: calc(0.05s * var(--d));
}

3.实现代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
  </head>
  <style>
    :root {
      --w: 30px;
    }
    .container {
      height: calc(var(--w) * 5);
      width: calc(var(--w) * 5);
      padding: var(--w);
      box-shadow: 0 12px 20px 6px rgb(104 112 118 / 0.2);
      border-radius: calc(var(--w) / 2);
      display: flex;
      flex-wrap: wrap;
      transform-style: preserve-3d;
      transform: rotateX(45deg) rotateZ(45deg);
    }
    .square {
      height: var(--w);
      width: var(--w);
      background-color: rgb(207, 52, 40);
      position: relative;
      transform-style: preserve-3d;
      transform: translateZ(var(--w));
      box-shadow: calc(var(--w) * 3) calc(var(--w) * 3) 15px rgba(0, 0, 0, 0.2);
      animation: beating 1s infinite;
      animation-delay: calc(0.05s * var(--d));
    }
    .square:hover {
      cursor: pointer;
      filter: brightness(2.1);
    }
    .square:after,
    .square:before {
      content: "";
      position: absolute;
      height: var(--w);
      width: var(--w);
      left: 0;
      top: 0;
    }
    .square:before {
      background-color: rgb(56, 35, 35);
      transform: rotateY(-90deg);
      transform-origin: right center;
    }
    .square:after {
      background-color: rgb(80, 39, 36);
      transform: rotateX(90deg);
      transform-origin: right bottom;
    }
    @keyframes beating {
      50% {
        transform: translateZ(calc(var(--w) / 2));
      }
    }
  </style>
  <body>
    <div class="container">
      <div class="square" style="--d: 1"></div>
      <div class="square" style="--d: 2"></div>
      <div class="square" style="--d: 3"></div>
      <div class="square" style="--d: 4"></div>
      <div class="square" style="--d: 5"></div>
      <div class="square" style="--d: 6"></div>
      <div class="square" style="--d: 7"></div>
      <div class="square" style="--d: 8"></div>
      <div class="square" style="--d: 9"></div>
    </div>
  </body>
</html>

4.写在最后🍒

看完本文如果觉得对你有一丢丢帮助,记得点赞+关注+收藏鸭 🍕
更多相关内容,关注🍥苏苏的bug,🍡苏苏的github,🍪苏苏的码云~

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

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

相关文章

引擎入门 | Unity UI简介–第2部分(3)

本期我们继续为大家进行Unity UI简介&#xff08;第二部分&#xff09;的后续教程 本篇内容 4.设置动画按钮 5.从脚本中触发动画按钮 文章末尾可免费获取教程源代码 本篇本篇Unity UI简介&#xff08;第二部分&#xff09;篇幅较长&#xff0c;分为八篇&#xff0c;本篇为…

Android Gradle 学习笔记(一)概述

文章目录1. JVM构建工具的发展1.1 背景1.2 Ant - Java 早期构建工具1.3 Maven - Ant 的升级版1.3 Gant - IDEA 官方的构建工具1.4 Gradle - JVM集大成构建工具2. 为什么学习 Gradle?3. 学习提纲参考1. JVM构建工具的发展 1.1 背景 我们平时在 IDE 上写了很多代码&#xff0c…

vue3+Element-plus el-select 下拉表格组件(el-select+el-table结合)

一、最终效果 二、代码示例 <t-select-table:table"table":columns"table.columns":max-height"400":keywords"{ label: name, value: id }"radioChange"radioChange" ></t-select-table>三、参数配置 1. 配置…

如何开始用Python编程

前言 你想开始学习如何编程吗&#xff1f;计算机编程令人望而生畏&#xff0c;你可能认为需要通过上课来学习。虽然对于某些语言来说可能是这样&#xff0c;但是有很多编程语言只需一到两天的时间就可以掌握基础知识。Python[1] 就是这样的一种语言。你在几分钟内就可以正常运…

【操作系统基础】实践部分

本文参考MOOC哈工大操作系统课程与课件 主要基于Linux 0.11系统展开 ”Author&#xff1a;Mayiming“ 实践部分依赖虚拟环境展开&#xff0c;请访问网址 https://www.lanqiao.cn/courses/115 本文就试验一、二、三进行梳理 一、熟悉试验环境 试验环境使用了oslab、bochs、gcc…

使用图片制作3D背景

1.创建一个新的摄像机&#xff0c;命名为BackgroundCamera。 2.新建GUITexture&#xff0c;命名为BackgroundImage。 3.在BackgroundImage的Inspector面板中点击Layer下拉窗口&#xff0c;选择“AddLayer”。 4.在打开的面板中的UserLayer8&#xff0c;添加一个新的层名称为…

dubbo原理

目录 dubbo原理 1、RPC原理 2、netty通信原理 3、dubbo原理 1、dubbo原理 -框架设计 2、dubbo原理 -启动解析、加载配置信息 3、dubbo原理 -服务暴露 4、dubbo原理 -服务引用 5、dubbo原理 -服务调用 dubbo原理 1、RPC原理 一次完整的RPC调用流程&#xff08;同步调…

软件测试培训之写给要学习自动化测试的同学的建议

基于我的经验&#xff0c;给你6条实用建议 1、先学习编程语言&#xff0c;然后再接触自动化工具。 语言选择上Java或者Python都是可以的&#xff0c;可以先从Python入手&#xff0c;之后再开始Java。在学习语言的过程中&#xff0c;一定要忘掉你是做测试的&#xff0c;把自己…

leetcode 698. 划分为k个相等的子集-状态压缩+记忆搜索的一步步实现

题目 给定一个整数数组 nums 和一个正整数 k&#xff0c;找出是否有可能把这个数组分成 k 个非空子集&#xff0c;其总和都相等。 示例 输入&#xff1a; nums [4, 3, 2, 3, 5, 2, 1], k 4 输出&#xff1a; True 说明&#xff1a; 有可能将其分成 4 个子集&#xff08;5&…

利用OpenCV的函数LUT()对矩阵的数据进行查表映射

利用OpenCV的函数LUT()对矩阵的数据进行查表映射 LUT是Look Up Table 的缩写&#xff0c;意为查表映射。 OpenCV的函数LUT()能实现图像灰度值或者说矩阵元素值的查表映射功能。 函数LUT()的C原型如下&#xff1a; void cv::LUT(InputArray src,InputArray lut,OutputArray …

XStream常用注解学习

XStream中文教程&#xff1a;https://www.wenjiangs.com/doc/iyx6stww 参考博客&#xff1a;https://www.jb51.net/article/201309.htm 用在xml中&#xff0c;常用注解&#xff1a; XStreamAliasType(value“要修改成的全限定名”): 包名修改 XStreamAlias(“user”) : 修改类,…

力扣hot100——第5天:22括号生成、23合并K个升序链表、31下一个排列

文章目录1.22括号生成1.1.题目1.2.题解2.23合并K个升序链表2.1.题目2.2.解答3.31下一个排列3.1.题目3.2.解答1.22括号生成 参考&#xff1a;力扣题目链接&#xff1b;题解1&#xff0c;题解2 1.1.题目 1.2.题解 这道题目是使用递归的方法来求解&#xff0c;因为要求解所有的…

这个macOS神器,让爱怀旧的人直呼:“爷青回!”

写在前面 Hello&#xff0c;大家好&#xff0c;我们又见面了。 停止更新了两周多&#xff0c;本来打算荒废这个CSDN的&#xff0c;但对写文章的热爱又逼着我继续写…… 这次我们要推荐一个macOS神器&#xff0c;叫“Aqua Menu Bar”。 以后永远不写水文了&#xff0c;告别CS…

AJAX异步请求解决跨域问题的三种方式

一 什么是跨域 出于浏览器的同源策略限制。同源策略&#xff08;Sameoriginpolicy&#xff09;是一种约定&#xff0c;它是浏览器最核心也最基本的安全功能&#xff0c;如果缺少了同源策略&#xff0c;则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的…

移动应用测试场景的五个重点

移动应用程序测试在移动开发生命周期中至关重要。开发人员和应用程序测试人员在上线之前应该考虑不同的移动应用程序测试场景。考虑到每天发布的应用程序数量&#xff0c;这一点尤为重要。根据 Statista 的数据&#xff0c;2020 年全球移动应用下载量已增至 2180 亿次。这导致了…

通过.sh文件快捷部署jar包到服务器上

参考博客&#xff1a;https://blog.csdn.net/qq_43382350/article/details/125008727 直接写一个脚本文件&#xff0c;每次运行这个文件就可以通过.sh文件快捷部署jar包到服务器上。 在合适的文件夹下创建脚本文件 vim start.sh 内容如下(三个jar包分别放置在a1、a2、a3文件夹…

SAR雷达系统反设计及典型目标建模与仿真实现研究——目标生成与检测(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

白话强化学习(理论+代码)

文章目录前言强化学习概述案例alphaGo无人驾驶why强化学习特点基本理论部分基本概念马尔可夫模型马尔可夫链案例马尔科夫决策过程累计回报概念及其求取流程案例算法目的Q-Leaning真实值与预测值案例离线学习Sarsa选择动作函数代码DQN流程预估“表”与实际“表”编码坑点环境修改…

你的业务代码中Spring声明式事务处理正确了吗?

Spring 针对 Java Transaction API (JTA)、JDBC、Hibernate 和 Java Persistence API(JPA) 等事务 API&#xff0c;实现了一致的编程模型&#xff0c;而 Spring 的声明式事务功能更是提供了极其方便的事务配置方式&#xff0c;配合 Spring Boot 的自动配置&#xff0c;大多数 S…

试剂的制备丨艾美捷逆转录病毒定量试剂盒方案

QuickTiter逆转录病毒定量试剂盒提供了一种测定逆转录病毒滴度的快速方法。该测定法测量逆转录病毒的病毒核酸含量&#xff0c;可以在纯化病毒之前或之后进行。 Cell Biolabs艾美捷QuickTiter™ 逆转录病毒定量试剂盒不涉及细胞感染&#xff1b;相反&#xff0c;它专门测量纯化…