使用HTML和CSS实现3D波浪动画效果

使用HTML和CSS实现3D波浪动画效果

在本篇博客中,将详细介绍如何使用HTML与CSS创建一个3D波浪动画效果。这个效果不仅能够在网页中创建立体感强的视觉体验,还能够通过悬停和聚焦实现与用户的交互。我们将逐步解析代码中的每个部分,帮助你掌握其中的关键技巧。

1. 效果

在这里插入图片描述

2. HTML结构

首先,我们来看一下HTML的基础结构。这个页面的主要布局是由一个容器wrapper包裹着多个item元素,item中的每一个都代表了可以进行3D波浪动画效果的图像。

HTML代码:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>3DwaveAnimation</title>
    <link rel="stylesheet" href="index.css">
</head>

<body>
    <div class="wrapper">
        <div class="items">
            <!-- 
                tabindex 设置定义了键盘导航顺序,并可通过鼠标点击获取焦点,方便用户交互。
             -->
            <div class="item" tabindex="0" style="background-image: url(../../JS/v2-3fcdfeacc10696e3f71d66a9ba6e9cc4_r.jpg)"></div>
            <!-- 可以复制多个 item 以形成波浪效果 -->
        </div>
    </div>
</body>

</html>

代码解析:

  • <div class="wrapper">:这是最外层的容器,包裹住所有的item元素,并在CSS中居中对齐页面。
  • <div class="item">:每个item元素通过背景图片展示具体的内容,它们将在3D空间中排列,形成波浪效果。

tabindex属性被应用于每个item,使这些元素在用户通过键盘导航时可以聚焦。不同的tabindex值允许我们控制焦点的顺序,这在实现交互时非常重要。

3. CSS样式

接下来,我们通过CSS来实现3D动画效果,主要依赖于transformperspectivefilter等CSS3属性。

CSS代码:

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

/* 定义常用的CSS变量 */
:root {
    --index: calc(1vw + 1vh);
    --transition: cubic-bezier(.1, .7, 0, 1);
}

body {
    background-color: #141414;
}

.wrapper {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
}

.items {
    display: flex;
    gap: 0.4rem;
    perspective: calc(var(--index) * 35);
}

.item {
    width: calc(var(--index) * 3);
    height: calc(var(--index) * 12);
    background-size: cover;
    background-position: center;
    cursor: pointer;
    filter: grayscale(1) brightness(.7);
    transition: transform 1.25s var(--transition), filter 3s var(--transition), width 1.25s var(--transition);
    will-change: transform, filter, rotateY, width;
}

.item::before,
.item::after {
    content: '';
    position: absolute;
    height: 100%;
    width: 20px;
    right: calc(var(--index) * -1);
}

.item::after {
    left: calc(var(--index) * -1);
}

/* 当鼠标悬浮在 'item'元素上时 */
.items .item:hover {
    filter: inherit;
    transform: translateZ(calc(var(--index) * 10));
}

/* 选择悬浮元素后面的兄弟元素并设置3D效果 */
.items .item:hover+.item {
    filter: inherit;
    transform: translateZ(calc(var(--index) * 8.5)) rotateY(35deg);
    z-index: -1;
}

.items .item:hover+*+* {
    filter: inherit;
    transform: translateZ(calc(var(--index) * 5.6)) rotateY(40deg);
    z-index: -2;
}

.items .item:hover+*+*+* {
    filter: inherit;
    transform: translateZ(calc(var(--index) * 2.5)) rotateY(30deg);
    z-index: -3;
}

.items .item:hover+*+*+*+* {
    filter: inherit;
    transform: translateZ(calc(var(--index) * .6)) rotateY(15deg);
    z-index: -4;
}

/* 使用 :has 伪类选中前面的兄弟元素 */
.items .item:has(+*:hover) {
    filter: inherit;
    transform: translateZ(calc(var(--index) * 8.5)) rotateY(-35deg);
}

.items .item:has(+ .item +*:hover) {
    filter: inherit;
    transform: translateZ(calc(var(--index) * 5.6)) rotateY(-40deg);
}

.items .item:has(+ * + * + :hover) {
    filter: inherit;
    transform: translateZ(calc(var(--index) * 2.5)) rotateY(-30deg);
}

.items .item:has(+ * + * + * + :hover) {
    filter: inherit;
    transform: translateZ(calc(var(--index) * .6)) rotateY(-15deg);
}

/* 鼠标点击和获得焦点时的效果 */
.items .item:active,
.items .item:focus {
    width: 28vw;
    filter: inherit;
    z-index: 100;
    transform: translateZ(calc(var(--index) * 10));
    margin: 0 .45vw;
}

