【CSS+JS】新拟态滑动登录注册页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>【CSS+JS】新拟态滑动登录注册页面</title>
    <link rel="stylesheet" href="./font/iconfont.css">
    <style>
        *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            /* 字体无法选中 */
            user-select: none;
        }

        body{
            width: 100%;
            height: 100vh;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 12px;
            background-color: #ecf0f3;
            color: #a0a5a8;
        }

        .shell{
            position: relative;
            width: 1000px;
            min-width: 1000px;
            min-height: 600px;
            height: 600px;
            background-color: #ecf0f3;
            box-shadow: 10px 10px 10px #d1d9e6,-10px -10px 10px #f9f9f9;
            border-radius: 12px;
            overflow: hidden;
        }

        /* 设置响应式 */
        @media(max-width:1200px){
            .shell{
                transform: scale(0.7);
            }
        }
        @media(max-width:1000px){
            .shell{
                transform: scale(0.6);
            }
        }
        @media(max-width:800px){
            .shell{
                transform: scale(0.5);
            }
        }
        @media(max-width:600px){
            .shell{
                transform: scale(0.4);
            }
        }

        .container{
            display: flex;
            justify-content: center;
            align-items: center;
            position: absolute;
            top: 0;
            width: 600px;
            height: 100%;
            padding: 25px;
            background-color: #ecf0f3;
            transition: 1.25s;
        }

        .form{
            display: flex;
            justify-content: center;
            align-items: center;
            flex-direction: column;
            width: 100%;
            height: 100%;
        }

        .iconfont{
            margin: 0 5px;
            border: rgba(0,0,0,0.5) 2px solid;
            border-radius: 50%;
            font-size: 25px;
            padding: 3px;
            opacity: 0.5;
            transition: 0.1s;
        }

        .iconfont:hover{
            opacity: 1;
            transition: 0.15s;
            cursor: pointer;
        }

        .form_input{
            width: 350px;
            height: 40px;
            margin: 4px 0;
            padding-left: 25px;
            font-size: 13px;
            letter-spacing: 0.15px;
            border: none;
            outline: none;
            background-color: #ecf0f3;
            transition: 0.25s ease;
            border-radius: 8px;
            box-shadow: inset 2px 2px 4px #d1d9e6,inset -2px -2px 4px #f9f9f9;
        }

        .form_input:focus{
            box-shadow: inset 4px 4px 4px #d1d9e6, inset -4px -4px 4px #f9f9f9;
        }

        .form_span{
            margin-top: 30px;
            margin-bottom: 12px;
        }

        .form_link{
            color:#181818;
            font-size: 15px;
            margin-top: 25px;
            border-bottom: 1px solid #a0a5a8;
            line-height: 2;
        }

        .title{
            font-size: 34px;
            font-weight: 700;
            line-height: 3;
            color: #181818;
            letter-spacing: 10px;
        }

        .description{
            font-size: 14px;
            letter-spacing: 0.25px;
            text-align: center;
            line-height: 1.6
        }

        .button{
            width: 180px;
            height: 50px;
            border-radius: 25px;
            margin-top: 50px;
            font-weight: 700;
            font-size: 14px;
            letter-spacing: 1.15px;
            background-color: #4B70E2;
            color: #f9f9f9;
            box-shadow: 8px 8px 16px #d1d9e6, -8px -8px 16px #f9f9f9;
            border: none;
            outline: none;
        }

        .a-container{
            z-index: 100;
            left: calc(100% - 600px);
        }

        .b-container{
            left: calc(100% - 600px);
            z-index: 0;
        }

        .switch{
            display: flex;
            justify-content: center;
            align-items: center;
            position: absolute;
            top: 0;
            left: 0;
            height: 100%;
            width: 400px;
            padding: 50px;
            z-index: 200;
            transition: 1.25s;
            background-color: #ecf0f3;
            overflow: hidden;
            box-shadow: 4px 4px 10px #d1d9e6, -4px -4px 10px #d1d9e6;
        }

        .switch_circle{
            position: absolute;
            width: 500px;
            height: 500px;
            border-radius: 50%;
            background-color: #ecf0f3;
            box-shadow: inset 8px 8px 12px #b8bec7, inset -8px -8px 12px #fff;
            bottom: -60%;
            left: -60%;
            transition: 1.25s;
        }

        .switch_circle-t{
            top: -30%;
            left: 60%;
            width: 300px;
            height: 300px;
        }

        .switch_container{
            display: flex;
            justify-content: center;
            align-items: center;
            flex-direction: column;
            position: absolute;
            width: 400px;
            padding: 50px 55px;
            transition: 1.25s;
        }

        .switch_button:hover,
        .submit:hover{
            box-shadow: 2px 2px 10px #d1d9e6, -6px -6px 10px #f9f9f9;
            transform: scale(0.985);
            transition: 0.25s;
        }

        .switch_button:active,
        .switch_button:focus{
            box-shadow: 2px 2px 6px #d1d9e6, -2px -2px 6px #f9f9f9;
            transform: scale(0.97);
            transition: 0.25s;
        }

        .is-txr{
            left: calc(100% - 400px);
            transition: 1.25s;
            transform-origin: left;
        }

        .is-txl{
            left: 0;
            transition: 1.25s;
            transform-origin: right;
        }

        .is-z{
            z-index: 200;
            transition: 1.25s;
        }

        .is-hidden{
            visibility: hidden;
            opacity: 0;
            position: absolute;
            transition: 1.25s;
        }

        .is-gx{
            animation: is-gx 1.25s;
        }

        @keyframes is-gx{
            0%,
            10%,
            100%{
                width: 400px;
            }

            30%,
            50%{
                width: 500px;
            }
        }
    </style>
