Css动画:旋转相册动画效果实现

​🌈个人主页:前端青山
🔥系列专栏:Css篇
🔖人终将被年少不可得之物困其一生

依旧青山,本期给大家带来Css篇专栏内容:Css动画:旋转相册动画效果实现

前言

随着Web技术的发展,网页不再局限于静态展示,越来越多的动态效果被应用到网页设计中,以提升用户体验。本文将介绍如何利用HTML、CSS实现一个旋转相册动画效果。通过这个实例,读者可以学习到CSS3的3D变换、动画以及响应式设计的基本技巧。

实现思路

1. HTML结构

首先,我们需要构建基本的HTML结构。这里我们使用一个<div>元素作为相册容器,并在其内部放置多个<img>元素作为相册中的图片。每个图片都设置为绝对定位,以便后续通过CSS3进行3D变换。

<div class="huabu"><img src="img/1.jpg" alt=""><img src="img/1.jpg" alt=""><img src="img/1.jpg" alt=""><img src="img/1.jpg" alt=""><img src="img/1.jpg" alt=""><img src="img/1.jpg" alt=""><img src="img/1.jpg" alt=""><img src="img/1.jpg" alt=""><img src="img/1.jpg" alt=""><img src="img/1.jpg" alt="">
</div>

2. CSS样式

2.1 基本样式

首先,设置页面的基本样式,包括背景图片、宽度和高度等。这里使用了背景图片,并设置了不重复显示且自适应屏幕大小。

body {width: 100%;height: 100%;background: url(img/背景.jpg);background-repeat: no-repeat;background-size: inherit;
}
2.2 相册容器样式

相册容器.huabu设置了宽度、高度、居中对齐、3D变换样式以及动画效果。其中,transform-style: preserve-3d;确保子元素的3D变换效果得以保留。

.huabu {width: 80%;height: 700px;margin: 0 auto;transform-style: preserve-3d;position: relative;animation: lixiaofang 5s infinite alternate;
}
2.3 图片样式

每张图片都设置了固定尺寸,并使用绝对定位使其在容器内居中显示。同时,为图片添加了悬停效果,当鼠标悬停在图片上时,图片会放大。

.huabu > img {width: 200px;height: 350px;position: absolute;right: 0;left: 0;top: 0;bottom: 0;margin: auto;
}
​
.huabu > img:hover {width: 550px;
}

2.4 动画效果

定义了一个名为lixiaofang的关键帧动画,使相册容器在5秒内从一个角度旋转到另一个角度,然后返回原位,无限循环。

@keyframes lixiaofang {0% {transform: rotateX(20deg) rotateY(30deg);}50% {transform: rotateX(-30deg) rotateY(-70deg);}100% {transform: rotateX(20deg) rotateY(30deg);}
}
2.5 3D变换

为了让图片在3D空间中均匀分布,我们使用了rotateYtranslateZ属性。每个图片根据其索引值进行不同的旋转和平移,形成一个环形排列。

.huabu > img:nth-child(1) {transform: translateZ(400px);
}
.huabu > img:nth-child(2) {transform: rotateY(36deg) translateZ(400px);
}
.huabu > img:nth-child(3) {transform: rotateY(72deg) translateZ(400px);
}
.huabu > img:nth-child(4) {transform: rotateY(108deg) translateZ(400px);
}
.huabu > img:nth-child(5) {transform: rotateY(144deg) translateZ(400px);
}
.huabu > img:nth-child(6) {transform: rotateY(180deg) translateZ(400px);
}
.huabu > img:nth-child(7) {transform: rotateY(216deg) translateZ(400px);
}
.huabu > img:nth-child(8) {transform: rotateY(252deg) translateZ(400px);
}
.huabu > img:nth-child(9) {transform: rotateY(288deg) translateZ(400px);
}
.huabu > img:nth-child(10) {transform: rotateY(324deg) translateZ(400px);
}

3. 悬停效果

为了增强交互体验,当鼠标悬停在相册容器上时,动画会暂停,方便用户查看当前图片。

.huabu:hover {animation-play-state: paused;
}

代码解析

