使用 CSS 实现多立方体悬停颜色效果实现

使用 CSS 实现多立方体悬停效果实现

效果展示

在这里插入图片描述

CSS 知识点

  • filter 属性的 hue-rotate 值运用
  • 使用 CSS 实现立方体

场景布局分析

从效果图可以看出,要实现 3*3 的立方体集合,我们需要考虑一下怎么安排小立方体的布局。我这里的做法是使用span实现单个小立方体,而用一个div元素来状态一列 3 个小立方体,这样就形成一列,然后再找一个div元素来装载 3 列立法体形成大立方体的一个面,形成整体布局后使用transform属性实现立体效果。具体布局如下:

在这里插入图片描述

整体页面布局

<!-- 整体容器,整体控制布局 -->
<div class="container">
  <!-- 3*3 大立方体的一个面,这里只是展示一个面,两外两个面可以直接复制一样的代码形成另外一个面 -->
  <div class="cube">
    <!-- 状态3个小立方体的一例容器 -->
    <div style="--x: -1;--y:0">
      <!-- 小立方体 -->
      <span style="--i:3"></span>
      <span style="--i:2"></span>
      <span style="--i:1"></span>
    </div>
    <div style="--x: 0;--y:0">
      <span style="--i:3"></span>
      <span style="--i:2"></span>
      <span style="--i:1"></span>
    </div>
    <div style="--x: 1;--y:0">
      <span style="--i:3"></span>
      <span style="--i:2"></span>
      <span style="--i:1"></span>
    </div>
  </div>
</div>

实现单个立方体

1. 形成小立方体的基础布局

.container .cube {
  position: relative;
  z-index: 2;
}

.container .cube div {
  position: absolute;
  display: flex;
  flex-direction: column;
}

.container .cube div span {
  position: relative;
  display: inline-block;
  width: 50px;
  height: 50px;
  background: #dcdcdc;
  z-index: calc(1 * var(--i));
  transition: 1.5s;
}

/* 立方体左侧面 */
.container .cube div span::before {
  content: "";
  position: absolute;
  left: -40px;
  width: 40px;
  height: 100%;
  background: #fff;
  transform-origin: right;
}

/* 立方体上侧面 */
.container .cube div span::after {
  content: "";
  position: absolute;
  top: -40px;
  left: 0;
  width: 100%;
  height: 40px;
  background: #f2f2f2;
  transform-origin: bottom;
}

实现上述代码后效果如下:

在这里插入图片描述

2. 使用 transform 属性形成基础立体效果

.container {
  position: relative;
  top: -80px;
  transform: skewY(-20deg);
}

实现上述代码后的效果如下:

在这里插入图片描述

3. 使用 transform 属性实现立方体

在上述代码的基础上,修改成如下的代码:

.container .cube div span::before {
  content: "";
  position: absolute;
  left: -40px;
  width: 40px;
  height: 100%;
  background: #fff;
  transform-origin: right;
  transform: skewY(45deg);
  transition: 1.5s;
}

.container .cube div span::after {
  content: "";
  position: absolute;
  top: -40px;
  left: 0;
  width: 100%;
  height: 40px;
  background: #f2f2f2;
  transform-origin: bottom;
  transform: skewX(45deg);
  transition: 1.5s;
}

最终实现效果如下:

在这里插入图片描述

实现一列立方体

有了单个立方体后实现一列立方体就方便实现。具体代码如下:

.container .cube div {
  position: absolute;
  display: flex;
  flex-direction: column;
  gap: 30px;
}

实现上述代码后,页面效果如下:

在这里插入图片描述

实现大立方体的一个面

形成一列效果后,我们使用translate和 css 变量实现完成立方体的一个面。具体代码如下:

.container .cube div {
  position: absolute;
  display: flex;
  flex-direction: column;
  gap: 30px;
  translate: calc(-70px * var(--x)) calc(-60px * var(--y));
}

实现上述代码后,页面效果如下:

在这里插入图片描述

实现 3*3 的大立方体

实现了一个面后,我们实现大立方体就很简单,只要使用translate来修改其他面的位置就可以,具体代码如下:

.container .cube:nth-child(2) {
  z-index: 1;
  translate: -60px -60px;
}

.container .cube:nth-child(3) {
  z-index: 3;
  translate: 60px 60px;
}

实现上述代码后,页面效果如下:

