HTML+CSS 3D旋转登录表单

效果演示

24-3D旋转登录表单.png

实现了一个具有3D旋转效果的登录框,背景为太空图片,登录框位于太空中心,可以通过输入用户名和密码进行登录。登录框使用了CSS3的3D变换和动画效果,使其具有立体感和动态效果。同时,登录框的样式也经过精心设计,使用了半透明的背景、模糊效果、阴影等元素,使其看起来更加美观和现代化。

Code

HTML
<!DOCTYPE html>
<html lang="en"><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title>3D旋转登录表单</title><link rel="stylesheet" href="./24-3D旋转登录表单.css">
</head><body><div class="container"><div class="wrap"><div class="wall wall-top"></div><div class="wall wall-bottom"></div><div class="wall wall-left"></div><div class="wall wall-right"></div><div class="wall wall-back"></div></div><div class="form-box"><div class="tit">login</div><input type="text" placeholder="账号"><input type="password" placeholder="密码"><button>登录</button><span>没有账号?<a href="#">去注册</a></span></div></div>
</body></html>
CSS
* {margin: 0;padding: 0;
}body {height: 100vh;display: flex;justify-content: center;align-items: center;background-color: #000;overflow: hidden;
}.container {perspective: 5px;perspective-origin: 50% 50%;
}.wrap {position: absolute;width: 1000px;height: 1000px;left: -500px;top: -500px;transform-style: preserve-3d;animation: move 20s linear infinite;
}.wall {position: absolute;width: 100%;height: 100%;background: url("./images/space1.jpg") no-repeat;background-size: cover;
}.wall-top {transform: rotateX(90deg) translateZ(500px);
}.wall-bottom {transform: rotateX(-90deg) translateZ(500px);
}.wall-left {transform: rotateY(-90deg) translateZ(500px);
}.wall-right {transform: rotateY(90deg) translateZ(500px);
}.wall-back {transform: rotateX(180deg) translateZ(500px);
}.form-box {position: relative;background-color: rgba(255, 255, 255, 0.1);width: 400px;height: 550px;border-radius: 15px;border-top: 1px solid rgba(255, 255, 255, 0.5);border-left: 1px solid rgba(255, 255, 255, 0.5);display: flex;align-items: center;flex-direction: column;backdrop-filter: blur(20px);box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5);
}.form-box .tit {color: #fff;font-size: 40px;font-weight: bold;text-transform: uppercase;letter-spacing: 10px;text-indent: 10px;margin: 95px auto 50px auto;
}.form-box input {width: 300px;height: 30px;background: transparent;text-indent: 8px;border: none;outline: none;border-bottom: 1px solid rgba(255, 255, 255, 0.8);color: #fff;margin: 15px auto;
}.form-box input::placeholder {color: rgba(255, 255, 255, 0.8);
}.form-box button {width: 300px;height: 40px;margin: 35px auto 40px auto;border: none;background: #00addd;color: #fff;border-radius: 8px;letter-spacing: 20px;text-indent: 20px;font-weight: bold;cursor: pointer;
}.form-box button:hover {background: #0098d4;
}.form-box span {font-size: 14px;color: #fff;
}.form-box a {color: #00addd;text-decoration: none;
}@keyframes move {0% {transform: rotate(0deg) translateZ(-500px);}100% {transform: rotate(90deg) translateZ(500px);}
}

实现思路拆分

* {margin: 0;padding: 0;
}

这段代码是将所有元素的外边距和内边距都设置为0,以便更好地控制页面布局。

body {height: 100vh;display: flex;justify-content: center;align-items: center;background-color: #000;overflow: hidden;
}

这段代码设置了body元素的样式,将其高度设置为100vh,即占据整个视口的高度。使用flex布局,将其子元素水平和垂直居中。设置背景颜色为黑色,同时隐藏溢出部分。

.container {perspective: 5px;perspective-origin: 50% 50%;
}

这段代码设置了一个容器元素,使用perspective属性设置了透视距离为5px,使得其子元素具有3D效果。perspective-origin属性设置了透视点的位置,这里设置为容器中心。

.wrap {position: absolute;width: 1000px;height: 1000px;left: -500px;top: -500px;transform-style: preserve-3d;animation: move 20s linear infinite;
}

