记录--css水滴登录界面

news2024/11/22 9:28:24

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

前言

今天我们来分享一款非常有趣的登录界面,它使用HTML和CSS制作,具有动态的水波纹效果,让用户在登录时感受到了一股清凉之感。

基本html框架

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="water.css">
    <link rel="stylesheet" href="form.css">
</head>

<body>
    <div class="main">
        <form>
            <p>用户名<br />
                <input type="text" class="textinput" placeholder="请输入用户名" />
            </p>
            <p>密码<br />
                <input type="password" class="textinput" placeholder="请输入密码" />
            </p>
            <p>
                <input id="remember" type="checkbox" /><label for="smtxt">记住密码</label>
            </p>
            <p>
                <input type="submit" value="登录" />
            </p>
            <p class="txt">还没有账户?<a href="#">注册</a></p>
        </form>
    </div>
</body>
</html>

首先,我们来看HTML代码。这个登录界面包含一个表单,用户需要在表单中输入用户名和密码。我们使用p标签创建输入框,并设置class属性以便后续的CSS样式设置。此外,我们还在表单中添加了一个“记住密码”的复选框和一个登录按钮,同时还有一个注册链接。

表单样式

form{            
    opacity: 0.8;
    text-align: center;
    padding: 0px 100px;
    border-radius: 10px;
    margin: 120px auto;
}

p {
  -webkit-text-stroke: 1px #8e87c3;
}

对表单整体进行样式定义,使其位于水滴内部,p标签内文镂空。

.textinput{
    height: 40px;
    font-size: 15px;
    width: 100px;
    padding: 0 35px;
    border: none;
    background: rgba(250, 249, 249, 0.532);
    box-shadow: inset 4px 4px 10px rgba(160, 162, 158, 0.814), 4px 4px 10px rgba(117, 117, 117, 0.3), 15px 15px 30px rgba(72, 70, 70, 0.193), inset -2px -2px 10px rgba(255, 254, 254, 0.873);
    border-radius: 50px;
    -webkit-text-stroke: 0px;
    color: saddlebrown;
    outline-style: none;
}

对输入框进行样式定义,取消镂空字体样式,取消轮廓线,设置阴影实现水滴一般效果。

input[type="submit"]{
    width: 110px;
    height: 40px;
    text-align: center;
    outline-style: none;
    border-style: none;
    border-radius: 50px;
    background: rgb(31, 209, 218);
    -webkit-text-stroke: 0px;
    box-shadow: inset 4px 4px 10px rgba(160, 162, 158, 0.814), 4px 4px 10px rgba(117, 117, 117, 0.3), 15px 15px 30px rgba(72, 70, 70, 0.193), inset -2px -2px 10px rgba(255, 254, 254, 0.873);
}

我们使用了input[type="submit"] 选择器来选中提交按钮,并设置了按钮的大小、文本对齐方式、圆角和背景等样式,去除了轮廓线。同样采用了阴影来设置按钮,使其具有气泡一般的感觉,并设置背景色。

input[type="submit"]:hover {
    background-color: rgb(31, 218, 78);
}

这段代码是用来为按钮添加鼠标悬停效果的。我们使用了input[type="submit"]:hover选择器来选中鼠标悬停在按钮上时的状态,并设置了背景颜色。当用户悬停在按钮上时,按钮的背景颜色会改变,非常引人注目。

a {
    text-decoration: none;
    color: rgba(236, 20, 20, 0.433);
    -webkit-text-stroke: 1px;
}

a:hover {
    text-decoration: underline;
}

提交按钮底部注册文字样式,采用镂空字体样式,鼠标移至该元素上方时,添加下划线。

* {
    margin: 0;
    padding: 0;
}
body {
    background: skyblue;
}

这段代码是对所有元素的外边距和内边距进行清零,以便更好地控制元素的位置和大小,设置了整个页面的背景颜色为天蓝色。

.main {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    width: 400px;
    height: 400px;
    box-sizing: border-box;
    border-radius: 50%;
    background: transparent;
    box-shadow: inset 15px 10px 40px rgba(158, 158, 158, 0.303), 10px 10px 20px rgba(117, 117, 117, 0.3), 15px 15px 30px rgba(72, 70, 70, 0.193), inset -10px -10px 20px rgba(233, 229, 229, 0.873);
    animation: move 6s linear infinite;
}
这段代码采用绝对定位,以便更好地控制它的位置。 left: 50%; top: 50%; 将元素的左上角定位在页面的中心位置。通过transform属性将元素向左上角移动50%,以便让元素的中心位置与页面中心位置重合。设置元素的宽度和高度为400像素。 background: transparent; 将元素的背景设置为透明色。 box-shadow: inset 15px 10px 40px rgba(158, 158, 158, 0.303), 10px 10px 20px rgba(117, 117, 117, 0.3), 15px 15px 30px rgba(72, 70, 70, 0.193), inset -10px -10px 20px rgba(233, 229, 229, 0.873); 设置元素的阴影效果,包括内阴影和外阴影。 animation: move 6s linear infinite; 为元素添加动画效果,其中move 是动画名称,6s是动画时长,linear是动画速度曲线,infinite是动画循环次数。
.main::after {
    position: absolute;
    content: "";
    width: 40px;
    height: 40px;
    background: rgba(254, 254, 254, 0.667);
    left: 80px;
    top: 80px;
    border-radius: 50%;
    animation: move2 6s linear infinite;
    filter:blur(1px);
}

