• 完全响应式:在手机上效果最佳,同时在平板和桌面电脑上也能良好显示。
  • 现代化设计:使用 Bootstrap 5,界面简洁、美观。
  • 用户友好:输入框有清晰的图标和标签,登录按钮醒目。
  • 功能完整:包含了用户名/邮箱、密码输入框、记住我选项、登录按钮和忘记密码链接。
  • 易于使用:您可以直接复制代码,修改图片和链接即可使用。

最终效果预览 (手机端模拟)

这是一个模拟手机屏幕的预览图,您可以看到布局是专门为小屏幕设计的:

bootstrap登录模板 手机版
(图片来源网络,侵删)

完整代码 (HTML + CSS + JS)

您可以将以下所有代码复制到一个 .html 文件中,然后用浏览器打开即可看到效果。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">移动端登录 - Bootstrap</title>
    <!-- Bootstrap 5 CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- Bootstrap Icons (用于输入框内的图标) -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.2/font/bootstrap-icons.min.css">
    <style>
        /* 全局样式,去除默认边距和背景 */
        body {
            background-color: #f8f9fa;
            margin: 0;
            padding: 0;
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
        }
        /* 登录容器样式 */
        .login-container {
            display: flex;
            align-items: center;
            justify-content: center;
            min-height: 100vh;
            padding: 20px;
        }
        .login-box {
            width: 100%;
            max-width: 400px; /* 在大屏幕上限制最大宽度 */
            background-color: #ffffff;
            padding: 40px 30px;
            border-radius: 12px;
            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
        }
        /* Logo 或标题样式 */
        .login-box .logo {
            text-align: center;
            margin-bottom: 30px;
        }
        .login-box .logo h2 {
            font-size: 28px;
            font-weight: 600;
            color: #333;
            margin: 0;
        }
        .login-box .logo p {
            font-size: 14px;
            color: #6c757d;
            margin-top: 5px;
        }
        /* 表单输入框组样式 */
        .input-group {
            position: relative;
            margin-bottom: 20px;
        }
        .input-group-text {
            background-color: #f8f9fa;
            border: 1px solid #ced4da;
            border-right: none;
            color: #6c757d;
            min-width: 45px;
            justify-content: center;
        }
        .form-control {
            border-left: none;
            padding-left: 15px;
        }
        .form-control:focus {
            border-color: #86b7fe;
            box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
        }
        .input-group .form-control:focus ~ .input-group-text {
            border-color: #86b7fe;
            color: #0d6efd;
        }
        /* 按钮样式 */
        .btn-login {
            width: 100%;
            padding: 12px;
            font-size: 16px;
            font-weight: 500;
            border-radius: 8px;
            background-color: #0d6efd;
            border: none;
            transition: background-color 0.2s, transform 0.1s;
        }
        .btn-login:hover {
            background-color: #0b5ed7;
        }
        .btn-login:active {
            transform: scale(0.98);
        }
        /* 记住我和忘记密码链接容器 */
        .d-flex.justify-content-between.align-items-center {
            margin-top: 25px;
            font-size: 14px;
        }
        .form-check-input {
            margin-top: 0.2rem;
        }
        .form-check-label {
            margin-bottom: 0;
            color: #6c757d;
        }
        .forgot-password a {
            color: #0d6efd;
            text-decoration: none;
        }
        .forgot-password a:hover {
            text-decoration: underline;
        }
        /* 其他登录方式 */
        .divider {
            text-align: center;
            margin: 25px 0;
            position: relative;
        }
        .divider::before {
            content: '';
            position: absolute;
            top: 50%;
            left: 0;
            right: 0;
            height: 1px;
            background-color: #e9ecef;
        }
        .divider span {
            background-color: #fff;
            padding: 0 15px;
            color: #6c757d;
            font-size: 13px;
            position: relative;
        }
        .social-login {
            display: flex;
            gap: 10px;
        }
        .social-login .btn {
            flex: 1;
            color: #495057;
            border: 1px solid #ced4da;
            padding: 8px;
            transition: all 0.2s;
        }
        .social-login .btn:hover {
            background-color: #f8f9fa;
            transform: translateY(-2px);
        }
        /* 注册链接 */
        .register-link {
            text-align: center;
            margin-top: 25px;
            font-size: 14px;
            color: #6c757d;
        }
        .register-link a {
            color: #0d6efd;
            text-decoration: none;
            font-weight: 500;
        }
        .register-link a:hover {
            text-decoration: underline;
        }
    </style>
