• 现代化设计:采用类似微信官方的简洁、干净的设计风格。
  • 响应式布局:完美适配桌面端、平板和手机端。
  • 交互细节:包含输入框聚焦效果、按钮悬停效果、简单的表单验证。
  • 可复用性强:代码结构清晰,注释详细,方便您进行修改和扩展。

最终预览效果

您可以直接复制下面的所有代码,保存为 .html 文件,然后用浏览器打开即可看到效果。

html5 微信登陆界面模板
(图片来源网络,侵删)

完整代码

<!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">: 每个输入项的容器,方便对 labelinput 进行统一布局。
    • <input>: 输入框,设置了 type="tel"(手机键盘)、placeholder(占位符)、maxlength(最大长度)等属性。
    • <div class="error-message">: 错误提示信息,默认隐藏,JS 验证失败时显示。
    • <button type="submit">: 登录按钮,type="submit" 可以通过点击按钮触发 formsubmit 事件。
  • <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 移除默认的聚焦轮廓,transitionborder-colorbox-shadow 添加平滑的过渡效果。
  • 聚焦效果 (input:focus): 当用户点击输入框时,边框变为微信绿,并添加一个柔和的阴影,提供清晰的视觉反馈。
  • 按钮 (.login-button): 使用微信绿作为背景色,cursor: pointer 告诉用户这是一个可点击的元素。hoveractive 伪类分别定义了悬停和点击时的状态,提升交互体验。
  • 响应式 (@media): 当屏幕宽度小于 480px 时(如手机),减小 padding,让布局更紧凑。

JavaScript 交互 (<script> 部分)

  • 获取元素: 使用 document.getElementById 获取表单、输入框和错误提示的 DOM 元素。
  • 表单提交事件 (submit):
    • event.preventDefault(): 这是关键!它阻止了表单默认的刷新页面的提交行为,让我们有机会在 JS 中处理数据。
    • 数据验证: 在提交时,对手机号和密码进行校验。
      • 手机号: 使用正则表达式 /^1[3-9]\d{9}$/ 进行简单验证。
      • 密码: 检查是否为空。
    • 显示错误: 如果验证失败,通过设置 error-messagestyle.display = 'block' 来显示错误提示。
    • 模拟登录: 如果验证通过,这里会执行真正的登录逻辑(通常是 AJAX 请求),代码中用 console.logalert 模拟了这个过程。
  • 输入时隐藏错误: 为输入框添加了 input 事件监听器,当用户开始输入时,如果错误提示是显示的,则将其隐藏,这是一个很好的用户体验细节。

如何使用和修改

  1. 直接使用: 将所有代码复制到一个 .html 文件中,用浏览器打开即可。
  2. 修改 Logo 和标题: 在 <div class="header"> 中修改 <h1><p> 的内容。
  3. 修改表单字段: 在 <form> 中增删 .form-group 来添加或删除输入项。
  4. 连接后端: 将 JS 中的 console.logalert 替换为 fetchaxios 发送登录请求到您的服务器。
  5. 添加真实图标: 将 <svg> 部分替换为真实的 QQ、微信等平台的官方 SVG 图标代码,以确保图标显示正确。
html5 微信登陆界面模板
(图片来源网络,侵删)