在这里插入图片描述

实现立方体属性悬停效果

整体布局实现后,我们就可以在小立方体上添加对应的鼠标移动样式,具体的代码如下:

.container .cube div span:hover {
  transition: 0s;
  background: #ef4149;
  filter: drop-shadow(0 0 30px #ef4149);
}

.container .cube div span:hover::before {
  transition: 0s;
  background: #f75d64;
}

.container .cube div span:hover::after {
  transition: 0s;
  background: #f75d64;
}

实现上述代码后,页面效果如下:

在这里插入图片描述

使用动画实现立方体多种颜色变化

.container {
  position: relative;
  top: -80px;
  transform: skewY(-20deg);
  /* 总容器来控制小立体的颜色变化 */
  animation: animate 5s linear infinite;
}

@keyframes animate {
  0% {
    filter: hue-rotate(0deg);
  }
  100% {
    filter: hue-rotate(360deg);
  }
}

完整代码下载

完整代码下载

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

账号微服务短信验证码发送工具单元测试

账号微服务短信验证码发送工具单元测试 注意sms的 app-code #----------sms短信配置-------------- sms:app-code: dd7829bedfaf4373875aa91abba82523template-id: JM1000372package net.xdclass.config;import org.springframework.context.annotation.Bean; import org.spri…

klmanga 章节链接获取

两年前还是可以直接爬的&#xff0c;现在章节不显示了 直接爬取下来的源码章节显示loading&#xff0c;在源码中可以看到是通过js加载出来的&#xff0c;搜索loadChapterDate dataFile atob(FR)&#xff0c;这是将FR的值用base64解码赋予dataFile 根据这段var paramsnew …

原生JS/JQuery封装请求工具类

原生JS的用途 原生 JavaScript 是一种用于开发网络应用程序的编程语言。它可以用于网页开发、服务器端开发和移动应用开发等多个方面。以下是原生 JavaScript 的一些主要用途&#xff1a; 网页开发&#xff1a;原生 JavaScript 可用于处理 DOM&#xff08;文档对象模型&#x…

指针知识大礼包,让你的编程之路更顺畅(四)

1. 回调函数是什么&#xff1f; 2. qsort使⽤举例 3. qsort函数的模拟实现 4. sizeof和strlen的对⽐ 5. 数组和指针笔试题解析 6. 指针运算笔试题解析 正文开始&#xff1a; 1. 回调函数是什么&#xff1f; 回调函数就是⼀个通过 函数指针 调⽤的函数。 如果你把函数的…

【JavaSE】一维数组和二维数组详解

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 一维数组 基本语法 初始化 遍历和打印 数组是引用型变量 基本类型变量与引用类型变量的区别 null 数组传参和返回 总结 二维数组 基本语法 初始化 遍历和打印 一维数组…

动态表情包怎么制作?超简单的gif动画制作方法

动态gif表情包非常的收大众欢迎&#xff0c;小编也不例外。日常聊天斗图中都少不了它们的存在&#xff0c;gif表情包能够调节聊天的氛围。那么&#xff0c;这种gif表情包是怎么做的呢&#xff1f;下面就跟着小编一起来看看制作gif动画图片的方法&#xff0c;不需要下载任何软件…

基于GA遗传优化的离散交通网络双层规划模型设计matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于GA遗传优化的离散交通网络双层规划模型设计.优化输出路段1和路段2的收费情况收敛过程。 2.测试软件版本以及运行结果展示 MATLAB2022a版本运行 3.核心程序…

独家原创!TCN-BiGRU-Attention一键实现西储大学故障诊断与讲解!附带处理好的Excel故障诊断数据集!

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 数据介绍与故障诊断讲解 1.数据预处理 2.特…

【Python】基础语法(1)

目 录 一.常量和表达式二.变量和类型变量是什么变量的语法(1) 定义变量(2) 使用变量 变量的类型(1) 整数(2) 浮点数(小数)(3) 字符串(4) 布尔(5) 其他 为什么要有这么多类型?动态类型特性 三.注释注释是什么注释的语法(1) 注释行(2) 文档字符串 注释的规范 四.输入输出和用户交…

Android熄屏/亮屏,旋转屏幕/横竖屏切换生命周期变化与activity销毁重建

Android熄屏/亮屏&#xff0c;旋转屏幕/横竖屏切换生命周期变化与activity销毁重建 1、熄屏/亮屏 熄屏后&#xff0c;Android生命周期走&#xff1a; onPause onStop 接着点亮Android手机屏幕&#xff0c;生命周期走&#xff1a; onRestart onStart onResume 2、旋转屏幕&…

JavaScript动态渲染页爬取——Playwright的使用

Playwright的使用 Playwright是微软在2020年年初开源的新一代自动化测试工具&#xff0c;其功能和Selenium、Pyppeteer等类似&#xff0c;都可以驱动浏览器进行各种自动化操作。Playwright对市面上的主流浏览器都提供了支持&#xff0c;API功能简洁又强大&#xff0c;虽然诞生…

nginx界面管理工具之nginxWebUI 搭建与使用

nginx界面管理工具之nginxWebUI 搭建与使用 一、nginxWebUI 1.nginx网页配置工具 官网地址: http://www.nginxwebui.cn 源码地址&#xff1a;https://git.chihiro.org.cn/chihiro/nginxWebUI 2.功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议…

EXCEL VBA将word里面的指定的关键词替换掉后并标记红色字体

EXCEL VBA将word里面的指定的关键词替换掉后并标记红色字体 Sub 开关() Call 新建副本 Call ReplaceAndHighlightInFolder End Sub Sub 新建副本()fpath ThisWorkbook.Path & "\"Dim MyFile As ObjectSet MyFile CreateObject("Scripting.FileSystemObjec…

FireWorks:加速科学计算和工作流程的强大工具

FireWorks&#xff1a;加速科学计算和工作流程的强大工具 FireWorks是一个功能强大的开源工具&#xff0c;旨在简化和加速科学计算和工作流程。它提供了一个灵活的编排框架&#xff0c;使研究人员和工程师能够高效地设计、管理和执行复杂的计算任务和工作流。本文将深入探讨Fir…

Hadoop安装部署-DataNode集群版

Hahoop分布式文件系统支持DataNode节点的大规模扩展&#xff0c;本文主要描述DataNode集群版的安装部署。 如上所示&#xff0c;Hadoop分布式文件系统中每个文件是以数据块的方式存储在不同的DataNode中&#xff0c;每个数据块都支持高可用性&#xff0c;当其中一个数据块对应的…

vue watch 深度监听

vue2文档&#xff1a;API — Vue.js vue3文档&#xff1a;侦听器 | Vue.js watch 可以用来监听页面中的数据&#xff0c;但如果监听的源是对象或数组&#xff0c;则使用深度监听&#xff0c;强制深度遍历源&#xff0c;以便在深度变更时触发回调。 一&#xff0c;监听 <t…

项目管理—项目合同签订后客户又不认了

大家好&#xff0c;我是不会魔法的兔子&#xff0c;是一名执业律师&#xff0c;创建[项目管理者的法小院儿]&#xff0c;持续从法律的角度分享项目管理中的风险及预防问题&#xff0c;让项目管理者能够提早发现与解决项目执行过程中的风险&#xff0c;同时欢迎大家一起交流&…

从快递公司内部辞职的快递员才告诉你的寄快递的真相!

我们知道现在寄快递有很多种方法&#xff0c;但是每种方法也都花费不少&#xff0c;但是我们知道最省钱的寄快递的方法吗&#xff1f;别急&#xff0c;小编了解到快递员告诉我许多快递物流的真相。我们寄快递无非就是去快递驿站寄快递&#xff0c;然后称重&#xff0c;然后计算…

七大 QC 工具图的定义与示例(看这篇就够了)

前言 七大 QC 工具图是通过数值的方式进行数据分析的工具&#xff0c;分别是鱼骨图、直方图、柏拉图、散布图、管制图、检查图和层别图。其实&#xff0c;我们在日常生活与工作中经常看到它们&#xff0c;只是样子和名字对不上而已&#xff0c;今天写这篇文章就是为了帮助自己…

蓝桥杯单片机---第十届省赛题目解析

文章目录 比赛题目一、代码相关定义、声明1.头文件声明2.变量声明 二、主要函数1.main函数2.按键扫描3.数码管显示4.LED显示5.定时器中断 三、次要函数1.初始化函数Init2.按键函数Key3.LED函数Led4.数码管函数Seg5.iic函数中6.onewire函数中 总结 比赛题目 这里因为我没有这个题…