.main::before {
    position: absolute;
    content: "";
    width: 20px;
    height: 20px;
    background: rgba(255, 255, 255, 0.5);
    left: 130px;
    top: 70px;
    border-radius: 50%;
    animation: move3 6s linear infinite;
    filter:blur(1px);
}
这段代码是对两个小球进行样式定义,将伪元素的定位方式设置为绝对定位,以便更好地控制它的位置,设置伪元素的宽度和高度一个为20px,一个为40px。设置伪元素的背景颜色为半透明白色。 left,top 设置伪元素的左上角定位在主体元素的中心位置,设置伪元素的边框半径为50%,以便将其设置为圆形。 animation: move2 6slinear infinite; 为伪元素添加动画效果,其中 move2 是动画名称,6s 是动画时长,linear 是动画速度曲线,infinite 是动画循环次数,另一个伪元素同理。 接下来是动画定义:
@keyframes move {
    50% {
        border-radius: 42% 58% 49% 51% / 52% 36% 64% 48% ;
    }
    75% {
        border-radius: 52% 48% 49% 51% / 43% 49% 51% 57%  ;
    }
    25% {
        border-radius: 52% 48% 59% 41% / 43% 49% 51% 57%  ;
    }
}

@keyframes move2 {
    25% {
        left: 80px;
        top: 110px;
    }
    50% {
        left: 50px;
        top: 80px;
    }
    75% {
        left: 80px;
        top: 120px;
    }
}

@keyframes move3 {
    25% {
        left: 100px;
        top: 90px;
    }
    50% {
        left: 110px;
        top: 75px;
    }
    75% {
        left: 130px;
        top: 100px;
    }
}
这段代码定义了三个不同的动画,分别是move、move2和move3。 move动画,它控制了元素的边框半径在不同时间点的变化。在这个动画中,元素的边框半径分别在25%、50%和75%的时间点进行了变化。 move2move3动画,控制了一个伪元素的位置在不同时间点的变化。在这个动画中,伪元素的位置分别在25%、50%和75%的时间点进行了变化。

总代码

HTML部分

<div class="main">
        <form>
            <p>用户名<br />
                <input type="text" class="textinput" placeholder="请输入用户名" />
            </p>
            <p>密码<br />
                <input type="password" class="textinput" placeholder="请输入密码" />
            </p>
            <p>
                <input id="remember" type="checkbox" /><label for="remember">记住密码</label>
            </p>
            <p>
                <input type="submit" value="登录" />
            </p>
            <p class="txt">还没有账户?<a href="#">注册</a></p>
        </form>
    </div>

CSS部分

* {
    margin: 0;
    padding: 0;
}

body {
    background: skyblue;
}

.main {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    width: 400px;
    height: 400px;
    box-sizing: border-box;
    border-radius: 50%;
    background: transparent;
    box-shadow: inset 15px 10px 40px rgba(158, 158, 158, 0.303), 10px 10px 20px rgba(117, 117, 117, 0.3), 15px 15px 30px rgba(72, 70, 70, 0.193), inset -10px -10px 20px rgba(233, 229, 229, 0.873);
    animation: move 6s linear infinite;
}

.main::after {
    position: absolute;
    content: "";
    width: 40px;
    height: 40px;
    background: rgba(254, 254, 254, 0.667);
    left: 80px;
    top: 80px;
    border-radius: 50%;
    animation: move2 6s linear infinite;
    filter:blur(1px);
}

.main::before {
    position: absolute;
    content: "";
    width: 20px;
    height: 20px;
    background: rgba(255, 255, 255, 0.5);
    left: 130px;
    top: 70px;
    border-radius: 50%;
    animation: move3 6s linear infinite;
    filter:blur(1px);
}
@keyframes move {
    50% {
        border-radius: 42% 58% 49% 51% / 52% 36% 64% 48% ;
    }
    75% {
        border-radius: 52% 48% 49% 51% / 43% 49% 51% 57%  ;
    }
    25% {
        border-radius: 52% 48% 59% 41% / 43% 49% 51% 57%  ;
    }
}