</head>
<body>
    <div class="login-container">
        <div class="login-box">
            <!-- Logo/标题 -->
            <div class="logo">
                <h2>欢迎回来</h2>
                <p>请登录您的账户</p>
            </div>
            <form id="loginForm" onsubmit="handleLogin(event)">
                <!-- 用户名/邮箱输入框 -->
                <div class="input-group">
                    <span class="input-group-text"><i class="bi bi-person-fill"></i></span>
                    <input type="text" class="form-control" id="username" placeholder="用户名或邮箱" required>
                </div>
                <!-- 密码输入框 -->
                <div class="input-group">
                    <span class="input-group-text"><i class="bi bi-lock-fill"></i></span>
                    <input type="password" class="form-control" id="password" placeholder="请输入密码" required>
                </div>
                <!-- 记住我和忘记密码 -->
                <div class="d-flex justify-content-between align-items-center">
                    <div class="form-check">
                        <input class="form-check-input" type="checkbox" id="rememberMe">
                        <label class="form-check-label" for="rememberMe">
                            记住我
                        </label>
                    </div>
                    <div class="forgot-password">
                        <a href="#">忘记密码?</a>
                    </div>
                </div>
                <!-- 登录按钮 -->
                <button type="submit" class="btn btn-primary btn-login">
                    登录
                </button>
                <!-- 分隔线和第三方登录 -->
                <div class="divider">
                    <span>或使用以下方式登录</span>
                </div>
                <div class="social-login">
                    <button type="button" class="btn btn-outline-secondary">
                        <i class="bi bi-wechat"></i>
                    </button>
                    <button type="button" class="btn btn-outline-secondary">
                        <i class="bi bi-github"></i>
                    </button>
                    <button type="button" class="btn btn-outline-secondary">
                        <i class="bi bi-google"></i>
                    </button>
                </div>
                <!-- 注册链接 -->
                <div class="register-link">
                    还没有账户? <a href="#">立即注册</a>
                </div>
            </form>
        </div>
    </div>
    <!-- Bootstrap 5 JS (可选,如果需要交互组件) -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
    <!-- 自定义 JavaScript -->
    <script>
        function handleLogin(event) {
            // 阻止表单默认提交行为
            event.preventDefault();
            // 获取表单数据
            const username = document.getElementById('username').value;
            const password = document.getElementById('password').value;
            const rememberMe = document.getElementById('rememberMe').checked;
            // 这里可以添加前端验证逻辑
            if (!username || !password) {
                // 使用 Bootstrap 的 Toast 组件来显示错误信息(更友好)
                showToast('请填写用户名和密码', 'danger');
                return;
            }
            // 模拟登录请求
            console.log('登录信息:', { username, password, rememberMe });
            // 显示成功提示
            showToast('登录成功!正在跳转...', 'success');
            // 模拟跳转,实际应用中这里会是 window.location.href = '/dashboard';
            setTimeout(() => {
                alert('登录成功,即将跳转到主页!');
            }, 1500);
        }
        // 创建一个通用的 Toast 提示函数
        function showToast(message, type = 'info') {
            // 检查页面是否已经有 Toast 容器,如果没有则创建
            let toastContainer = document.getElementById('toastContainer');
            if (!toastContainer) {
                toastContainer = document.createElement('div');
                toastContainer.id = 'toastContainer';
                toastContainer.className = 'toast-container position-fixed top-0 end-0 p-3';
                toastContainer.style.zIndex = '11'; // 确保在最上层
                document.body.appendChild(toastContainer);
            }
            // 创建 Toast 元素
            const toastElement = document.createElement('div');
            toastElement.className = `toast align-items-center text-white bg-${type} border-0`;
            toastElement.setAttribute('role', 'alert');
            toastElement.setAttribute('aria-live', 'assertive');
            toastElement.setAttribute('aria-atomic', 'true');
            toastElement.innerHTML = `
                <div class="d-flex">
                    <div class="toast-body">
                        ${message}
                    </div>
                    <button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
                </div>
            `;
            toastContainer.appendChild(toastElement);
            // 初始化并显示 Toast
            const toast = new bootstrap.Toast(toastElement);
            toast.show();
            // Toast 隐藏后移除元素
            toastElement.addEventListener('hidden.bs.toast', () => {
                toastElement.remove();
            });
        }
    </script>
