原视频:
https://www.bilibili.com/video/BV1Kh411M779/?spm_id_from=333.880.my_history.page.click
页面展示
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" />
<!-- <meta name="viewport" id="viewportMeta" /> -->
<title>太空风自适应登录页面</title>
<link rel="stylesheet" href="./css/index.css" />
<script src="./js/index.js"></script>
</head>
<body>
<div class="container" id="login-page">
<div class="login-wrapper">
<!-- 左边格言显示 -->
<div class="left-img">
<div class="glass">
<div class="tips">
<div class="title">青玉案</div>
<h2>凌波不过横塘路</h2>
<span>宋·贺铸</span>
<br />
<span>凌波不过横塘路,但目送、芳尘去。</span>
<span>锦瑟华年谁与度?</span>
<span>月桥花院,琐窗朱户,只有春知处。</span>
<br />
<span>飞云冉冉蘅皋暮,彩笔新题断肠句。</span>
<span>试问闲情都几许?</span>
<span>一川烟草,满城风絮,梅子黄时雨。</span>
</div>
</div>
</div>
<!-- 右边登录主要功能 -->
<div class="right-login-form">
<div class="from-wrapper">
<h1>登录页面</h1>
<div class="input-items">
<span class="input-tips"> 账号 </span>
<input type="text" class="inputs" placeholder="请输入您的账号" />
</div>
<div class="input-items">
<span class="input-tips"> 密码 </span>
<input type="password" class="inputs" placeholder="请输入您的密码" />
<span class="forgot">忘记密码?</span>
</div>
<button class="btn">登录</button>
<div class="siginup-tips">
<span>没有账号?</span>
<span>注册</span>
</div>
<div class="other-login">
<div class="divider">
<span class="line"></span>
<span class="divider-text">or</span>
<span class="line"></span>
</div>
<div class="other-login-wrapper">
<div class="other-login-item">
<img src="./resource/img/icon/QQ.png" alt="" />
</div>
<div class="other-login-item">
<img src="./resource/img/icon/WeChat.png" alt="" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
css代码
@font-face {
font-family: 'FZFWZhuZiAYuanJWD';
src: url('../resource/font/FZFWZhuZiAYuanJWD.TTF');
}
* {
padding: 0px;
margin: 0px;
/* font-family: "Aguazyuan", Courier, monospace; */
font-family: 'FZFWZhuZiAYuanJWD';
box-sizing: border-box;
}
::selection {
background-color: rgb(110, 87, 179);
}
/*去除ie edge的密码框默认出现的小眼睛
给人添乱这一块,巨硬从来都没让我失望过*/
input[type='password']::-ms-reveal {
display: none;
}
input[type='password']::-ms-clear {
display: none;
}
input[type='password']::-o-clear {
display: none;
}
body {
/* 移除默认蓝色的背景 */
-webkit-tap-highlight-color: transparent;
overflow: hidden;
height: 100vh;
background-color: rgb(186, 175, 221);
}
/* ---------------------------------------------------------- */
#login-page {
width: 100vw;
height: 100%;
/* background-color: rgb(186, 175, 221); */
position: relative;
background: url('../resource/img/left.jpg') no-repeat;
background-size: cover;
position: relative;
background-position: center;
user-select: none;
/* 定义全局的变量
******************************/
/* 基本字体颜色 */
--baseFontColor: rgba(0, 0, 0, 1);
/* 提示文本颜色(可点击的文本) */
--baseTipsFontColor: rgb(110, 87, 179);
/* 提示文本点击之后的颜色(可点击的文本) */
--baseTipsActiveFontColor: rgb(136, 108, 222);
/* input默认的边框颜色 */
--inputDomBorderColor: rgb(227, 227, 227);
/* input元素聚焦时线条的颜色 */
--inputDomFocusBorderColor: rgb(128, 106, 196);
/* input文本颜色 */
--inputDomFontColor: rgba(0, 0, 0, 1);
/* input提示文本颜色 */
--inputDomPlaceholderFontColor: rgba(117, 117, 117, 1);
/* input元素投影样式 */
--inputDomBoxShadow: unset;
/* 基本的元素投影样式 */
--baseDomBoxShadow: 0px 8px 32px 0px rgba(31, 38, 138, 0.37);
/* 按钮背景色 */
--baseBtnBgColor: rgb(128, 106, 196);
/* 按钮点击之后的颜色 */
--baseBtnActiveBgColor: rgba(140, 115, 217);
/* or颜色 */
--baseTipOrColor: rgb(167, 172, 185);
}
#login-page > .login-wrapper {
width: 60vw;
height: 80%;
/* height: 80vh; */
background-color: #fff;
border-radius: 40px;
/* 设置位置 */
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
/* */
display: flex;
overflow: hidden;
z-index: 99;
}
/* 左边
**************************/
#login-page > .login-wrapper > .left-img {
border-radius: 40px;
flex: 1;
background: url('../resource/img/left.jpg') no-repeat;
background-size: cover;
position: relative;
background-position: center;
cursor: default;
}
#login-page > .login-wrapper > .left-img > .glass {
color: white;
width: 86%;
padding: 20px;
position: absolute;
top: 20%;
left: 50%;
transform: translate(-50%, -20%);
background: rgba(255, 255, 255, 0.1);
box-shadow: var(--baseDomBoxShadow);
/* 背景毛玻璃 */
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border-radius: 15px;
border: 1px solid rgba(255, 255, 255, 0.48);
user-select: text;
}
#login-page > .login-wrapper > .left-img > .glass > .tips > .title {
/* width: 15%; */
display: inline-block;
font-weight: 600;
font-size: 15px;
text-align: center;
padding: 10px;
overflow: hidden;
background: rgba(255, 255, 255, 0.1);
box-shadow: var(--baseDomBoxShadow);
/* 背景毛玻璃 */
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border-radius: 15px;
border: 1px solid rgba(255, 255, 255, 0.48);
}
#login-page > .login-wrapper > .left-img > .glass > .tips > h2 {
margin: 15px 0px;
}
#login-page > .login-wrapper > .left-img > .glass > .tips > span {
margin: 5px 0;
display: block;
}
/* 右边
**************************/
#login-page > .login-wrapper > .right-login-form {
flex: 1;
position: relative;
overflow: hidden;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > h1 {
font-size: 30px;
text-align: center;
color: var(--baseFontColor);
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .input-items {
/* margin: 20px 0px; */
color: var(--baseFontColor);
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .input-items > .input-tips {
display: inline-block;
font-weight: 600;
font-size: 20px;
margin: 10px 0;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .input-items > .inputs {
width: 100%;
height: 50px;
border-radius: 10px;
border: 1px solid var(--inputDomBorderColor);
padding: 20px;
outline: none;
box-sizing: border-box;
transform: 0.5s;
color: var(--inputDomFontColor);
/* text-shadow: 0 0 2px rgba(0, 0, 0, 1); */
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .input-items
> .inputs::placeholder {
color: var(--inputDomPlaceholderFontColor);
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .input-items > .inputs:focus {
border: 1px solid var(--inputDomFocusBorderColor);
box-shadow: var(--inputDomBoxShadow);
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .input-items > .forgot {
float: right;
font-weight: 600;
text-align: right;
margin: 5px 0px;
font-size: 13px;
cursor: pointer;
color: var(--baseTipsFontColor);
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .input-items > .forgot:active {
color: var(--baseTipsActiveFontColor);
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .btn {
width: 100%;
height: 50px;
background: var(--baseBtnBgColor);
border: 0;
border-radius: 10px;
color: white;
font-size: 25px;
margin: 20px 0;
cursor: pointer;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .btn:active {
background: var(--baseBtnActiveBgColor);
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .siginup-tips {
text-align: center;
font-weight: 600;
margin: 10px 0;
color: var(--baseFontColor);
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .siginup-tips span:last-child {
color: var(--baseTipsFontColor);
cursor: pointer;
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .siginup-tips
span:last-child:active {
color: var(--baseTipsActiveFontColor);
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .other-login > .divider {
width: 100%;
margin: 20px 0;
text-align: center;
display: flex;
align-items: center;
justify-content: space-between;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .other-login > .divider > .line {
display: inline-block;
max-width: 35%;
width: 35%;
flex: 1;
height: 1px;
background-color: var(--baseTipOrColor);
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .other-login
> .divider
> .divider-text {
vertical-align: middle;
margin: 0 10px;
display: inline-block;
width: 50px;
color: var(--baseTipOrColor);
white-space: nowrap;
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .other-login
> .other-login-wrapper {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .other-login
> .other-login-wrapper
> .other-login-item {
width: 80px;
padding: 6px 12px;
text-align: center;
border-radius: 10px;
cursor: pointer;
font-weight: 600;
color: rgb(51, 59, 116);
margin: 0 10px;
transform: 0.4s;
box-sizing: border-box;
border: 1px solid transparent;
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .other-login
> .other-login-wrapper
> .other-login-item
img {
width: 40px;
height: 40px;
vertical-align: middle;
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .other-login
> .other-login-wrapper
> .other-login-item:hover {
height: 50%;
background: white;
border: 1px solid rgba(0, 0, 0, 0);
box-shadow: 1px 10px 32px 1px rgba(186, 175, 211, 0.37);
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .other-login
> .other-login-wrapper
> .other-login-item:active {
box-shadow: 1px 10px 32px 1px rgba(186, 175, 211, 0.6);
}
/* 媒体查询
* 超小屏幕 手机 <768px
* 小屏幕 平板 >=768px ~ <992px
* 中等屏幕 桌面 >=992px ~ <1200px
* 大屏幕 桌面 >=1200px
**************************************************/
/* 大屏幕 大于1200px*/
@media screen and (max-width: 1200px) {
}
/* 中等屏幕 992px - 1200px*/
@media screen and (max-width: 900px) {
#login-page {
/* 定义全局的变量
******************************/
/* 基本字体颜色 */
--baseFontColor: rgba(255, 255, 255, 1);
/* 提示文本颜色(可点击的文本) */
--baseTipsFontColor: rgba(185, 162, 255, 1);
/* input默认的边框颜色 */
--inputDomBorderColor: rgba(0, 0, 0, 0.06);
/* input元素聚焦时线条的颜色 */
/* --inputDomFocusBorderColor: rgb(165, 138, 255); */
--inputDomFocusBorderColor: rgb(255, 255, 255);
/* input提示文本颜色 */
--inputDomPlaceholderFontColor: rgba(255, 255, 255, 0.5);
/* input文本颜色 */
--inputDomFontColor: rgba(255, 255, 255);
--inputDomBoxShadow: 0px 8px 32px 0px rgba(0, 0, 0, 0.37);
--baseTipOrColor: rgba(255, 255, 255);
}
#login-page > .login-wrapper {
padding: 20px;
/* height: 70vh; */
height: 70%;
background: rgba(0, 0, 0, 0.1);
box-shadow: 0px 8px 32px 0px rgba(0, 0, 0, 0.6);
backdrop-filter: blur(0px);
-webkit-backdrop-filter: blur(0px);
border: 1px solid rgba(255, 255, 255, 0.48);
}
#login-page > .login-wrapper > .left-img {
display: none;
}
#login-page > .login-wrapper > .right-login-form {
padding: 20px;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper {
width: 80%;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .input-items > .input-tips {
font-size: 16px;
margin: 8px 0;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .input-items > .inputs {
padding: 0px 30px;
height: 40px;
background-color: rgba(0, 0, 0, 0.06);
backdrop-filter: blur(0px);
-webkit-backdrop-filter: blur(0px);
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .btn {
height: 40px;
margin: 10px 0;
font-size: 20px;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .siginup-tips {
font-size: 14px;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .other-login > .divider {
margin: 10px 0;
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .other-login
> .other-login-wrapper
> .other-login-item {
width: 80px;
padding: 2px 12px;
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .other-login
> .other-login-wrapper
> .other-login-item
img {
width: 30px;
height: 30px;
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .other-login
> .other-login-wrapper
> .other-login-item:hover {
/* background: rgba(255, 255, 255, 0.34); */
background: transparent;
/* box-shadow: 0px 8px 32px 0px rgba(255, 255, 255, 0.37); */
box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0);
/* 背景毛玻璃 */
/* backdrop-filter: blur(1px); */
/* -webkit-backdrop-filter: blur(1px); */
/* border: 1px solid rgba(255, 255, 255, 0.48); */
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .other-login
> .other-login-wrapper
> .other-login-item:active {
background: rgba(255, 255, 255, 0.6);
}
}
/* 小屏幕 768px-992px 屏幕宽度在768px以上显示的颜色*/
@media screen and (max-width: 768px) {
#login-page > .login-wrapper {
/* height: 50vh; */
height: 50%;
padding: 0px;
width: 70vw;
}
#login-page > .login-wrapper > .right-login-form {
height: 100%;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper {
padding: 20px;
position: relative;
width: 90%;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > h1 {
font-size: 20px;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .input-items > .input-tips {
margin: 4px 0;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .input-items > .inputs {
height: 36px;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .btn {
height: 36px;
margin: 4px 0;
font-size: 18px;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .siginup-tips {
margin: 6px 0;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper > .other-login > .divider {
margin: 4px 0;
}
}
@media screen and (max-width: 520px) {
#login-page > .login-wrapper {
padding: 0px;
width: 90vw;
}
#login-page > .login-wrapper > .right-login-form > .from-wrapper {
width: 100%;
}
#login-page
> .login-wrapper
> .right-login-form
> .from-wrapper
> .other-login
> .other-login-wrapper
> .other-login-item
img {
height: 26px;
width: 26px;
}
}
js代码
由于页面使用的vh单位,在移动端调用输入法时会导致页面坍塌,需要js在页面加载时直接获取一次显示区高度,写死body的高
//防抖对象 => 页面尺寸变化会多次触发监听函数
let timer = null;
/* 移动端键盘会导致vh坍塌 => 直接在元素一开始加载完成获得页面高度,然后写死body的高度 */
document.addEventListener('DOMContentLoaded', function () {
let Height = document.body.offsetHeight;
setContionerSize(Height);
window.onresize = function () {
!timer &&
(timer = setTimeout(function () {
setContionerSize(Height);
timer = null;
}, 300));
};
});
function setContionerSize(Height) {
document.body.style.height = Height + 'px';
}
其他
源码地址:gitee.com/CnAyo/login… 演示地址:code.juejin.cn/pen/7371502…