@keyframes move2 {
    25% {
        left: 80px;
        top: 110px;
    }
    50% {
        left: 50px;
        top: 80px;
    }
    75% {
        left: 80px;
        top: 120px;
    }
}

@keyframes move3 {
    25% {
        left: 100px;
        top: 90px;
    }
    50% {
        left: 110px;
        top: 75px;
    }
    75% {
        left: 130px;
        top: 100px;
    }
}
form{            
    opacity: 0.8;
    text-align: center;
    padding: 0px 100px;
    border-radius: 10px;
    margin: 120px auto;
}

p {
  -webkit-text-stroke: 1px #8e87c3;
}

.textinput{
    height: 40px;
    font-size: 15px;
    width: 100px;
    padding: 0 35px;
    border: none;
    background: rgba(250, 249, 249, 0.532);
    box-shadow: inset 4px 4px 10px rgba(160, 162, 158, 0.814), 4px 4px 10px rgba(117, 117, 117, 0.3), 15px 15px 30px rgba(72, 70, 70, 0.193), inset -2px -2px 10px rgba(255, 254, 254, 0.873);
    border-radius: 50px;
    -webkit-text-stroke: 0px;
    color: saddlebrown;
    outline-style: none;
}

input[type="submit"]{
    width: 110px;
    height: 40px;
    text-align: center;
    outline-style: none;
    border-style: none;
    border-radius: 50px;
    background: rgb(31, 209, 218);
    -webkit-text-stroke: 0px;
    box-shadow: inset 4px 4px 10px rgba(160, 162, 158, 0.814), 4px 4px 10px rgba(117, 117, 117, 0.3), 15px 15px 30px rgba(72, 70, 70, 0.193), inset -2px -2px 10px rgba(255, 254, 254, 0.873);
}
input[type="submit"]:hover {
    background-color: rgb(31, 218, 78);
}

a {
    text-decoration: none;
    color: rgba(236, 20, 20, 0.433);
    -webkit-text-stroke: 1px;
}

a:hover {
    text-decoration: underline;
}

  

本文转载于:

https://juejin.cn/post/7225623397144199228

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

 

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

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

相关文章

营收“新高”盈利“新低”,东软还能“硬起来”吗?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 “2022年是商业环境艰难和动荡的一年。在过去的一年中&#xff0c;东软集团面对经济下行压力、汇率双向波动等诸多外部不确定性因素的影响&#xff0c;特别是第四季度的影响&#xff0c;使得东软的业务和项目节奏被严重拖累…

Spring Security 基本介绍及基础项目搭建

目录 SpringSecurity 框架简介 概要 历史 同款产品对比shiro SpringSecurity 入门案例 创建一个项目 添加一个配置类 运行这个项目 权限管理中的相关概念 SpringSecurity 基本原理 过滤器链 ​编辑 UserDetailsService 接口讲解 PasswordEncoder 接口讲解 Spri…

软件工程(三)-统一过程与敏捷方法

1、统一过程 统一过程也叫UP或者RUP。这种开发方法是在基于构建的方法发展而来&#xff0c;也是基于构建化的思想发展而来。 统一过程的三大特点 用例驱动 在进行软件开发过程中&#xff0c;是用什么驱动力去推动整个过程 用例驱动就是一开始会构建用例&#xff0c;然后一步一…

人脸识别2:InsightFace实现人脸识别Face Recognition(含源码)

目录 1. 前言 2. 项目安装 3. 人脸识别系统 &#xff08;1&#xff09;人脸检测和关键点检测 &#xff08;2&#xff09;人脸校准 &#xff08;3&#xff09;人脸特征提取 &#xff08;4&#xff09;人脸比对(1:1) &#xff08;5&#xff09;人脸搜索(1:N) &#xff08…

【操作系统】文件管理

文章目录 文件管理初识文件的属性文件内部的数据如何组织起来&#xff1f;文件之间应该如何组织起来&#xff1f;操作系统应该向上提供哪些功能&#xff1f;从上往下看&#xff0c;文件应该如何存放在外存&#xff1f;其他需要由操作系统实现的文件管理功能 文件的逻辑结构无结…

【CVPR 2023的AIGC应用汇总(8)】3D相关(编辑/重建/生成) diffusion扩散/GAN生成对抗网络方法...

【CVPR 2023的AIGC应用汇总(7)】face相关&#xff08;换脸/编辑/恢复&#xff09; diffusion扩散/GAN生成对抗 【CVPR 2023的AIGC应用汇总(6)】医学图像diffusion扩散/GAN生成对抗网络 【CVPR 2023的AIGC应用汇总(5)】语义布局可控生成&#xff0c;基于diffusion扩散/GAN生成对…

Java数据库项目之满汉楼

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/java-tutorial 】或者公众号【AIShareLab】回复 java 也可获取。 文章目录 程序框架图代码实现数据库Java多表查询思路 程序框架图 代码实现 数据库 -- 创建满汉楼的数据库 CREATE DATABASE mhl -…