这段代码设置了一个包裹元素,使用绝对定位,将其左上角定位到容器中心。设置了宽度和高度为1000px,使其能够完全覆盖整个容器。使用transform-style属性设置了子元素的变换方式为保留3D效果。使用animation属性设置了动画效果,调用了名为move的动画,持续时间为20秒,线性运动,无限循环。

.wall {position: absolute;width: 100%;height: 100%;background: url("../images/space1.jpg") no-repeat;background-size: cover;
}

这段代码设置了一个墙体元素,使用绝对定位,宽度和高度都为100%,使其完全覆盖包裹元素。使用background属性设置了背景图片为space1.jpg,使用no-repeat属性使其不重复,使用background-size属性设置了背景图片的大小为cover,使其完全覆盖墙体元素。

.wall-top {transform: rotateX(90deg) translateZ(500px);
}.wall-bottom {transform: rotateX(-90deg) translateZ(500px);
}.wall-left {transform: rotateY(-90deg) translateZ(500px);
}.wall-right {transform: rotateY(90deg) translateZ(500px);
}.wall-back {transform: rotateX(180deg) translateZ(500px);
}

这段代码设置了墙体元素的不同面,使用transform属性设置了旋转和平移变换,使其具有3D效果。其中,rotateX表示绕X轴旋转,rotateY表示绕Y轴旋转,translateZ表示沿Z轴平移。这些变换的参数可以根据需要进行调整,以达到最佳效果。

.form-box {position: relative;background-color: rgba(255, 255, 255, 0.1);width: 400px;height: 550px;border-radius: 15px;border-top: 1px solid rgba(255, 255, 255, 0.5);border-left: 1px solid rgba(255, 255, 255, 0.5);display: flex;align-items: center;flex-direction: column;backdrop-filter: blur(20px);box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5);
}

这段代码设置了一个登录框元素,使用相对定位,使其相对于包裹元素进行定位。设置了背景颜色为半透明白色,宽度和高度分别为400px和550px,设置了圆角边框和边框阴影。使用flex布局,将其子元素垂直居中,并设置了主轴方向为垂直方向。使用backdrop-filter属性设置了模糊效果,使其看起来更加美观。

.form-box .tit {color: #fff;font-size: 40px;font-weight: bold;text-transform: uppercase;letter-spacing: 10px;text-indent: 10px;margin: 95px auto 50px auto;
}

这段代码设置了登录框中的标题元素,使用了选择器来选择.form-box元素下的.tit元素。设置了字体颜色为白色,字体大小为40px,字体加粗,文本转换为大写,字母间距为10px,首行缩进为10px,上下左右的外边距分别为95px、auto、50px、auto,使其居中并与其他元素有一定的间距。

.form-box input {width: 300px;height: 30px;background: transparent;text-indent: 8px;border: none;outline: none;border-bottom: 1px solid rgba(255, 255, 255, 0.8);color: #fff;margin: 15px auto;
}

这段代码设置了登录框中的输入框元素,设置了宽度和高度分别为300px和30px,背景为透明,文本缩进为8px,去掉了边框和外边距,设置了底部边框为白色半透明,字体颜色为白色,上下外边距为15px,左右外边距为auto,使其居中并与其他元素有一定的间距。

.form-box input::placeholder {color: rgba(255, 255, 255, 0.8);
}

这段代码设置了输入框的占位符文本的样式,设置了字体颜色为白色半透明,使其与输入框的背景颜色相似。

.form-box button {width: 300px;height: 40px;margin: 35px auto 40px auto;border: none;background: #00addd;color: #fff;border-radius: 8px;letter-spacing: 20px;text-indent: 20px;font-weight: bold;cursor: pointer;
}

这段代码设置了登录框中的提交按钮元素,设置了宽度和高度分别为300px和40px,上下外边距为35px和40px,左右外边距为auto,使其居中并与其他元素有一定的间距。去掉了边框,设置了背景颜色为蓝色,字体颜色为白色,设置了圆角边框和字母间距,使其看起来更加美观。设置了鼠标指针为手型,表示该元素可以被点击。

.form-box button:hover {background: #0098d4;
}

这段代码设置了按钮元素在鼠标悬停时的样式,将背景颜色改为深蓝色,使其看起来更加醒目。