样式解析:

  1. 全局与布局样式

    • *:清除了默认的marginpadding,并通过box-sizing控制元素的盒模型。
    • body:设置背景颜色为深色(#141414)来突出3D效果。
    • wrapperitems:使用flexbox布局将所有的item元素居中,并通过perspective来提供3D透视效果,模拟物体的远近变化。
  2. 变量定义

    • :root:定义了两个CSS变量--index--transition,用于计算尺寸和过渡动画的时间函数。这些变量使代码更具灵活性,易于调整动画效果。
  3. 3D动画与效果

    • item:每个item通过background-sizebackground-position确保背景图片适应框架大小,并通过grayscalebrightness滤镜使图片默认呈现灰度效果。
    • will-change:提前告知浏览器即将变化的属性,优化性能,使3D效果更流畅。
    • hover效果:当鼠标悬浮在某个item上时,该item将向屏幕外部移动(translateZ),并恢复原色,其他兄弟元素则根据其位置调整3D旋转角度和深度(rotateYtranslateZ)。
  4. 交互样式

    • :has伪类:CSS的has伪类用来选取满足某些条件的兄弟元素,控制前面几个兄弟元素的变化,形成连锁反应,使整体看起来如波浪般连动。
    • :active:focus:用于处理元素被点击或获得焦点时的样式,确保键盘导航和鼠标点击时的交互效果一致。

4. 关键知识点解析

3D透视与变换

  • perspective:定义3D场景的透视视角,使物体看起来离用户有远近关系。
  • transform:通过translateZ将元素在Z轴方向上移动,形成远近效果,通过rotateY旋转元素,增加立体感。

交互伪类

  • :hover:控制元素在鼠标悬停时的变化。
  • :focus:active:保证用户使用键盘时同样能与页面进行交互,保持可访问性。

5. 总结

通过本文的介绍,我们成功创建了一个3D波浪动画效果,利用了CSS3的transformperspective等属性,以及交互伪类实现了炫酷的视觉效果。这个效果不仅可以丰富页面的动态效果,也可以增强用户的交互体验。

你可以根据自己的需求进行调整,例如改变动画速度、背景图片或3D视角等。如果你想让你的网页在视觉上更具吸引力,不妨试试这个3D波浪动画效果!

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

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

相关文章

Stm32+Esp8266连接阿里云程序移植教程(MQTT协议)

Stm32Esp8266连接阿里云程序移植教程&#xff08;MQTT协议&#xff09; 一、前期准备二、移植过程三、程序的使用3.1 连接上阿里云3.2 传输用户数据到阿里云3.3 解析从阿里云下发给用户的数据3.4 关于调试接口 一、前期准备 自己要的工程文件移植所需的文件&#xff08;如下图&…

[ACTF2020] 新生赛]Exec1

目录 0x01命令执行 [ACTF2020 新生赛]Exec1 1、解法1 2、解法2 3、总结 3.1php命令注入函数 3.2java命令注入函数 3.3常见管道符 0x02SQL注入 [极客大挑战 2019]EasySQL1 0x01命令执行 [ACTF2020 新生赛]Exec1 1、解法1 ping本地&#xff0c;有回显&#xff0c;TTL…

数据分析Python for Data专业书籍pdf

随着大数据时代的到来&#xff0c;数据分析已成为企业决策、科学研究以及日常生活中不可或缺的一部分。对于想要学习数据分析的人来说&#xff0c;Python 是最理想的编程语言之一。其简洁的语法、强大的库以及丰富的社区支持&#xff0c;使得 Python 成为数据分析的首选工具。本…

隐蔽的并发错误

欢迎关注公众号 【11来了】 &#xff0c;持续 中间件源码、系统设计、面试进阶相关内容 在我后台回复 「资料」 可领取 编程高频电子书&#xff01; 在我后台回复「面试」可领取 30w 字的硬核面试笔记&#xff01; 感谢你的关注&#xff01; 隐蔽的 synchronized 并发错误 在使…

基于SpringBoot+Vue+Uniapp汽车保养系统小程序的设计与实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而…

PROFINET转SSI协议模块快速使用说明

Profinet网关PROFINET转SSI协议 PN4SSI模块快速使用说明 * 应用时PNSSI模块时&#xff0c;拨码全部拨到OFF。 (1) 在博途中新建一个项目&#xff0c;通过“选项”——“管理通用站描述文件”添加模块的GSD文件。 选择GSD文件所在的目录&#xff0c;点击安装&#xff1a; (…

天选销冠徐志胜与森马的跨界营销,你get了吗?

在当今这个信息爆炸的时代&#xff0c;品牌如何在众多竞争者中脱颖而出&#xff0c;成为消费者心中的首选&#xff0c;是一个值得深入探讨的问题。知名脱口秀演员徐志胜携手森马推出《绒毛的歌》广告片&#xff0c;以其独特的幽默风格&#xff0c;试图为冬季羽绒服市场注入一股…

CEEMDAN +组合预测模型(Transformer - BiLSTM + ARIMA)

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享&#xff01; EMD、EEMD、FEEMD、CEEMD、CEEMDAN的区别、原理和Python实现&#xff08;一&#xff09;EMD-CSDN博客 EMD、EEM…

解决linux服务器磁盘占满问题(详细,有效,100%解决)

