- 现代化设计:采用类似微信官方的简洁、干净的设计风格。
- 响应式布局:完美适配桌面端、平板和手机端。
- 交互细节:包含输入框聚焦效果、按钮悬停效果、简单的表单验证。
- 可复用性强:代码结构清晰,注释详细,方便您进行修改和扩展。
最终预览效果
您可以直接复制下面的所有代码,保存为 .html 文件,然后用浏览器打开即可看到效果。

(图片来源网络,侵删)
完整代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">微信登录</title>
<style>
/* --- 全局和基础样式 --- */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
background-color: #f7f7f7;
color: #333;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
/* 禁止双击缩放,提升移动端体验 */
touch-action: manipulation;
}
/* --- 主容器 --- */
.login-container {
width: 100%;
max-width: 400px;
padding: 20px;
}
/* --- Logo 和标题 --- */
.header {
text-align: center;
margin-bottom: 40px;
}
.logo {
width: 80px;
height: 80px;
margin: 0 auto 20px;
background-color: #07C160;
border-radius: 12px;
display: flex;
justify-content: center;
align-items: center;
font-size: 40px;
color: white;
font-weight: bold;
}
.header h1 {
font-size: 24px;
font-weight: 500;
color: #333;
}
.header p {
font-size: 14px;
color: #999;
margin-top: 8px;
}
/* --- 登录表单 --- */
.login-form {
background-color: #fff;
padding: 30px;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
}
.form-group {
margin-bottom: 20px;
}
.form-group label {
display: block;
margin-bottom: 8px;
font-size: 14px;
color: #666;
}
.form-group input {
width: 100%;
padding: 12px 16px;
font-size: 16px;
border: 1px solid #e5e5e5;
border-radius: 6px;
outline: none;
transition: border-color 0.3s, box-shadow 0.3s;
}
/* 输入框聚焦效果 */
.form-group input:focus {
border-color: #07C160;
box-shadow: 0 0 0 2px rgba(7, 193, 96, 0.2);
}
/* --- 登录按钮 --- */
.login-button {
width: 100%;
padding: 14px;
font-size: 16px;
font-weight: 500;
color: white;
background-color: #07C160;
border: none;
border-radius: 6px;
cursor: pointer;
transition: background-color 0.3s, opacity 0.3s;
}
/* 按钮悬停和点击效果 */
.login-button:hover {
background-color: #06ae56;
}
.login-button:active {
opacity: 0.9;
}
/* --- 其他登录方式 --- */
.other-login {
margin-top: 30px;
text-align: center;
}
.divider {
display: flex;
align-items: center;
margin-bottom: 20px;
color: #999;
font-size: 14px;
}
.divider::before,
.divider::after {
content: '';
flex: 1;
height: 1px;
background-color: #e5e5e5;
}
.divider span {
padding: 0 12px;
}
.other-login-methods {
display: flex;
justify-content: center;
gap: 20px;
}
.other-login-methods a {
display: flex;
justify-content: center;
align-items: center;
width: 50px;
height: 50px;
background-color: #f7f7f7;
border-radius: 50%;
text-decoration: none;
color: #333;
transition: background-color 0.3s;
}
.other-login-methods a:hover {
background-color: #e5e5e5;
}
/* --- 错误提示 --- */
.error-message {
color: #e64340;
font-size: 14px;
margin-top: 8px;
display: none; /* 默认隐藏 */
}
/* --- 响应式调整 --- */
@media (max-width: 480px) {
.login-container {
padding: 15px;
}
.login-form {
padding: 20px;
}
}
</style>
</head>
<body>
<div class="login-container">
<!-- 头部 Logo 和标题 -->
<div class="header">
<div class="logo">微</div>
<h1>微信登录</h1>
<p>登录后即可使用完整功能</p>
</div>
<!-- 登录表单 -->
<form class="login-form" id="loginForm">
<div class="form-group">
<label for="phone">手机号</label>
<input
type="tel"
id="phone"
name="phone"
placeholder="请输入您的手机号"
maxlength="11"
required
>
<div class="error-message" id="phoneError">请输入正确的手机号</div>
</div>
<div class="form-group">
<label for="password">密码</label>
<input
type="password"
id="password"
name="password"
placeholder="请输入您的密码"
required
>
<div class="error-message" id="passwordError">密码不能为空</div>
</div>
<button type="submit" class="login-button">登 录</button>
</form>
<!-- 其他登录方式 -->
<div class="other-login">
<div class="divider">
<span>其他登录方式</span>
</div>
<div class="other-login-methods">
<a href="#" title="QQ登录">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- 这里可以放置 QQ 图标的 SVG 代码 -->
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" fill="#999"/>
</svg>
</a>
<a href="#" title="微信扫码登录">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- 这里可以放置微信二维码的 SVG 代码 -->
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" fill="#999"/>
</svg>
</a>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const loginForm = document.getElementById('loginForm');
const phoneInput = document.getElementById('phone');
const passwordInput = document.getElementById('password');
const phoneError = document.getElementById('phoneError');
const passwordError = document.getElementById('passwordError');
// 简单的手机号验证
function validatePhone(phone) {
const regex = /^1[3-9]\d{9}$/;
return regex.test(phone);
}
// 表单提交处理
loginForm.addEventListener('submit', function(event) {
// 阻止表单默认提交行为
event.preventDefault();
// 重置错误提示
phoneError.style.display = 'none';
passwordError.style.display = 'none';
let isValid = true;
// 验证手机号
if (!validatePhone(phoneInput.value)) {
phoneError.style.display = 'block';
isValid = false;
}
// 验证密码
if (passwordInput.value.trim() === '') {
passwordError.style.display = 'block';
isValid = false;
}
// 如果验证通过,则执行登录逻辑
if (isValid) {
// 这里可以添加 AJAX 请求到后端
console.log('登录信息:', {
phone: phoneInput.value,
password: passwordInput.value
});
// 模拟登录成功
alert('登录成功!(此处为模拟)');
// 实际项目中,这里可能会跳转到首页
// window.location.href = '/home';
}
});
// 输入时隐藏错误提示(可选,提升用户体验)
phoneInput.addEventListener('input', function() {
if (phoneError.style.display === 'block') {
phoneError.style.display = 'none';
}
});
passwordInput.addEventListener('input', function() {
if (passwordError.style.display === 'block') {
passwordError.style.display = 'none';
}
});
});
</script>
</body>
</html>
代码结构解析
HTML 结构 (<body> 部分)
<div class="login-container">: 整个登录界面的外层容器,用于限制最大宽度和居中显示。<div class="header">: 包含 Logo 和标题,营造品牌感。<form class="login-form">: 表单元素,所有输入控件都放在这里。<div class="form-group">: 每个输入项的容器,方便对label和input进行统一布局。<input>: 输入框,设置了type="tel"(手机键盘)、placeholder(占位符)、maxlength(最大长度)等属性。<div class="error-message">: 错误提示信息,默认隐藏,JS 验证失败时显示。<button type="submit">: 登录按钮,type="submit"可以通过点击按钮触发form的submit事件。
<div class="other-login">: “其他登录方式”区域,增加了灵活性。<a>: 其他登录方式的链接,内部使用<svg>图标,确保清晰度和可缩放性。
CSS 样式 (<style> 部分)
- *全局样式 (`body`)**: 重置默认边距,设置全局字体,使用 Flexbox 布局让整个页面内容垂直水平居中。
- 主容器 (
.login-container): 设置max-width确保在大屏幕上不会过宽,padding提供呼吸感。 - 头部 (
.header):text-align: center使内容居中。 - 表单 (
.login-form):background-color,border-radius,box-shadow共同作用,创建一个卡片式的白色区域。 - 输入框 (
.form-group input):outline: none移除默认的聚焦轮廓,transition为border-color和box-shadow添加平滑的过渡效果。 - 聚焦效果 (
input:focus): 当用户点击输入框时,边框变为微信绿,并添加一个柔和的阴影,提供清晰的视觉反馈。 - 按钮 (
.login-button): 使用微信绿作为背景色,cursor: pointer告诉用户这是一个可点击的元素。hover和active伪类分别定义了悬停和点击时的状态,提升交互体验。 - 响应式 (
@media): 当屏幕宽度小于480px时(如手机),减小padding,让布局更紧凑。
JavaScript 交互 (<script> 部分)
- 获取元素: 使用
document.getElementById获取表单、输入框和错误提示的 DOM 元素。 - 表单提交事件 (
submit):event.preventDefault(): 这是关键!它阻止了表单默认的刷新页面的提交行为,让我们有机会在 JS 中处理数据。- 数据验证: 在提交时,对手机号和密码进行校验。
- 手机号: 使用正则表达式
/^1[3-9]\d{9}$/进行简单验证。 - 密码: 检查是否为空。
- 手机号: 使用正则表达式
- 显示错误: 如果验证失败,通过设置
error-message的style.display = 'block'来显示错误提示。 - 模拟登录: 如果验证通过,这里会执行真正的登录逻辑(通常是 AJAX 请求),代码中用
console.log和alert模拟了这个过程。
- 输入时隐藏错误: 为输入框添加了
input事件监听器,当用户开始输入时,如果错误提示是显示的,则将其隐藏,这是一个很好的用户体验细节。
如何使用和修改
- 直接使用: 将所有代码复制到一个
.html文件中,用浏览器打开即可。 - 修改 Logo 和标题: 在
<div class="header">中修改<h1>和<p>的内容。 - 修改表单字段: 在
<form>中增删.form-group来添加或删除输入项。 - 连接后端: 将 JS 中的
console.log和alert替换为fetch或axios发送登录请求到您的服务器。 - 添加真实图标: 将
<svg>部分替换为真实的 QQ、微信等平台的官方 SVG 图标代码,以确保图标显示正确。

(图片来源网络,侵删)