.form-box span {font-size: 14px;color: #fff;
}

这段代码设置了登录框中的提示文本元素的样式,设置了字体大小为14px,字体颜色为白色。

.form-box a {color: #00addd;text-decoration: none;
}

这段代码设置了登录框中的链接元素的样式,设置了字体颜色为蓝色,去掉了下划线。

@keyframes move {0% {transform: rotate(0deg) translateZ(-500px);}100% {transform: rotate(90deg) translateZ(500px);}
}

这段代码定义了一个名为move的动画,使用了@keyframes规则。在0%时刻,设置了旋转角度为0度,沿Z轴平移-500px,使其位于包裹元素的后面。在100%时刻,设置了旋转角度为90度,沿Z轴平移500px,使其位于包裹元素的前面。这样就实现了一个不断旋转的3D效果。

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

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

相关文章

sql sever 存储过程不能请求https的解决方案

此错误的原因&#xff0c;通常是因为SQL Server默认不允许非加密的HTTP请求。为了解决这个问题&#xff0c;需要配置SQL Server允许非密码的https请求&#xff0c;或者使用密码的http请求。 下面是配置SQL Server允许非加密http请求 UsE [master] ;Go EXEC sp_configure Sh…

【Linux】进程间通信_3

文章目录 七、进程间通信1. 进程间通信分类命名管道 未完待续 七、进程间通信 1. 进程间通信分类 命名管道 管道应用的一个限制就是只能在具有共同祖先&#xff08;具有亲缘关系&#xff09;的进程间通信。如果我们想在不相关的进程之间交换数据&#xff0c;可以使用FIFO文件…

详细分析Oracle中的tnsnames.ora基本知识 以及 PLSQL如何连接(附Demo)

目录 1. tnsnames.ora2. Demo3. 实战 1. tnsnames.ora Oracle 数据库网络配置文件&#xff0c;用于配置客户端与数据库服务器之间的连接 定义网络服务名称&#xff0c;客户端可以使用这些名称连接到数据库实例 基本的路径如下&#xff1a; Windows: ORACLE_HOME\network\ad…

QThread 与QObject::moveToThread利用Qt事件循环在子线程执行多个函数

1. QThread的两种用法 第一种用法就是继承QThread&#xff0c;然后覆写 virtual void run()&#xff0c; 这种用法的缺点是不能利用信号槽机制。 第二种用法就是创建一个线程&#xff0c;创建一个对象&#xff0c;再将对象moveToThread, 这种可以充分利用信号槽机制&#xff…

199.罗马数字转整数(力扣)