输入输出IO流

文章目录 1.数据源2.流3.IO流的分类4.字节流4.1文件字节输入流1. FileInputStream类概述2. FileInputStream类构造方法3. FileInputStream类常用方法 4.2文件字节输出流1. FileOutputStream类概述2. FileOutputStream类构造方法3. FileOutputStream类常用方法 5字符流5.1. File…

philsolophy of life: blessing in disguise

有个成语叫: "塞翁失马" , 这个讲的是在战国时期&#xff0c;有个叫"塞翁"的老人养了很多马&#xff0c;有一天他丢了一匹马&#xff0c;邻居来劝说他&#xff0c;不要着急&#xff0c;说不定哪天就回来了&#xff0c;"丢了一匹马或许是好事&#xf…

【壁纸小程序】推荐一款壁纸小程序

壁纸很多 直接在手机切换下载即可 感兴趣的朋友可以看看 小程序二维码

第五章 介绍Productions - 业务流程和业务逻辑

文章目录 第五章 介绍Productions - 业务流程和业务逻辑业务流程和业务逻辑介绍业务流程的类型数据转换业务规则 第五章 介绍Productions - 业务流程和业务逻辑 业务流程和业务逻辑 本章描述业务流程中支持的逻辑种类。 介绍 业务流程是production的中间部分。它们接受来自…

Spring【Again】——复杂POJO的绑定

简单介绍&#xff1a; Again系列是将之前的内容我认为做的不好的地方或者是理解不到位的地方再来一次&#xff0c;加深记忆或者改错。我们就在来复习一下之前我们说过的复杂类型的数据绑定。 先来复习一下简单数据绑定&#xff1a; 简单数据绑定就是我们在传递参数的时候&am…

京东jd商品详情API接口(item_get-根据ID取商品详情)代码封装

item_get-根据ID取商品详情接口 通过代码封装该接口可以拿到商品标题&#xff0c;商品价格&#xff0c;商品促销信息&#xff0c;商品优惠价&#xff0c;商品库存&#xff0c;sku属性&#xff0c;商品图片&#xff0c;desc图片&#xff0c;desc描述&#xff0c;sku图片&#xf…

文件上传下载系列——大文件分片上传

文章目录 概述实现步骤&#xff1a;应用场景 代码实操&#xff1a;前端&#xff1a;文件切片&#xff1a;分片上传&#xff1a; 后端&#xff1a;校验和保存&#xff1a;合并文件片段&#xff1a;完成上传&#xff1a; 总结优点&#xff1a;缺点&#xff1a; 升华 概述 文件分片…

spring cache和SpEL表达式

spring cache的 CachePut如果方法体内容变了,缓存还有效吗 当使用CachePut注解时&#xff0c;其目的是更新缓存&#xff0c;即在方法执行完毕后将返回结果加入缓存中。如果方法体内容发生变化&#xff0c;则更新后的结果会被加入缓存中&#xff0c;而缓存中原来的数据会被替换…

ORACLE 新闻速递 ORACLE 23C 免费提供给开发者 为什么???

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

利用AI将脑信号解码为神经义肢控制

机器学习和人工智能的快速发展&#xff0c;它们已经产生了一系列能够学习大量数据之间复杂非线性关系的神经网络模型。深度学习算法在各种应用中取得了巨大的成功&#xff0c;包括计算机视觉、自然语言处理和机器人类等。最近&#xff0c;神经网络的中一项引人注目的应用是通过…

B 站构建实时数据湖的探索和实践

摘要&#xff1a;本文整理自 bilibili 大数据实时团队资深开发工程师周晖栋&#xff0c;在 Flink Forward Asia 2022 实时湖仓专场的分享。本篇内容主要分为四个部分&#xff1a; 1. 背景和痛点 2. 场景探索 3. 基建优化 4. 总结和展望 Tips&#xff1a;点击「阅读原文」查看原…

VMware之esxcli命令

一、esxcli命令简介 esxcli命令是用于管理VMware ESXi主机的命令行实用程序。它允许管理员在主机上执行各种管理任务&#xff0c;如配置网络设置、存储、虚拟机等。实际上我们在控制台的所有操作最终都会转换为命令在后台执行。以下是一些常见的esxcli命令&#xff1a; esxcli…

第三章 存储系统

1. 主存简单模型和寻址概念 存储器芯片的基本结构 寻址 2.存储器RAM 两种RAM的比较 DRAM的刷新 3.ROM(只读存储器) 为什么需要ROM&#xff1f; 因为RAM里面的数据容易丢失。 4.存储器基本概念 存储器的分类 性能指标 数据的宽度&#xff1a;在一个存储周期中存储的位数 层…