<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>注册 - QSZ</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<style>
:root {
--primary-color: #3b82f6;
--secondary-color: #60a5fa;
--success-color: #10b981;
--error-color: #ef4444;
--text-color: #1f2937;
--bg-color: #f3f4f6;
--white: #ffffff;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
background: linear-gradient(45deg, #3b82f6, #60a5fa);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 2rem;
}
.register-container {
background: var(--white);
border-radius: 1rem;
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
width: 100%;
max-width: 500px;
padding: 2rem;
}
.logo-section {
text-align: center;
margin-bottom: 2rem;
}
.logo-section img {
width: 80px;
height: 80px;
border-radius: 50%;
margin-bottom: 1rem;
}
.logo-section h1 {
color: var(--text-color);
font-size: 1.8rem;
margin-bottom: 0.5rem;
}
.logo-section p {
color: #6b7280;
font-size: 0.9rem;
}
.form-group {
margin-bottom: 1.5rem;
position: relative;
}
.form-group label {
display: block;
margin-bottom: 0.5rem;
color: var(--text-color);
font-size: 0.9rem;
font-weight: 500;
}
.form-group input {
width: 100%;
padding: 0.75rem 1rem;
padding-left: 2.5rem;
border: 1px solid #e5e7eb;
border-radius: 0.5rem;
font-size: 1rem;
transition: all 0.3s ease;
}
.form-group input:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}
.form-group .icon {
position: absolute;
left: 1rem;
top: 2.3rem;
color: #9ca3af;
}
.password-requirements {
margin-top: 0.5rem;
font-size: 0.8rem;
color: #6b7280;
}
.requirement {
display: flex;
align-items: center;
gap: 0.5rem;
margin-top: 0.25rem;
}
.requirement i {
font-size: 0.7rem;
}
.requirement.valid {
color: var(--success-color);
}
.requirement.invalid {
color: #9ca3af;
}
.btn-register {
width: 100%;
padding: 0.75rem 1.5rem;
background: var(--primary-color);
color: var(--white);
border: none;
border-radius: 0.5rem;
font-size: 1rem;
font-weight: 500;
cursor: pointer;
transition: background-color 0.3s ease;
}
.btn-register:hover {
background: var(--secondary-color);
}
.divider {
display: flex;
align-items: center;
margin: 1.5rem 0;
color: #6b7280;
}
.divider::before,
.divider::after {
content: "";
flex: 1;
height: 1px;
background: #e5e7eb;
}
.divider span {
padding: 0 1rem;
font-size: 0.9rem;
}
.social-login {
display: flex;
gap: 1rem;
margin-bottom: 1.5rem;
}
.social-btn {
flex: 1;
padding: 0.75rem;
border: 1px solid #e5e7eb;
border-radius: 0.5rem;
background: var(--white);
color: var(--text-color);
font-size: 1.25rem;
cursor: pointer;
transition: all 0.3s ease;
}
.social-btn:hover {
background: var(--bg-color);
border-color: var(--primary-color);
}
.login-link {
text-align: center;
margin-top: 1.5rem;
color: #6b7280;
font-size: 0.9rem;
}
.login-link a {
color: var(--primary-color);
text-decoration: none;
font-weight: 500;
}
.login-link a:hover {
text-decoration: underline;
}
@media (max-width: 640px) {
.register-container {
padding: 1.5rem;
}
}
</style>
</head>
<body>
<div class="register-container">
<div class="logo-section">
<img src="https://via.placeholder.com/80" alt="Logo">
<h1>创建账号</h1>
<p>加入我们,开启学习之旅</p>
</div>
<form id="registerForm" onsubmit="return validateForm(event)">
<div class="form-group">
<label for="username">用户名</label>
<i class="fas fa-user icon"></i>
<input type="text" id="username" name="username" required>
</div>
<div class="form-group">
<label for="email">邮箱地址</label>
<i class="fas fa-envelope icon"></i>
<input type="email" id="email" name="email" required>
</div>
<div class="form-group">
<label for="password">密码</label>
<i class="fas fa-lock icon"></i>
<input type="password" id="password" name="password" required>
<div class="password-requirements">
<div class="requirement" id="length">
<i class="fas fa-circle"></i>
至少8个字符
</div>
<div class="requirement" id="uppercase">
<i class="fas fa-circle"></i>
包含大写字母
</div>
<div class="requirement" id="number">
<i class="fas fa-circle"></i>
包含数字
</div>
<div class="requirement" id="special">
<i class="fas fa-circle"></i>
包含特殊字符
</div>
</div>
</div>
<div class="form-group">
<label for="confirm-password">确认密码</label>
<i class="fas fa-lock icon"></i>
<input type="password" id="confirm-password" name="confirm-password" required>
</div>
<button type="submit" class="btn-register">
注册账号
</button>
<div class="divider">
<span>或使用以下方式</span>
</div>
<div class="social-login">
<button type="button" class="social-btn">
<i class="fab fa-weixin"></i>
</button>
<button type="button" class="social-btn">
<i class="fab fa-qq"></i>
</button>
<button type="button" class="social-btn">
<i class="fab fa-github"></i>
</button>
</div>
<div class="login-link">
已有账号?<a href="login.html">立即登录</a>
</div>
</form>
</div>
<script>
// 密码强度验证
const password = document.getElementById('password');
const requirements = {
length: document.getElementById('length'),
uppercase: document.getElementById('uppercase'),
number: document.getElementById('number'),
special: document.getElementById('special')
};
password.addEventListener('input', function() {
const value = this.value;
// 检查长度
if(value.length >= 8) {
requirements.length.classList.add('valid');
} else {
requirements.length.classList.remove('valid');
}
// 检查大写字母
if(/[A-Z]/.test(value)) {
requirements.uppercase.classList.add('valid');
} else {
requirements.uppercase.classList.remove('valid');
}
// 检查数字
if(/[0-9]/.test(value)) {
requirements.number.classList.add('valid');
} else {
requirements.number.classList.remove('valid');
}
// 检查特殊字符
if(/[!@#$%^&*]/.test(value)) {
requirements.special.classList.add('valid');
} else {
requirements.special.classList.remove('valid');
}
});
// 表单验证
function validateForm(event) {
event.preventDefault();
const password = document.getElementById('password').value;
const confirmPassword = document.getElementById('confirm-password').value;
if(password !== confirmPassword) {
alert('两次输入的密码不一致!');
return false;
}
// 这里可以添加更多验证逻辑
// 如果验证通过,可以提交表单
console.log('表单验证通过,准备提交...');
return true;
}
</script>
</body>
</html>
本文来自QSZ学习网站,作者:北边村的富少,转载请注明原文链接:https://www.cnblogs.com/qsz666/p/18552517