记录--基于css3写出的流光登录(注释超详细!)

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

完整效果

对基本的表单样式进行设置

这里设置了基本的表单样式,外层用了div进行包裹,重点是运用了两个i元素在后期通过css样式勾画出一条线没在聚焦文本框的时候线会过度成一个对话框,掩盖掉原本的对话框的形式,很好的一个创意

<body><!-- 搭建基本结构 --><div class="box"><span class="borderLine"></span><!-- 用form提交 --><form><h2>Sign In</h2><div class="inputBox"><!-- required表示文本框必须输入内容,否则则在提交的时候默认提示 --><input type="text" required><!-- 用一个i元素勾画出来一条线,改变其高度形成一个输入框 --><span>User name</span><i></i></div><div class="inputBox"><input type="password" required><!-- 用一个i元素勾画出来一条线,改变其高度形成一个密码框 --><span>Password</span><i></i></div><div class="links"><!-- 用两个a标签写忘记密码和注册按钮 --><a href="#">Forget password</a><a href="#">Sing up</a></div><input type="submit" value="Login"></form></div>

进行基本的样式清除和设置

这里的对整个body进行了设置,并且清除了默认样式,设置了一些默认样式,将整个body设置为弹性盒并且居中显示,运用了minhight样式 设置 min-height: 100vh; 的元素的高度将至少为浏览器窗口的高度,对最外层的box样式进行了超出部分隐藏,用于后期宣传时候超出盒子部分的隐藏掉,从而显示出来线条流动的效果,同时也对form表单进行了进一步的设置,通过zindx涉及了垂直层叠的顺序显示,且通过弹性盒子的改变主轴方向为y轴

    * {/* 清除默认样式 */margin: 0;padding: 0;font-size: 黑体;/* 设置成ie盒 */box-sizing: border-box;}body {/* 对整整体进行设置 设置为弹性盒子,并且居中 */display: flex;justify-content: center;align-items: center;/* min-height 属性设置元素的最小高度为 100vh。vh 是视口高度的单位,1vh 等于浏览器窗口的高度的 1%。这意味着,设置 min-height: 100vh; 的元素的高度将至少为浏览器窗口的高度 底色设置为黑色*/min-height: 100vh;background: #222;}.box {/* 对整个盒子进行设置 超出部分隐藏用于最后的效果,并且相对定位相对于原本的位置进行定位,以便于子元素根据父元素的位置进行定位  子决父向 */overflow: hidden;position: relative;width: 380px;height: 420px;background: #1c1c1c;border-radius: 8px;}/* 对from进行样式设置 进行绝对定位,相对于上面的box进行定位, */.box form {position: absolute;inset: 4px;/*定位元素边框或内边距的简写属性 设置所有方向的边距为4px 没啥用 */background: #222;padding: 50px 40px;border-radius: 8px;z-index: 2; /* 用于控制元素在垂直层叠顺序中的显示级别 较大的值表示元素在堆叠顺序中更靠前,即位于上层;较小的值表示元素在堆叠顺序中更靠后,即位于下层。 */display: flex;flex-direction: column;/*flex换轴 容器内的元素将在垂直方向上从上至下排列,主轴方向为垂直方向。这意味着元素将在垂直方向上按照从上到下的顺序进行布局,而不是默认的水平方向。*/}

下面对表单里面的各个组件部分进行样式设置,以及聚焦样式

这里呢对表单的各个部件进行了样式的设置,添加了聚焦时候的动画效果,值得一提的是运用了letter-spacing: 0.1em;/* 制文本中字符之间的间距为0.1em 属性应用于

、 以及 元素*/ 同时对文本框进行了定位,设置了位置其中将input标签的背景颜色隐藏了起来是为了后面更好的通过html中i元素勾画出的那条线来撑起来形成文本框做准备,同时也设计了zindex优先级的问题,对login按钮添加了动画样式

.box form h2 {color: #fff;font-weight: 500;text-align: center;/*加粗文字居中 */letter-spacing: 0.1em;/* 制文本中字符之间的间距为0.1em 属性应用于 <p>、<h> 以及 <span> 元素*/}.box form .inputBox {/* 相对于form进行定位 */position: relative;width: 300px;margin-top: 35px;}.box form .inputBox input {/* 相对于.inputBox进行定位 */position: relative;width: 100%;padding: 20px 10px 10px;background: transparent; /*input文本框隐藏起来方便用li标签的那根线撑起来形成文本框仅仅只是展示效果,实际上任然是input文本框 */outline: none;border: none;box-shadow: none; /*阴影设置*/color: #23242a;font-size: 1em;letter-spacing: 0.05em;/* 制文本中字符之间的间距为0.1em 属性应用于 <p>、<h> 以及 <span> 元素*/z-index: 10; /*优先级设置 */transition: 0.3s;}.box form .inputBox span {position: absolute;left: 0;padding: 20px 0px 10px;pointer-events: none;color: #8f8f8f;font-size: 1em;letter-spacing: 0.05em;transition: 0.5s;/*动画过渡*/}.box form .inputBox input:valid~span,/*选择器将选择所有紧跟在有效输入字段后的 <span> 元素。*/.box form .inputBox input:focus~span/*用于选中处于焦点状态的输入字段之后的所有 <span> 元素。*/ {color: #fff;font-size: 0.75em;transform: translateY(-34px);  /*向上移动34个像素*/}

设置i标签的那条白线及其效果

这里呢,通过定位设置好i元素那条线的位置,后将这条白线在聚焦文本框的时候进行高度拉伸,形成效果上变成白色的对话框,要注意,并不是白线拉高变成了对话框,而是白线拉高盖住了原本的对话框,使得视觉上形成了白线变成了对话框,实际上仍然是原来的对话框,仅仅是效果而已

    .box form .inputBox i {position: absolute;  /*相对于inputBox定位,并且在最左和最下面 */left: 0;bottom: 0;width: 100%;height: 2px;background: #fff;border-radius: 5px;overflow: hidden;transition: 0.5s;pointer-events: none;}.box form .inputBox input:valid~i,.box form .inputBox input:focus~i {height: 42px;}

设置下面的忘记密码和注册和登录的的样式

这里针对按钮的样式进行了优化,并且设计了忘记密码这些鼠标样式,

    /* 设置flex a链接的样式 */.box form .links {display: flex;justify-content: space-between;/*容器内的 flex 项目在水平方向上均匀分布,项目之间的间距相等,并且最左侧和最右侧的项目紧贴容器的边界。*/}.box form .links a {margin: 10px 0;font-size: 0.75em;color: #8f8f8f;}/* 移动上去改变颜色 */.box form .links a:hover,.box form .links a:nth-child(2) {color: #fff;}/* 按钮样式 */.box form input[type='submit'] {padding: 9px 25px;background: #fff;cursor: pointer;  /*设置鼠标样式*/font-size: 0.9em;border-radius: 5px;font-weight: 600;width: 80%;margin-top: 10px;margin-left: 30px;}/* 登录按钮点击时透明度为80% */.box form input[type='submit']:active {opacity: 0.8;}

** 重点动画部分 *

定义了一个animate动画,利用从0到100%进行旋转从0到360度

     /* 添加流光动画 */.borderLine {position: absolute;top: 0;inset: 0;}@keyframes animate {0% {transform: rotate(0deg);}100% {transform: rotate(360deg);}}

接下来进行动画的插入 在box和borderlin前后插入伪元素,为动画做准备

因为在上面针对zindex的层级叠加以及外层box盒子超出的部分进行了隐藏,所以你可以看到如下的效果

    .box::before,.box::after,.borderLine::before,.borderLine::after{/* 对box和borderlin前后插入伪元素 为元素content必修有尽管它可以是空 */content: '';position: absolute;top: -50%;left: -50%;width: 380px;height: 420px;/* 使用线性渐变作为伪元素的背景样式。渐变采用了透明到非透明的过渡,具体颜色值会根据动画来变化。 */background: linear-gradient(0deg, transparent, transparent, #45f3ff, #45f3ff, #45f3ff);z-index: 1;/*设置伪元素的层级为 1,使其位于正常文档流之上。位于其他大于一的效果之下从而辅助形成一条线的效果*/transform-origin: bottom right;/*控制元素的旋转、缩放和倾斜等变换效果的起始位置 从右下开始从而形成逆时针效果bottom right*/animation: animate 6s linear infinite; }
当我们把.box里面的overflow:hidden注释掉之后你会发现其本来的样子,实际上就是插入的元素形成了一个盒子,重合的部分形成了那种流光样式的色彩,超出的部分进行隐藏就会出现上述样式的情况

接下来加入剩下的渐变式的背景样式,形成如下效果

      .box::after {animation-delay: -3s;/*动画开始前延迟*/}.borderLine::before {/* 使用线性渐变作为伪元素的背景样式。渐变采用了透明到非透明的过渡,具体颜色值会根据动画来变化。 */background: linear-gradient(0deg, transparent, transparent, #ff2770, #ff2770, #ff2770);animation-delay: -1.5s; /*动画开始前延迟*/}.borderLine::after{/* 使用线性渐变作为伪元素的背景样式。渐变采用了透明到非透明的过渡,具体颜色值会根据动画来变化。 */background: linear-gradient(0deg, transparent, transparent, #ff2770, #ff2770, #ff2770);animation-delay: -4.5s;}

 当我们把.box超出部分隐藏给重新注释回来的时候

最终效果展示

代码已上传gitee

gitee.com/wu-canhua/s…

本文转载于:

https://juejin.cn/post/7259741942409363511

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

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

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

相关文章

【前端】对前端小白极为友好的JS DOM入门文章

在现代web开发中&#xff0c;JavaScript (JS) 是不可或缺的一部分&#xff0c;它使我们能够为网页赋予交互性和动态性。其中&#xff0c;DOM&#xff08;文档对象模型&#xff09;技术在前端开发中起着至关重要的作用。本篇博客将带领前端初学者深入理解JavaScript DOM技术&…

【数据结构】快速排序

快速排序是一种高效的排序算法&#xff0c;其基本思想是分治法。它将一个大问题分解成若干个小问题进行解决&#xff0c;最后将这些解合并得到最终结果。 快速排序的主要思路如下&#xff1a; 选择一个基准元素&#xff1a;从待排序的数组中选择一个元素作为基准&#xff08;…

PAT 1002 A+B for Polynomials

个人学习记录&#xff0c;代码难免不尽人意 Output Specification: For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1…

炼钢工艺流程(2)

1. 轧制单元 更换前后两个工作辊之间的轧制对象称为轧制单元&#xff0c;对应一个轧制计划。两个 支撑辊之间的轧制对象是由多个轧制单元组成&#xff0c;称为轧制单元组&#xff0c;对应多个轧制计 划。 轧制单元的结构 每个计划开始的部分板坯按照宽度非减的方向排列来加热轧…

RISC-V - 小记

文章目录 关于 RISC-V安装 关于 RISC-V RISC : Reduced Instruction Set Computing RISC-V(“RISC five”)的目标是成为一个通用的指令集架构(ISA) 官网&#xff1a;https://riscv.orggithub : https://github.com/riscv 教程 [完结] 循序渐进&#xff0c;学习开发一个RISC-…

35岁体能断崖,裁员热潮,焦虑倍增,你当如何应对?

小明是一个35岁的研发工程师&#xff0c;最近正面临工作压力和身体状况的双重挑战。他在一家大厂工作多年&#xff0c;但由于公司裁员的原因&#xff0c;他也成为了其中的一员。 小明虽然年龄已经不再年轻&#xff0c;但他一直以来都非常注重自己的体能状况。每天早上&#xf…

SpringBoot+AOP+Redission实战分布式锁

文章目录 前言一、Redission是什么&#xff1f;二、使用场景三、代码实战1.项目结构2.类图3.maven依赖4.yml5.config6.annotation7.aop8.model9.service 四、单元测试总结 前言 在集群环境下非单体应用存在的问题&#xff1a;JVM锁只能控制本地资源的访问&#xff0c;无法控制…

elasticSearch常见的面试题

常见的面试问题 描述使用场景 es集群架构3个节点&#xff0c;根据不同的服务创建不同的索引&#xff0c;根据日期和环境&#xff0c;平均每天递增60*2&#xff0c;大约60Gb的数据。 调优技巧 原文参考&#xff1a;干货 | BAT等一线大厂 Elasticsearch面试题解读 - 掘金 设计阶…

Linux中的firewall-cmd

2023年8月4日&#xff0c;周五上午 目录 打开端口关闭端口查看某个端口是否打开查看当前防火墙设置firewall-cmd中的服务在防火墙中什么是服务&#xff1f;为什么会有服务&#xff1f;打开或关闭服务查看某个服务是否打开firewall-cmd中的 zones查看所有可用的zones&#xff0…

k8s手动发布镜像的方法

kubectl edit deploy编辑对应的文件&#xff0c;并:wq!保存即可

LinkedList和ArrayList有什么区别?

ArrayList和LinkedList的大致区别&#xff1a; ArrayList是实现了基于动态数组的数据结构&#xff0c;LinkedList基于链表的数据结构。 对于随机访问get和set&#xff0c;ArrayList觉得优于LinkedList&#xff0c;因为LinkedList要移动指针。 对于新增和删除操作add和remov…

环球数科、BUFFALO面试(部分)

环球数科 系统复杂且需求迭代频繁&#xff0c;如何维护微服务之间的接口调用关系&#xff1f; API接口在设计的时候需要大量的需求文档&#xff0c;而且文档也需要不断维护。如何高效维护API文档就很重要了。以下是一些常见的API管理工具&#xff1a;Swagger&#xff1a;Swag…