代码解决 class Solution { public:// 定义一个哈希表来存储罗马数字符号及其对应的整数值unordered_map<char, int> res {{I, 1},{V, 5},{X, 10},{L, 50},{C, 100},{D, 500},{M, 1000},};// 将罗马数字字符串转换为整数的函数int romanToInt(string s) {int num 0; …

ElasticSearch安装、配置详细步骤

一、环境及版本介绍 操作系统&#xff1a; Windows 10 软件版本&#xff1a; elasticsearch-7.17.22、kibana-7.17.22、IK-7.17.22 开发环境选择软件版本应提前考虑正式系统得环境&#xff0c;否则会产生软件与服务器环境不兼容得问题出现&#xff0c;ElasticSearch与环境支…

【机器学习300问】132、自注意力机制(Self-Attention)和传统注意力机制(Attention)的区别?

最近学习注意力机制的时候&#xff0c;发现相同的概念很多&#xff0c;有必要给这些概念做一下区分&#xff0c;不然后续的学习可能会混成一团。本文先区分一下自注意力机制和传统注意力机制。我会先直接给出它们之间有何区别的结论&#xff0c;然后通过一个例子来说明。 一、…

【C++题解】1711. 输出满足条件的整数1

问题&#xff1a;1711. 输出满足条件的整数1 类型&#xff1a;简单循环 题目描述&#xff1a; 有这样的两位数&#xff0c;其十位上的数字比个位上的数字要大&#xff0c;且十位和个位上的数字之和为偶数&#xff0c;请找出所有的满足条件的 2 位数。 输入&#xff1a; 无。…

Unity的Excel转表工具

该Excel工具主要由Python语言完成&#xff0c;版本为3.x 主要功能&#xff1a; 1.转换后的数据存储结构为二进制。 2.excel文件可以选择多种数据类型&#xff1a;int、float、string、一维&#xff08;int、float、string&#xff09;、二维int、Map&#xff08;int/int、in…

Hive基础知识(十九):Hive 自定义函数

1. 自定义函数 1&#xff09;Hive 自带了一些函数&#xff0c;比如&#xff1a;max/min 等&#xff0c;但是数量有限&#xff0c;自己可以通过自定义 UDF 来方便的扩展。 2&#xff09;当 Hive 提供的内置函数无法满足你的业务处理需要时&#xff0c;此时就可以考虑使用用户自…

OpenFeign 的请求处理流程

流程 1. 定义 Feign 客户端接口 首先&#xff0c;开发者需要定义一个 Feign 客户端接口&#xff0c;并使用 FeignClient 注解进行配置。例如&#xff1a; FeignClient(name "aService", url "http://localhost:8080") public interface ServiceProvid…

Python | Leetcode Python题解之第169题多数元素

题目&#xff1a; 题解&#xff1a; class Solution:def majorityElement(self, nums: List[int]) -> int:count 0candidate Nonefor num in nums:if count 0:candidate numcount (1 if num candidate else -1)return candidate

linux下编译安装python3

目录 一、注意事项 二、安装前依赖安装 三、下载python3 四、编译安装 五、查看是否安装成功 一、注意事项 linux下一般会自带python2&#xff0c;很多程序会依赖python2,所以要在python2基础上安装python3 二、安装前依赖安装 yum -y install zlib* yum install libffi-d…

【漏洞复现】用友 U9 PatchFile.asmx 任意文件上传漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

互联网应用主流框架整合之Spring Boot开发

Spring Boot数据库开发 通常SpringBoot数据库开发&#xff0c;会引入spring-boot-starter-jdbc&#xff0c;而如果引入了spring-boot-starter-jdbc&#xff0c;但没有可用的数据源或者没有配置&#xff0c;那么在运行Spring Boot时会出现异常&#xff0c;因为spring-boot-star…

微积分-导数2(导数函数)

在前面的部分中&#xff0c;我们考虑了函数 f f f在固定点 a a a处的导数&#xff1a; f ′ ( a ) lim ⁡ h → 0 f ( a h ) − f ( a ) h \begin{equation}f(a) \lim_{h \to 0} \frac{f(ah) - f(a)}{h}\end{equation} f′(a)h→0lim​hf(ah)−f(a)​​​ 如果我们将等式中…

Redis持久化(RDB、AOF)详解

Redis持久化详解 一、Redis为什么需要持久化&#xff1f; Redis 是一个基于内存的数据库&#xff0c;拥有极高的读写性能&#xff0c;但是内存中的数据在断电或服务器重启时会全部丢失&#xff0c;因此需要一种持久化机制来将数据保存到硬盘上&#xff0c;以便在需要时进行恢复…

华为数通——STP-RSTP-MSTP生成树

STP 为了提高网络可靠性&#xff0c;交换机之间常常会进行设备冗余&#xff08;备份&#xff09;&#xff0c;但这样会给交换网络带来环路风险&#xff0c;导致广播风暴以及MAC地址表不稳定等问题。 STP&#xff1a;生成树协议的作用就是为了解决避免二层环路&#xff0c;解决…

STM32 DAC模块的应用(FW_F1_V1.8.5)

目录 概述 1 STM32Cube配置项目 1.1 软件版本信息 1.2 配置DAC模块参数 1.3 GENERATE Project 2 DAC库函数介绍 2.1 初始化函数&#xff1a;HAL_DAC_Init 2.2 启动DAC数据转换&#xff1a;HAL_DAC_Start 2.3 停止DAC数据转换&#xff1a;HAL_DAC_Stop 2.4 设置通道数…

CentOS停止维护,如何应对?

一、事件背景 2020年12月08日&#xff0c;CentOS官方宣布了停止维护CentOS Linux的计划&#xff0c;并推出了CentOS Stream项目。 更多信息&#xff0c;请参见CentOS官方公告。 版本变化说明CentOS 9不再支持新的软件和补丁更新CentOS 82021年12月31日停止维护服务CentOS 720…