</body>
</html>

代码解析

HTML 结构

  • <meta name="viewport">: 这是移动端适配的关键,它告诉浏览器如何控制页面的尺寸和缩放。width=device-width 确保页面宽度与设备屏幕宽度一致,initial-scale=1.0 设置初始缩放比例为1。
  • .login-container: 一个全屏的 flex 容器,用于将登录框垂直和水平居中。
  • .login-box: 登录内容的主要容器,设置了最大宽度、白色背景、圆角和阴影,使其看起来像一个独立的卡片。
  • <form>: 表单元素,包含了所有登录相关的输入控件。
  • .input-group: Bootstrap 的输入框组合组件,用于将图标和输入框优雅地结合在一起。
  • <button class="btn btn-primary btn-login">: 登录按钮,btn-login 是我们自定义的类,用于设置全宽和特殊样式。

CSS 样式 (<style> 标签内)

  • body: 设置了柔和的灰色背景 (#f8f9fa)。
  • .login-box: 使用 max-width: 400px 确保在宽屏设备上登录框不会过宽,同时在小屏幕上 width: 100% 会使其自动填满可用空间。
  • .input-group: 自定义了输入框组的样式,让图标区域和输入框的边框看起来更统一。
  • .btn-login: 自定义按钮样式,设置全宽、圆角和悬停效果。
  • .divider.social-login: 提供了“其他方式登录”的视觉分隔和按钮布局。

JavaScript 交互 (<script> 标签内)

  • handleLogin(event): 这是表单的提交处理函数。
    • event.preventDefault(): 阻止表单默认的页面刷新提交行为。
    • 获取输入框的值。
    • 简单的前端验证。
    • 使用 Bootstrap Toast 组件来显示登录成功或失败的消息,这比 alert() 更加美观和现代化。
  • showToast(message, type): 一个通用的函数,用于动态创建和显示 Bootstrap Toast 提示。

如何使用和修改

  1. 保存文件: 将所有代码复制并粘贴到一个新的文本文件中,将其命名为 login.html 或任何你喜欢的名字,但确保后缀是 .html
  2. :
    • Logo/标题: 修改 <div class="logo"> 里的 <h2><p>
    • 占位符文本: 修改 <input> 标签里的 placeholder 属性。
    • 链接: 修改 <a> 标签的 href 属性和文本内容,忘记密码?”和“立即注册”。
    • Logo 图片: 如果你不想用文字,可以在 .logo div 里放一个 <img> 标签,并设置其 src 属性指向你的图片路径。
    • 第三方登录图标: <i class="bi bi-xxx"> 是 Bootstrap Icons,你可以替换成其他图标库(如 Font Awesome)的代码。

这个模板已经为您提供了一个功能完备、美观且移动优先的登录页面,您可以根据自己的项目需求进行快速调整。

bootstrap登录模板 手机版
(图片来源网络,侵删)