HTML部分

  • <div class="huabu">: 相册容器,包含所有图片。

  • <img src="img/1.jpg" alt="">: 每个图片元素,使用相同的图片路径,实际应用中可以根据需要替换为不同的图片。

CSS部分

  • body: 设置页面的基本样式,包括背景图片、宽度和高度。

  • .huabu: 相册容器的样式,包括宽度、高度、居中对齐、3D变换样式以及动画效果。

  • .huabu > img: 图片的基本样式,包括尺寸、绝对定位以及悬停效果。

  • @keyframes lixiaofang: 定义动画的关键帧,使相册容器在5秒内从一个角度旋转到另一个角度,然后返回原位,无限循环。

  • .huabu > img:nth-child(n): 使用nth-child选择器为每个图片设置不同的3D变换,形成环形排列。

  • .huabu:hover: 当鼠标悬停在相册容器上时,动画暂停。

结尾

通过上述步骤,我们成功实现了一个旋转相册动画效果。这个效果不仅美观,还能增强用户的互动体验。希望本文能帮助读者更好地理解和应用CSS3的3D变换和动画技术,为网页设计带来更多创意和可能性。

如果你有任何问题或建议,欢迎在评论区留言交流。感谢阅读!

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

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

相关文章

ElasticSearch 与向量数据库的结合实践:突破亿级大表查询瓶颈20241204

&#x1f4a1; ElasticSearch 与向量数据库的结合实践&#xff1a;突破亿级大表查询瓶颈 &#x1f4da; 引言 随着业务规模的不断扩大&#xff0c;传统关系型数据库在处理 亿级大表 时&#xff0c;性能瓶颈愈加凸显。关键词检索、模糊查询、多条件筛选等需求逐步升级&#xff…

Python 笔记之线程threading

并发和并行 并发&#xff1a;当有多个线程操作时&#xff0c;如果系统只有一个CPU&#xff0c;则它不可能真正同时进行一个以上的线程&#xff0c;它只能把CPU运行时间划分为若干个时间段&#xff0c;再将时间段分配给各个线程执行&#xff0c;在一个时间段的线程代码运行时&am…

解决stable-diffusion-webui时的问题:No module ‘xformers‘. Proceeding without it

p.s 被另一篇文章坑了&#xff0c;装个xformers把我原先的pytorch降智了&%$^# 注意&#xff1a;&#xff01;&#xff01;&#xff01;xformers非强制安装&#xff1b;可优化显存&#xff0c;提高性能和出图速率&#xff0c;对于GPU能力有限的用户很有用&#xff1b;安装过…

如何加强游戏安全,防止定制外挂影响游戏公平性

在现如今的游戏环境中&#xff0c;外挂始终是一个困扰玩家和开发者的问题。尤其是定制挂&#xff08;Customized Cheats&#xff09;&#xff0c;它不仅复杂且隐蔽&#xff0c;更能针对性地绕过传统的反作弊系统&#xff0c;对游戏安全带来极大威胁。定制挂通常是根据玩家的需求…

【Python系列】使用 `psycopg2` 连接 PostgreSQL 数据库

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Linux 权限管理:用户分类、权限解读与常见问题剖析

&#x1f31f; 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。&#x1f31f; &#x1f6a9;用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 目录 &#x1f4af;L…

Oracle 11g ADG 单实例 DG Broker 配置指南

概述 DataGuard Broker能更加容易的管理和维护多个Standby Database&#xff0c;它能够将主库和备库按照一定的逻辑组织起来并进行集中管理&#xff0c;包括创建、维护和监控 Data Guard 等任务。如果有多个备库或者RAC数据库中有个多个实例&#xff0c;要是进行手工配置管理&…

数据采集卡的各参数介绍

数据采集卡&#xff08;DAQ 卡&#xff09;是用于测量物理信号&#xff08;如电压、电流、温度等&#xff09;并将其转化为数字信号的设备。 1. 通道数&#xff08;Channels&#xff09; 含义&#xff1a;数据采集卡可以同时采集多少路信号。比喻&#xff1a;通道数就像一个人…

LeetCode 力扣 热题 100道(十四)二叉树的中序遍历(C++)

给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 如下为代码&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullpt…

运费微服务和redis存热点数据