</head>
<body>
    <div class="shell">
        <div class="container a-container" id="a-container">
            <form action="" method="" class="form" id="a-form">
                <h2 class="form_title title">创建账号</h2>
                <div class="form_icons">
                    <i class="iconfont icon-QQ"></i>
                    <i class="iconfont icon-weixin"></i>
                    <i class="iconfont icon-bilibili-line"></i>
                </div>
                <span class="form_span">选择注册方式或电子邮箱注册</span>
                <input type="text" class="form_input" placeholder="Name">
                <input type="text" class="form_input" placeholder="Email">
                <input type="text" class="form_input" placeholder="Password">
                <button class="form_button button submit">SIGN UP</button>
            </form>
        </div>
        <div class="container b-container" id="b-container">
            <form action="" method="" class="form" id="b-form">
                <h2 class="form_title title">登入账号</h2>
                <div class="form_icons">
                    <i class="iconfont icon-QQ"></i>
                    <i class="iconfont icon-weixin"></i>
                    <i class="iconfont icon-bilibili-line"></i>
                </div>
                <span class="form_span">选择登录方式或电子邮箱登录</span>
                <input type="text" class="form_input" placeholder="Email">
                <input type="text" class="form_input" placeholder="Password">
                <a class="form_link">忘记密码?</a>
                <button class="form_button button submit">SIGN IN</button>
            </form>
        </div>
        <div class="switch" id="switch-cnt">
            <div class="switch_circle"></div>
            <div class="switch_circle switch_circle-t"></div>
            <div class="switch_container" id="switch-c1">
                <h2 class="switch_title title" style="letter-spacing: 0;">Welcome Back!</h2>
                <p class="switch_description description">已经有账号了嘛,去登入账号来进入奇妙世界吧!!!</p>
                <button class="switch_button button switch-btn">SIGN IN</button>
            </div>
            <div class="switch_container is-hidden" id="switch-c2">
                <h2 class="switch_title title" style="letter-spacing: 0;">Hello Friend!</h2>
                <p class="switch_description description">去注册一个账号,称为尊贵的粉丝会员,让我们踏入奇妙的旅途!</p>
                <button class="switch_button button switch-btn">SIGN UP</button>
            </div>
        </div>
    </div>
</body>
<script>
    let switchCtn = document.querySelector('#switch-cnt');
    let switchC1 = document.querySelector('#switch-c1');
    let switchC2 = document.querySelector('#switch-c2')
    let switchCircle = document.querySelectorAll('.switch_circle')
    let switchBtn = document.querySelectorAll('.switch-btn')
    let aContainer = document.querySelector('#a-container')
    let bContainer = document.querySelector('#b-container')
    let allButtons = document.querySelectorAll('.submit')

    let getButtons = (e) => e.preventDefault()
    let changeForm = (e) => {
        //修改类名
        switchCtn.classList.add("is-gx");
        setTimeout(function(){
            switchCtn.classList.remove("is-gx");
        },1500)
        switchCtn.classList.toggle("is-txr");
        switchCircle[0].classList.toggle("is-txr")
        switchCircle[1].classList.toggle("is-txr")

        switchC1.classList.toggle("is-hidden");
        switchC2.classList.toggle("is-hidden");
        aContainer.classList.toggle("is-txl");
        bContainer.classList.toggle("is-txl");
        bContainer.classList.toggle("is-z");
    }
    //点击切换
    let shell = (e) => {
        for(var i=0; i< allButtons.length;i++)
            allButtons[i].addEventListener("click",getButtons);
        for(var i=0; i<switchBtn.length;i++)
            switchBtn[i].addEventListener("click",changeForm)
    }
    window.addEventListener("load",shell);