应用场景&#xff1a; 在我们的日常开发中&#xff0c;我们的服务器总是在不知不觉中磁盘莫名奇妙少了很多空间&#xff0c;或者被占满了&#xff0c;如果这时候要想要存储什么文件&#xff0c;突然发现空间不够了。但我们通常也不知道那些文件占用的空间大&#xff0c;这时候…

Linux 内核态,用户态,以及如何从内核态到用户态,交互方式有哪些

一、Linux 内核态&#xff0c;用户态 Linux 内核态&#xff0c;用户态&#xff0c;以及如何从内核态到用户态&#xff0c;我来说下我的理解 很多面试官&#xff0c;面试也是照搬照套&#xff0c;网上找的八股文面试题&#xff0c;面试的人也是背八股文&#xff0c;刚好背到了&…

linux 虚拟环境下源码安装DeepSpeed

第一步&#xff1a;创建虚拟环境&#xff1a; conda create -n deepspeed python3.10 第二步&#xff1a;进入虚拟环境&#xff0c;安装Pytorch 2.3.1 # CUDA 12.1 conda install pytorch2.3.1 torchvision0.18.1 torchaudio2.3.1 pytorch-cuda12.1 -c pytorch -c nvidia 第…

OJ题:随机链表的复制—Java数据结构

目录 随机链表的复制 1. 完整题目 2.错误做法 3.第一次遍历 1.拷贝所有旧节点的val域 2. 串联老节点和新节点 3. 第一次遍历代码&#xff1a; 4.第二次遍历 1. 表示出新链表的节点 2. 表示出新节点的next,random 3. 通过映射关系赋值next,random 4. 第二次遍历代码…

DAY53WEB 攻防-XSS 跨站SVGPDFFlashMXSSUXSS配合上传文件添加脚本

知识点&#xff1a; 1、XSS跨站-MXSS&UXSS 2、XSS跨站-SVG制作&配合上传 3、XSS跨站-PDF制作&配合上传 4、XSS跨站-SWF制作&反编译&上传 XSS分类&#xff1a;https://www.fooying.com/the-art-of-xss-1-introduction/&#xff08;失效了&#xff09; …

案例实践 | 以长安链为坚实底层,江海链助力南通民政打造慈善应用标杆

案例名称-江海链 ■ 实施单位 中国移动通信集团江苏有限公司南通分公司、中国移动通信集团江苏有限公司 ■ 业主单位 江苏省南通市民政局 ■ 上线时间 2023年12月 ■ 用户群体 南通市民政局、南通慈善总会等慈善组织及全市民众 ■ 用户规模 全市近30家慈善组织&#…

【专题】计算机网络概述

1. 计算机网络的作用及其发展史 1.1. 计算机网络的作用 二十一世纪的一些重要特征就是数字化、网络化和信息化&#xff0c;它是一个以网络为核心的信息时代。 网络现在已经成为信息社会的命脉和发展知识经济的重要基础。 信息时代以网络为核心。 (1) 网络 “网络”是一个统称…

selenium:操作滚动条的方法(8)

selenium支持几种操作滚动条的方法&#xff0c;主要介绍如下&#xff1a; 使用ActionChains 类模拟鼠标滚轮操作 使用函数ActionChains.send_keys发送按键Keys.PAGE_DOWN往下滑动页面&#xff0c;发送按键Keys.PAGE_UP往上滑动页面。 from selenium import webdriver from se…

数学考研高分突破:解题思维与速度的双重修炼

随着考研季的临近&#xff0c;众多考生为了在数学这一科目中取得高分&#xff0c;纷纷投入到紧张的复习中&#xff0c;如何在有限的时间内&#xff0c;既提高解题思维&#xff0c;又提升解题速度&#xff0c;成为了许多考生心中的难题&#xff0c;本文将围绕这一主题&#xff0…

绘制YOLOv11模型在训练过程中,精准率,召回率,mAP_0.5,mAP_0.5:0.95,以及各种损失的变化曲线

一、本文介绍 本文用于绘制模型在训练过程中,精准率,召回率,mAP_0.5,mAP_0.5:0.95,以及各种损失的变化曲线。用以比较不同算法的收敛速度,最终精度等,并且能够在论文中直观的展示改进效果。支持多文件的数据比较。 专栏目录:YOLOv11改进目录一览 | 涉及卷积层、轻量化…

SpringMVC后台控制端校验-表单验证深度分析与实战优化

前言 在实战开发中&#xff0c;数据校验也是十分重要的环节之一&#xff0c;数据校验大体分为三部分&#xff1a; 前端校验后端校验数据库校验 本文讲解如何在后端控制端进行表单校验的工作 案例实现 在进行项目开发的时候,前端(jquery-validate),后端,数据库都要进行相关的数据…

【华为】静态路由配置

1.配置接入层&#xff1a; LSW1&#xff08;LSW3同理&#xff09;: vlan batch 10 20 in g0/0/1 port link-type ac port default vlan 10 in g0/0/2 port link-type ac port default vlan 20 in g0/0/24 port link-type tr port tr allow-pass vlan 10 202.配置汇聚层&#xf…