目录 运费模板微服务 接收前端发送的模板实体类 插入数据时使用的entity类对象 BaseEntity类 查询运费模板服务 新增和修改运费模块 整体流程 代码实现 运费计算 整体流程 总的代码 查找运费模板方法 计算重量方法 Redis存入热点数据 1.从nacos导入共享redis配置…

【C++】—— set 与 multiset

【C】—— map 与 set 1 序列式容器和关联式容器2 set 系列的使用2.1 set 和 multiset 参考文档2.2 set 类的介绍2.3 set 的迭代器和构造2.4 set的增删查2.4.1 insert2.4.2 find 与 erase2.4.3 count 2.5 lower_bound 与 upper_bound2.6 multiset 与 set 的差异2.6.1 不再去重2…

HTML5系列(11)-- Web 无障碍开发指南

前端技术探索系列&#xff1a;HTML5 Web 无障碍开发指南 ♿ 致读者&#xff1a;构建人人可用的网络 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 Web 无障碍开发&#xff0c;学习如何创建一个真正包容、人人可用的网站。让我们一起为更多用户提供更好的网络…

dockers网络连接指令:docker network connect

docker network connect 是 Docker 提供的一个命令,用于将现有的容器连接到一个指定的网络中。通过这个命令,用户可以让容器加入到不同的网络环境中,从而实现容器间的通信或者与外部网络的交互。一旦容器被连接到某个网络,它就能够与其他同处该网络中的容器进行直接通信,而…

Jupyter Notebook认识、安装和启动以及使用

Jupyter Notebook认识、安装和启动以及使用 Jupyter Notebook认识、安装和启动以及使用 Jupyter Notebook认识、安装和启动以及使用一、认识Jupyter Notebook1.1 Jupyter Notebook概述1.2 Jupyter Notebook 重要特性(1)交互式代码执行(2)支持多种编程语言(3)富文本编辑(4)代码高…

算法第一弹-----双指针

目录 1.移动零 2.复写零 3.快乐数 4.盛水最多的容器 5.有效三角形的个数 6.查找总价值为目标值的两个商品 7.三数之和 8.四数之和 双指针通常是指在解决问题时&#xff0c;同时使用两个指针&#xff08;变量&#xff0c;常用来指向数组、链表等数据结构中的元素位置&am…

Java 按照添加顺序的集合 详解

在 Java 中&#xff0c;若需要按照添加顺序存储和操作元素&#xff0c;有以下几种数据结构可供选择。这些结构在保留元素插入顺序的同时提供了不同的功能特性。 1. 使用 ArrayList 特点 有序性&#xff1a;ArrayList 会按添加顺序存储元素。允许重复&#xff1a;可以存储重复…

【后端面试总结】golang channel深入理解

在Go语言中&#xff0c;Channel是一种用于在goroutine之间进行通信和同步的重要机制。它提供了一种安全、类型安全的方式来传递数据&#xff0c;使得并发编程变得更加直观和简单。本文将详细介绍Golang中Channel的基本概念、创建与关闭、发送与接收操作&#xff0c;以及相关的使…

java使用HttpClient发送数据的几种情况

1.发送Http 携带 json格式的数据 import org.apache.commons.compress.utils.IOUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org…

稳定运行的以Azure Synapse Dedicated SQL Pool数据仓库为数据源和目标的ETL性能变差时提高性能方法和步骤

在Azure Synapse Dedicated SQL Pool&#xff08;以前称为SQL Data Warehouse&#xff09;的ETL性能变差时&#xff0c;可以通过以下方法和步骤来提高性能&#xff1a; 1. 分析和监控性能瓶颈 查看执行计划&#xff1a;使用SQL的SET STATISTICS IO ON和SET STATISTICS TIME O…

华为、华三交换机纯Web下如何创关键VLANIF、操作STP参数

华为交换机WEB操作 使用的是真机S5735&#xff0c;目前主流的版本都适用&#xff08;V1R5~V2R1的就不在列了&#xff0c;版本太老了&#xff0c;界面完全不一样&#xff0c;这里调试线接的console口&#xff0c;电脑的网络接在ETH口&#xff09; 「模拟器、工具合集」复制整段内…