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

news2024/11/29 10:51:06

使用 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);
  }
}

完整代码下载

完整代码下载

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

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

相关文章

docker使用教程

寒假用了docker 2个月没用 结果还重新安装docker 忘了怎么用 为了免得以后忘写下下面内容 # If you dont have a docker installed, youll need to install docker curl -s https://get.docker.com/ | sh # Use pip to install docker-compose pip install docker-compose…

《AIGC重塑金融:AI大模型驱动的金融变革与实践》

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-oBSlqt4Vga1he7DL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

Centos JDK1.8 下载安装

https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 一 RPM包安装 rpm -ivh jdk-8u391-linux-x64.rpm /etc/profile export JAVA_HOME/usr/java/jdk1.8.0-x64 export PATH$JAVA_HOME/bin:$PATHsource /etc/profile二 tar.gz 包手动…

四、e2studio VS STM32CubeIDE之STM32CubeIDE线程安全解决方案

目录 一、概述/目的 二、原因和办法 三、线程安全问题的描述 四、STM32解决方案 4.1 通用策略 4.2 RTOS策略 4.3 策略的讲解 4.3.1 裸机应用(策略2、3) 4.3.2 RTOS应用(策略4、5) 五、关键源码 四、e2studio VS STM32CubeIDE之STM32CubeIDE线程安全解决方案 一、概述…

微信公众号运营必备工具合集

微信公众号运营必备工具合集 各位同学&#xff0c;想要成为一名合格的公众号运营&#xff0c;必须要搭建一个属于自己的运营工具库&#xff0c;可以在日常工作中最大限度的提高效率。 91微信编辑器 &#xff1a;http://bj.91join.com/ 壹伴助手&#xff1a;https://yiban.io…

[HackMyVM]靶场Factorspace

kali:192.168.56.104 靶机:192.168.56.138 端口扫描 ┌──(root㉿kali2)-[~/Desktop] └─# nmap 192.168.56.138 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-29 22:38 CST Nmap scan report for 192.168.56.138 Host is up (0.000081s latency). Not shown: …

【折腾笔记】Windows系统运行ChatGLM3-6B模型实验

【折腾笔记】Windows系统运行ChatGLM3-6B模型实验 准备工作 硬件环境 笔记本电脑CPU&#xff1a;AMD R9 7940HS 8核16线程内存&#xff1a;16G16G DDR5双通道 4800MHzGPU&#xff1a;NVIDIA RTX4060 8G显存 软件环境 操作系统版本&#xff1a;Windows 10 企业版 22H2显卡驱…

栈类实现与括号匹配问题(c++)

1&#xff0c;关于栈 堆栈 又名栈&#xff08;stack&#xff09;&#xff0c;它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶&#xff0c;相对地&#xff0c;把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈&#xff0c;它…

Linux重点思考(上)--权限/解压/定时任务/性能

Linux重点思考(上&#xff09;--权限/解压/定时任务 权限修改格式chmod使用 打包解压tar -zcvf ab.tar&#xff08;打包&#xff09;tar -xvf ab.tar -C/usr &#xff08;解压&#xff09; 系统防火墙service iptables statussystemctl status iptables区别 定时任务定时任务-c…

【Java多线程(3)】线程安全问题和解决方案

目录 一、线程安全问题 1. 线程不安全的示例 2. 线程安全的概念 3. 线程不安全的原因 二、线程不安全的解决方案 1. synchronized 关键字 1.1 synchronized 的互斥特性 1.2 synchronized 的可重入特性 1.3 死锁的进一步讨论 1.4 死锁的四个必要条件&#xff08;重点&…

2024UI自动化面试题汇总【建议收藏】

1.你是如何搭建ui自动化框架的&#xff1f; 在搭建ui自动化框架&#xff0c;使用的是po设计模式&#xff0c;也就是把每一个页面所需要 操作的元素和步骤都封装成一个页面类中。然后使用seleniumunittest搭建 四层框架实现数据、脚本、业务逻辑分离&#xff08;关键字驱动&…

怎样在Linux搭建NTP服务器

搭建 NTP&#xff08;Network Time Protocol&#xff09;服务器可以帮助你在局域网内提供时间同步服务&#xff0c;让网络中的设备都使用统一的时间。以下是在 Linux 系统上搭建 NTP 服务器的基本步骤&#xff1a; 安装 NTP 服务器软件&#xff1a; 在终端中执行以下命令安装 N…

计算机网络实验四:MAC地址、IP地址、ARP地址

目录 实验四&#xff1a;MAC地址、IP地址、ARP地址 4.1 实验目的 4.2 实验步骤 4.2.1 构建网络拓扑 4.2.2 配置各网络设备 4.2.3 网络功能验证测试 4.3 实验总结 实验四&#xff1a;MAC地址、IP地址、ARP地址 4.1 实验目的 &#xff08;1&#xff09;掌握计算机网络中…

使用mybatis的@Interceptor实现拦截sql

一 mybatis的拦截器 1.1 拦截器介绍 拦截器是一种基于 AOP&#xff08;面向切面编程&#xff09;的技术&#xff0c;它可以在目标对象的方法执行前后插入自定义的逻辑。 1.2 语法介绍 1.注解Intercepts Intercepts({Signature(type StatementHandler.class, method “…

深度理解C++多继承和多态

首先我们看看多继承的多态是如何发生的。 #include <iostream>using std::cout; using std::endl;class A {public:virtualvoid a(){cout<<"virtual A::a()"<<endl;}virtualvoid b(){cout<<"virtual A::b()"<<endl;}virtua…

【C++进阶】多态,带你领悟虚函数和虚函数表

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;c大冒险 总有光环在陨落&#xff0c;总有新星在闪烁 【本节目标】 1. 多态的概…

京东云8核16G服务器配置租用优惠价格1198元1年、4688元三年

京东云轻量云主机8核16G服务器租用优惠价格1198元1年、4688元三年&#xff0c;配置为8C16G-270G SSD系统盘-5M带宽-500G月流量&#xff0c;华北-北京地域。京东云8核16G服务器活动页面 yunfuwuqiba.com/go/jd 活动链接打开如下图&#xff1a; 京东云8核16G服务器优惠价格 京东云…

uniapp 微信小程序 输入框跟随手机键盘弹起

需求&#xff1a;手机键盘弹起后&#xff0c;页面底部的输入框跟随弹起&#xff0c;且页面不被顶上去 html: <textareaclass"textinput"placeholder-class"input-place"auto-height:maxlength"2000"v-model"text"placeholder"…

工业测试测量仪器与人工智能(AI)如何结合

工业测试测量仪器与人工智能&#xff08;AI&#xff09;的结合可以通过多种方式实现&#xff0c;其中一些主要方法包括&#xff1a; 1. 数据分析和预测 智能数据分析&#xff1a;利用AI算法对从传感器和测试仪器收集的数据进行分析&#xff0c;识别模式、趋势和异常&#xff0…

基于单片机热敏电阻PT100温度控制系统设计

**单片机设计介绍&#xff0c;基于单片机热敏电阻PT100温度控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机热敏电阻PT100的温度控制系统设计是一个综合了硬件和软件设计的工程任务。以下是对该设计概要的…