</script>
</html>

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的拟态滑动登录注册页面的样式和代码: HTML代码: ``` <div class="container"> <div class="form-container sign-up-container"> <form action="#"> <h1>Create Account</h1> <input type="text" placeholder="Name" /> <input type="email" placeholder="Email" /> <input type="password" placeholder="Password" /> <button>Sign Up</button> </form> </div> <div class="form-container sign-in-container"> <form action="#"> <h1>Sign in</h1> <input type="email" placeholder="Email" /> <input type="password" placeholder="Password" /> <a href="#">Forgot your password?</a> <button>Sign In</button> </form> </div> <div class="overlay-container"> <div class="overlay"> <div class="overlay-panel overlay-left"> <h1>Welcome Back!</h1> <p>To keep connected with us please login with your personal info</p> <button class="ghost" id="signIn">Sign In</button> </div> <div class="overlay-panel overlay-right"> <h1>Hello, Friend!</h1> <p>Enter your personal details and start journey with us</p> <button class="ghost" id="signUp">Sign Up</button> </div> </div> </div> </div> ``` CSS代码: ``` @import url('https://fonts.googleapis.com/css?family=Montserrat:400,800'); * { box-sizing: border-box; } body { background-color: #f6f5f7; font-family: 'Montserrat', sans-serif; } .container { background-color: #fff; border-radius: 10px; box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); position: relative; overflow: hidden; width: 100%; max-width: 1000px; min-height: 560px; } .form-container { position: absolute; top: 0; height: 100%; transition: all 0.6s ease-in-out; } .sign-in-container { left: 0; width: 50%; z-index: 2; } .sign-up-container { left: 0; width: 50%; opacity: 0; z-index: 1; } .overlay-container { position: absolute; top: 0; left: 50%; width: 50%; height: 100%; overflow: hidden; transition: transform 0.6s ease-in-out; z-index: 100; } .overlay { background: #FF416C; /* fallback for old browsers */ background: -webkit-linear-gradient(to right, #FF4B2B, #FF416C); /* Chrome 10-25, Safari 5.1-6 */ background: linear-gradient(to right, #FF4B2B, #FF416C); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ background-repeat: no-repeat; background-size: cover; background-position: 0 0; color: #fff; position: relative; left: -100%; height: 100%; width: 200%; transform: translateX(0); transition: transform 0.6s ease-in-out; } .overlay-panel { position: absolute; top: 0; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 0 40px; height: 100%; width: 50%; text-align: center; transform: translateX(0); transition: transform 0.6s ease-in-out; } .overlay-left { transform: translateX(-20%); } .overlay-right { right: 0; transform: translateX(0); } .form-container.sign-up-container { transform: translateX(100%); opacity: 1; z-index: 2; } .form-container.sign-in-container { transform: translateX(0%); z-index: 1; } .form { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; text-align: center; } form input { background-color: #eee; border: none; padding: 12px 15px; margin: 8px 0; width: 100%; border-radius: 20px; border-bottom: 2px solid #fff; font-family: 'Montserrat', sans-serif; font-weight: 500; } form input:focus { outline: none; border-bottom: 2px solid #FF4B2B; } form button { background-color: #FF4B2B; color: #fff; border: none; border-radius: 20px; padding: 12px 20px; margin: 20px 0; width: 100%; font-family: 'Montserrat', sans-serif; font-weight: 500; cursor: pointer; transition: all 0.3s ease-in-out; } form button:hover { background-color: #fff; color: #FF4B2B; border: 1px solid #FF4B2B; } form button.ghost { background-color: transparent; border-color: #fff; } form a { color: #8e8e8e; font-size: 14px; text-decoration: none; } form a:hover { text-decoration: underline; } .overlay-right .ghost { background-color: #fff; border-color: #fff; color: #FF4B2B; } .overlay-right .ghost:hover { background-color: #FF4B2B; color: #fff; } .overlay-right button { background-color: transparent; border-color: #fff; color: #fff; } .overlay-right button:hover { background-color: #fff; color: #FF4B2B; border-color: #fff; } ``` JavaScript代码: ``` const signUpButton = document.getElementById('signUp'); const signInButton = document.getElementById('signIn'); const container = document.getElementById('container'); signUpButton.addEventListener('click', () => { container.classList.add('right-panel-active'); }); signInButton.addEventListener('click', () => { container.classList.remove('right-panel-active'); }); ``` 以上代码实现了一个拟态滑动登录注册页面,其中包括两个表单(登录和注册),以及一个覆盖整个面的背景和两个覆盖表单的覆盖层。通过点击“Sign Up”或“Sign In”按钮,可以在两个表单之间进行切换,同时覆盖层和背景也会相应地滑动切换。您可以根据需要进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值