HTML+CSS 3D旋转登录表单

news2024/12/25 9:54:51

效果演示

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.coloradmin.cn/o/1859743.html

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

相关文章

TMC2209驱动模式详解

TMC2209驱动模式详解 1.TMC2209封装2.TMC2209引脚定义 1.TMC2209封装 2.TMC2209引脚定义

关于ONLYOFFICE8.1版本桌面编辑器测评——AI时代的领跑者

关于作者&#xff1a;个人主页 目录 一.产品介绍 1.关于ONLYOFFICE 2.关于产品的多元化功能 二.关于产品体验方式 1.关于套件的使用网页版登录 2.关于ONLYOFFICE本地版 三.关于产品界面设计 四.关于产品文字处理器&#xff08;Document Editor&#xff09; 1.电子表格&a…

破碎的像素地牢探险:游戏分享

软件介绍 《破碎的像素地牢》是开源一款地牢冒险探索类的游戏&#xff0c;融合了日系RPG经典风格&#xff0c;玩家将控制主角进行未知场景的探索。除了经典地牢玩法外&#xff0c;游戏还添加了更多创意内容&#xff0c;如黑屏状态前的挑战性等&#xff0c;使得游戏更加富有挑战…

【源码】Spring Data JPA原理解析之Auditing执行原理

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 5、Spring Data JPA自定…

C#的无边框窗体项目模板 - 开源研究系列文章

继续整理和编写代码及博文。 这次将笔者自己整理的C#的无边框窗体项目的基本模板进行总结&#xff0c;得出了基于C#的.net framework的Winform的4个项目模板&#xff0c;这些模板具有基本的功能&#xff0c;即已经初步将代码写了&#xff0c;直接在其基础上添加业务代码即可&am…

Maya 白膜渲染简单教程

零基础渲染小白&#xff0c;没关系&#xff0c;一篇超简单教程带你学会渲染白膜。 先打开Maya&#xff0c;看看面板有没有渲染器&#xff0c;这里以Arnold为主。 要是没有这个&#xff0c;就去找插件管理器&#xff0c; Arnold的是mtoa&#xff0c;在搜索栏搜&#xff0c;然后把…

uni-app 微信小程序开发到发布流程

1. uni-app 微信小程序开发到发布流程 1.1. 新建一个uni-app 项目 1.2. 发行微信小程序 1.3. 微信开发者平台的微信小程序appid 复制进来&#xff08;点击发行&#xff09; 1.4. IDE may already started at port xxxx, trying to connect &#xff08;1&#xff09;关闭微信…

【Golang - 90天从新手到大师】Day14 - 方法和接口

一&#xff0e; go方法 go方法&#xff1a;在函数的func和函数名间增加一个特殊的接收器类型&#xff0c;接收器可以是结构体类型或非结构体类型。接收器可以在方法内部访问。创建一个接收器类型为Type的methodName方法。 func (t Type) methodName(parameter list) {}go引入…

解析JavaScript中逻辑运算符和||的返回值机制

本文主要内容&#xff1a;了解逻辑运算符 &&&#xff08;逻辑与&#xff09;和 ||&#xff08;逻辑或&#xff09;的返回值。 在JavaScript中&#xff0c;逻辑运算符 &&&#xff08;逻辑与&#xff09;和 ||&#xff08;逻辑或&#xff09;的返回值可能并不总…

大模型之-Seq2Seq介绍

大模型之-Seq2Seq介绍 1. Seq2Seq 模型概述 Seq2Seq&#xff08;Sequence to Sequence&#xff09;模型是一种用于处理序列数据的深度学习模型&#xff0c;常用于机器翻译、文本摘要和对话系统等任务。它的核心思想是将一个输入序列转换成一个输出序列。 Seq2Seq模型由两个主…

【仿真建模-anylogic】MarkupSegment代码解析

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-25 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 类图 2. 代码解析 //***********************核心字段************************ // MarkupSegment起点坐标 double startX; double…

MySQL如何实现事务特性

目录 事务有那些特性 原子性如何实现 持久性如何实现 隔离性与一致性如何实现 事务有那些特性 事务是由MySQL的引擎 InnoDB 来实现的 事务的特性 : 原子性 不存在中间状态,要么完成,要么不完成 一致性 事务操作前和操作后,数据满足完整性的约束,数据库保持一致的状态…

mac鼠标和触摸屏单独设置滚动方向

引言&#xff1a;mac很好用&#xff0c;但是外接鼠标的滚动方向和win不一样&#xff0c;总有点不习惯。于是想要设置一下&#xff0c;当打开设置&#xff0c;搜索鼠标时&#xff0c;将“自然滚动”取消&#xff0c;就可以更改了。 问题&#xff1a;但触摸屏又不好用了。 原因&a…

VBA递归过程快速组合数据

实例需求&#xff1a;数据表包含的列数不固定&#xff0c;有的列&#xff08;数量和位置不固定&#xff09;包含组合数据&#xff0c;例如C2单元格为D,P&#xff0c;说明Unit Config有两种分别为D和P&#xff0c;如下图所示。 现在需要将所有的组合罗列出来&#xff0c;如下所示…

模块化沙箱结合零信任实现一机两用解决方案

为实现数据防泄露的各类型市场需求以及“一机两用”标准落地&#xff0c;依靠十几年的沙箱技术积累&#xff0c;研发出了支持多平台的模块化沙箱&#xff0c;配合零信任SDP网关&#xff0c;提高数据安全&#xff0c;实现“一机两用”安全解决方案。 产品特点 -自2008年开始已…

奇点临近:人类与智能时代的未来

在信息爆炸的时代&#xff0c;我们每天都被海量的信息所淹没&#xff0c;如何才能在这个嘈杂的世界中找到真正有价值的信息&#xff1f;如何才能利用信息的力量&#xff0c;提升我们的认知水平&#xff0c;重塑我们的未来&#xff1f; 这些问题的答案&#xff0c;或许都能在雷…

基于MindSpore Quantum的Grover搜索算法和龙算法

如果你听过量子计算&#xff0c;那么你一定听说过Grover搜索算法。1996年&#xff0c;Lov Grover [1] 提出了Grover搜索算法&#xff0c;它是一种利用量子状态的叠加性进行并行计算并实现加速的算法。Grover搜索算法被公认为是继Shor算法后的第二大量子算法&#xff0c;也是第一…

【仿真建模-解析几何】求有向线段上距指定点最近的坐标

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-25 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 问题描述&#xff1a; 有向线段起点A为&#xff08;x1&#xff0c;y1&#xff09;&#xff0c;终点B为&#xff08;x2&#xff0c;y2&a…

图片详解 —— 二维树状数组

\qquad 想要完全理解二维树状数组&#xff0c;要先完全理解一维树状数组。这里给大家推荐一个视频&#xff1a;五分钟丝滑动画讲解 | 树状数组。建议大家先看一遍视频再来看下面的讲解。 \qquad 在一维树状数组中&#xff0c; t r e [ i ] tre[i] tre[i] 可以理解为以 i i i 为…

MySQL集群高可用架构之双主双活+keepalived

该教程再linux系统下 从部署单台mysql -->到部署两台双主mysql-->再到安装keepalived-->整体测试 从而实现mysql双主双活高可用的目标。 改文档由本人亲自部署搭建一步一步编写而来&#xff0c;实属不易&#xff0c;如对您有所帮助&#xff0c;请收藏点个赞&#x…