广州总部电话:020-85564311
广州总部电话:020-85564311
20年
互联网应用服务商
请输入搜索关键词
知识库 知识库

优网知识库

探索行业前沿,共享知识宝库

HTML&CSS:超好看的登录页面(建议收藏)

发布日期:2025-06-19 15:11:11 浏览次数: 812 来源:前端Hardy

这段HTML和CSS代码实现了一个具有动态效果的登录表单,包含用户名和密码输入框、提交按钮和加载动画。


大家复制代码时,可能会因格式转换出现错乱,导致样式失效。建议先少量复制代码进行测试,若未能解决问题,私信回复源码两字,我会发送完整的压缩包给你。

演示效果

HTML&CSS


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>公众号关注:前端Hardy</title>
    <style>
        @import url("https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,200i,300,300i,400,400i,600,600i,700,700i,900,900i|Monoton");
        @import url("https://fonts.googleapis.com/icon?family=Material+Icons");

        * {
            box-sizing: border-box;
        }

        html {
            font-size14px;
        }

        body {
            backgroundlinear-gradient(to bottom, #68d8d6, #ffffff);
            color#454749;
            display: flex;
            align-items: center;
            justify-content: center;
            font-family"Source Sans Pro", sans-serif;
            min-height100vh;
        }

        h1,
        h2,
        h3,
        h4,
        h5,
        h6 {
            font-family: Monoton, sans-serif;
            margin-bottom0.5rem;
        }

        /**
 * Tiles
 */

        .tile {
            background-color#ffffff;
            border-radius0.1rem;
            box-shadow00.75rem1.5remrgba(0000.2), 00.25rem0.25remrgba(0000.2);
            position: relative;
            width100%;
            min-width320px;
            max-width24rem;
            overflow: hidden;
        }

        .tile.tile-header {
            background-imageurl("https://res.cloudinary.com/dgmilxzy7/image/upload/c_scale,w_500,o_75,b_rgb:07beb8/v1506735375/CodePen/ViddenPixel.jpg");
            background-position: center;
            background-size: cover;
            height12rem;
        }

        .tile.tile-body {
            padding2rem;
        }

        /**
 * Forms
 */

        .form-input {
            display: block;
            position: relative;
            margin-bottom1rem;
        }

        .form-input>.material-icons {
            position: absolute;
            font-size1.5rem;
            top1.2rem;
        }

        .form-input>.material-icons~input,
        .form-input>.material-icons~.label,
        .form-input>.material-icons~.underline {
            margin-left2.25rem;
            widthcalc(100% - 2.25rem);
        }

        .form-inputinput {
            border: none;
            box-shadow: none;
            padding-top1.5rem;
            padding-right0;
            padding-bottom0.5rem;
            padding-left0;
            outline-style: none;
            width100%;
        }

        .form-inputinput~.label {
            color#868e96;
            font-size1rem;
            margin0;
            pointer-events: none;
            position: absolute;
            top1.5rem;
            left0;
            transition: top 0.2s, font 0.2s;
            z-index1;
        }

        .form-inputinput~.underline {
            background-color#bdc1c5;
            height1px;
            width100%;
            position: absolute;
            bottom0;
            left0;
        }

        .form-inputinput:hover~.underline,
        .form-inputinput:focus~.underline {
            background-color#07beb8;
        }

        .form-inputinput:hover~.label,
        .form-inputinput:focus~.label {
            color#07beb8;
        }

        .form-inputinput:focus~.underline {
            height2px;
        }

        .form-inputinput:focus~.label,
        .form-inputinput:valid~.label {
            top0;
            font-size0.85rem;
        }

        .form-inputinput:-webkit-autofill~.label {
            top0;
            font-size0.85rem;
        }

        .btn {
            border-radius0.2rem;
            display: inline-block;
            padding-top0.5rem;
            padding-right1rem;
            padding-bottom0.5rem;
            padding-left1rem;
        }

        .btn,
        [role=button],
        [type=button] {
            -ms-touch-action: manipulation;
            touch-action: manipulation;
            cursor: pointer;
        }

        .btn-irenic {
            background-color#07beb8;
            color: white;
        }

        .btn-irenic:hover,
        .btn-irenic:focus,
        .btn-irenic:active {
            background-color#06a5a0;
        }

        .btn-serene {
            background-color#3dccc7;
            color: white;
        }

        .btn-serene:hover,
        .btn-serene:focus,
        .btn-serene:active {
            background-color#32beb9;
        }

        .btn-tranquil {
            background-color#68d8d6;
            color: white;
        }

        .btn-tranquil:hover,
        .btn-tranquil:focus,
        .btn-tranquil:active {
            background-color#54d3d0;
        }

        .btn-calm {
            background-color#9ceaef;
            color: white;
        }

        .btn-calm:hover,
        .btn-calm:focus,
        .btn-calm:active {
            background-color#86e5eb;
        }

        .btn-cool {
            background-color#c4fff9;
            color: white;
        }

        .btn-cool:hover,
        .btn-cool:focus,
        .btn-cool:active {
            background-color#abfff6;
        }

        .btn-ice {
            background-color#ffffff;
            color: white;
        }

        .btn-ice:hover,
        .btn-ice:focus,
        .btn-ice:active {
            background-color#f2f2f2;
        }

        .btn-base {
            background-color#454749;
            color: white;
        }

        .btn-base:hover,
        .btn-base:focus,
        .btn-base:active {
            background-color#393a3c;
        }

        .clearfix:after {
            content"";
            display: table;
            clear: both;
        }

        .float-right {
            float: right;
        }

        .submit-container {
            position: relative;
        }

        .submit-container#submit {
            position: relative;
            z-index2;
            outline: none;
            opacity1;
            transition: transform 0.1s ease-in, opacity 0.1s ease-in, border-radius 0.1s ease-in;
            right: -1px;
        }

        .submit-container#submitspan {
            opacity1;
            transition: opacity 0.1s ease-in;
        }

        .submit-container#submit.pending {
            transformscale(0.551.5);
            background-color#07beb8;
            border-radius50%;
            opacity1;
        }

        .submit-container#submit.pendingspan {
            opacity0;
        }

        .submit-container#submit.pending~.login-pending {
            opacity1;
            transformscale(11);
            z-index3;
        }

        .submit-container#submit.granted~.login-pending {
            opacity1;
            transformtranslate(-9rem, -11remscale(1818);
            z-index3;
        }

        .submit-container#submit.granted~.login-pending.spinner {
            opacity0;
        }

        .submit-container#submit.granted~.login-pending.login-granted-content {
            opacity1;
        }

        .submit-container.login-pending {
            height3rem;
            width3rem;
            background-color#07beb8;
            position: absolute;
            border-radius50%;
            right1rem;
            bottom: -0.5rem;
            opacity0;
            overflow: hidden;
            transformtranslate(00scale(0.50.5);
            transition: transform 0.2s ease-in, scale 0.2s ease-in;
            z-index1;
        }

        .submit-container.login-pending.login-granted-content {
            background-imageurl(https://res.cloudinary.com/dgmilxzy7/image/upload/c_scale,w_700,o_25,b_rgb:07beb8/v1506735375/CodePen/ViddenPixel.jpg);
            background-position: center;
            background-size: cover;
            color#ffffff;
            display: flex;
            justify-content: center;
            align-items: center;
            height100%;
            width100%;
            opacity0;
            position: absolute;
            top0;
            left0;
            transition: opacity 0.2s ease-in 0.2s;
            text-shadow0px0px20px#ffffff;
        }

        .submit-container.login-pending.login-granted-content.material-icons {
            font-size5px;
            position: relative;
            left1.25px;
        }

        .spinner {
            width3rem;
            height3rem;
            position: relative;
            margin0 auto;
        }

        .spinner.dot1,
        .spinner.dot2 {
            width100%;
            height100%;
            border-radius50%;
            background-color#68d8d6;
            opacity0.6;
            position: absolute;
            top0;
            left0;
            -webkit-animation: dot-bounce 2s infinite ease-in-out;
            animation: dot-bounce 2s infinite ease-in-out;
        }

        .spinner.dot2 {
            -webkit-animation-delay: -1s;
            animation-delay: -1s;
        }

        @-webkit-keyframes dot-bounce {

            0%,
            100% {
                -webkit-transformscale(0);
            }

            50% {
                -webkit-transformscale(1);
            }
        }

        @keyframes dot-bounce {

            0%,
            100% {
                transformscale(0);
                -webkit-transformscale(0);
            }

            50% {
                transformscale(1);
                -webkit-transformscale(1);
            }
        }
    
</style>
</head>

<body>
    <div class="tile">
        <div class="tile-header">
            <h2
                style="color: white; opacity: .75; font-size: 4rem; display: flex; justify-content: center; align-items: center; height: 100%;padding: 0;margin: 0;">

                SIGN IN</h2>
        </div>

        <div class="tile-body">
            <form id="form">
                <label class="form-input">
                    <i class="material-icons">person</i>
                    <input type="text" autofocus="true" required />
                    <span class="label">Username</span>
                    <span class="underline"></span>
                </label>

                <label class="form-input">
                    <i class="material-icons">lock</i>
                    <input type="password" required />
                    <span class="label">Password</span>
                    <div class="underline"></div>
                </label>

                <div class="submit-container clearfix" style="margin-top: 2rem;">
                    <div id="submit" role="button" type="button" class="btn btn-irenic float-right" tabindex="0">
                        <span>SIGN IN</span>
                    </div>

                    <div class="login-pending">
                        <div class=spinner>
                            <span class="dot1"></span>
                            <span class="dot2"></span>
                        </div>

                        <div class="login-granted-content">
                            <i class="material-icons">done</i>
                        </div>
                    </div>
                </div>
            </form>
        </div>
    </div>
    <script>
        var $btn = document.getElementById("submit");
        var $form = document.getElementById("form")
        function signIn({
            if ($form.checkValidity()) {
                $btn.classList.add('pending');
                window.setTimeout(function ({ $btn.classList.add('granted'); }, 1500);
            }
        }
        $btn.addEventListener("click", signIn);
    
</script>
</body>

</html>

HTML 结构

  • tile:定义整个登录表单的容器,包含头部和表单主体。
  • tile-header:定义表单的头部,包含登录标题。
  • tile-body:定义表单的主体部分,包含输入框和提交按钮。
  • form:定义表单,包含用户名和密码输入框。
  • form-input:定义输入框的样式,包含图标、输入框、标签和下划线。
  • submit-container clearfix:定义提交按钮的容器,包含提交按钮和加载动画。
  • submit:定义提交按钮,包含按钮文本。
  • login-pending:定义加载动画的容器,包含加载动画和成功图标。

CSS 样式

  • .btn-irenic:hover:定义按钮在鼠标悬停时的背景颜色变化。
  • .btn-irenic:focus:定义按钮在获取焦点时的背景颜色变化。
  • .btn-irenic:active:定义按钮在被激活时的背景颜色变化。
  • .form-input input:focus~.label:定义输入框在获取焦点时标签的样式变化,包括颜色、位置和字体大小。
  • .form-input input:valid~.label:定义输入框在内容有效时标签的样式变化,包括位置和字体大小。
  • .form-input input:-webkit-autofill~.label:定义输入框在自动填充时标签的样式变化,包括位置和字体大小。
  • .submit-container #submit.pending:定义提交按钮在加载状态时的样式变化,包括缩放、背景颜色、圆角和透明度。
  • .submit-container #submit.pending span:定义提交按钮在加载状态时文本的透明度变化。
  • .submit-container #submit.granted~.login-pending:定义提交按钮在成功状态时加载动画的样式变化,包括透明度和缩放。
  • .submit-container .login-pending:定义加载动画的样式,包括高度、宽度、背景颜色、位置、圆角、透明度和变换效果。
  • .submit-container .login-pending .login-granted-content:定义加载动画成功内容的样式,包括背景图片、文字颜色、显示方式、对齐方式、透明度和文字阴影。
  • .spinner .dot1, .spinner .dot2:定义加载动画圆点的样式,包括宽度、高度、圆角、背景颜色、透明度和动画效果。
  • .spinner .dot2:定义第二个加载动画圆点的动画延迟。
  • @keyframes dot-bounce:定义加载动画的关键帧,包括缩放效果。


优网科技,优秀企业首选的互联网供应服务商

优网科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!

优网科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。优网科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、微信小程序定制开发、移动端应用(手机站APP开发)、微信定制开发(微信官网、微信商城、企业微信)等一系列互联网应用服务。


我要投稿

姓名

文章链接

提交即表示你已阅读并同意《个人信息保护声明》

专属顾问 专属顾问
扫码咨询您的优网专属顾问!
专属顾问
马上咨询
扫一扫马上咨询
扫一扫马上咨询

扫一扫马上咨询