/* 全局样式重置:增加box-sizing强制继承,避免尺寸计算偏差 */ * { margin: 0; padding: 0; box-sizing: border-box; font-family: "Microsoft YaHei", sans-serif; } /* 样式变量:统一管理,减少硬编码 */ :root { --primary-color: #3498db; --primary-dark: #2980b9; --primary-light: #e3f2fd; --bg-gradient-1: #2c3e50; --bg-gradient-2: #3498db; --white: #fff; --gray-light: #f8f9fa; --gray-border: #ddd; --gray-hover: #f1f1f1; --text-gray: #555; --text-light-gray: #888; --danger-color: #e74c3c; --shadow-normal: 0 10px 30px rgba(0, 0, 0, 0.15); --shadow-modal: 0 10px 25px rgba(0, 0, 0, 0.2); --shadow-input: 0 0 0 3px rgba(52, 152, 219, 0.1); --transition-base: all 0.25s ease; --login-box-width: 420px; /* 固定登录框宽度,避免变形 */ --input-height: 48px; /* 固定输入框高度,统一视觉 */ } /* 页面主体:固定布局,确保登录框不被挤压 */ body { display: flex; align-items: center; justify-content: center; min-height: 100vh; background: linear-gradient(135deg, var(--bg-gradient-1), var(--bg-gradient-2)); padding: 0 80px; overflow: hidden; /* 禁止页面滚动 */ } /* -------------------------- 左侧品牌区域:固定尺寸和位置 -------------------------- */ .brand-side { width: 55%; max-width: 700px; color: var(--white); padding: 40px; text-align: center; margin-right: 60px; } .brand-title-group { margin-top: 10px; } .brand-side h1 { font-size: 3.2rem; margin-bottom: 15px; text-shadow: 0 3px 12px rgba(0, 0, 0, 0.25); letter-spacing: 1px; } .brand-divider { width: 80px; height: 3px; background: linear-gradient(90deg, transparent, var(--white), transparent); margin: 0 auto 20px; opacity: 0.8; } .brand-side p { font-size: 1.15rem; opacity: 0.95; line-height: 1.7; text-shadow: 0 1px 5px rgba(0, 0, 0, 0.15); } .brand-icon { display: flex; align-items: center; justify-content: center; gap: 18px; margin-bottom: 25px; } .brand-icon i { font-size: 2.8rem; opacity: 0.95; transition: var(--transition-base); } .brand-icon i:hover { transform: translateY(-6px) scale(1.05); opacity: 1; } /* -------------------------- 右侧登录容器:固定尺寸,彻底解决变形 -------------------------- */ .login-container { width: var(--login-box-width); /* 固定宽度,不随内容拉伸 */ background: var(--white); border-radius: 12px; box-shadow: var(--shadow-normal); overflow: hidden; transition: var(--transition-base); position: relative; z-index: 10; } .login-container:hover { transform: translateY(-5px); box-shadow: 0 12px 35px rgba(0, 0, 0, 0.18); } .login-header { text-align: center; padding: 25px; background: var(--gray-light); border-bottom: 1px solid var(--gray-border); } .login-header h2 { font-size: 1.7rem; color: #333; font-weight: 600; letter-spacing: 0.5px; } /* 表单区域:固定内边距,避免内容溢出 */ .login-form { padding: 35px 30px; width: 100%; } /* 表单组:固定间距,不随内容变化 */ .form-group { margin-bottom: 28px; width: 100%; } .required-mark { color: var(--danger-color); margin-left: 4px; font-size: 1rem; } .form-group label { display: block; margin-bottom: 9px; color: var(--text-gray); font-size: 1rem; font-weight: 500; } /* -------------------------- 输入框组:固定高度+定位,彻底解决变形 -------------------------- */ .input-group { position: relative; display: flex; align-items: center; width: 100%; height: var(--input-height); /* 固定容器高度,与输入框一致 */ } /* 输入框:固定高度+内边距,不拉伸 */ .form-group input { width: 100%; height: 100%; /* 继承容器高度,避免自行拉伸 */ padding: 0 18px 0 45px; /* 左侧留足图标空间,右侧留足按钮空间 */ border: 1px solid var(--gray-border); border-radius: 8px; font-size: 1rem; outline: none; transition: var(--transition-base); background-color: var(--white); resize: none; appearance: none; } /* 输入框聚焦:仅改变边框和阴影,不改变尺寸 */ .form-group input:focus { border-color: var(--primary-color); box-shadow: var(--shadow-input); background-color: var(--primary-light); } .form-group input:not(:placeholder-shown) { border-color: #b3d9f2; } /* 输入框图标:固定左侧定位,不随输入框变化 */ .input-icon { position: absolute; left: 16px; /* 固定左侧距离,不偏移 */ color: var(--text-light-gray); font-size: 1.1rem; z-index: 1; width: 20px; /* 固定图标宽度,避免抖动 */ text-align: center; } .form-group input:not(:placeholder-shown) + .input-icon { color: var(--primary-color); } /* 密码切换按钮:固定最右侧,不偏移 */ .toggle-pwd { position: absolute; right: 12px; /* 固定右侧距离 */ top: 50%; transform: translateY(-50%); /* 垂直居中 */ background: transparent; border: none; color: var(--text-light-gray); cursor: pointer; font-size: 1rem; width: 24px; height: 24px; border-radius: 50%; transition: var(--transition-base); z-index: 2; display: flex; align-items: center; justify-content: center; } .toggle-pwd:hover { background-color: var(--gray-hover); color: var(--text-gray); } /* 登录按钮:固定尺寸,不拉伸 */ .btn-login { width: 100%; height: 52px; /* 固定按钮高度 */ background: var(--primary-color); color: var(--white); border: none; border-radius: 8px; font-size: 1.05rem; font-weight: 500; cursor: pointer; transition: var(--transition-base); letter-spacing: 0.5px; box-shadow: 0 3px 8px rgba(52, 152, 219, 0.2); white-space: nowrap; } .btn-login:hover { background: var(--primary-dark); transform: translateY(-2px); box-shadow: 0 5px 12px rgba(41, 128, 185, 0.25); } .btn-login:active { transform: translateY(0); box-shadow: 0 2px 5px rgba(41, 128, 185, 0.2); } /* -------------------------- 弹窗:固定层级,避免被遮挡 -------------------------- */ .modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); justify-content: center; align-items: center; z-index: 9999; /* 最高层级,不被任何元素遮挡 */ opacity: 0; transition: opacity 0.3s ease; } .modal.show { opacity: 1; } .modal-content { background: var(--white); padding: 25px; border-radius: 10px; width: 320px; text-align: center; box-shadow: var(--shadow-modal); transform: translateY(-20px); transition: transform 0.3s ease; } .modal.show .modal-content { transform: translateY(0); } .modal-content .icon { font-size: 2.5rem; color: var(--danger-color); margin-bottom: 15px; } .modal-content p { margin-bottom: 20px; color: var(--text-gray); font-size: 1rem; line-height: 1.5; } .modal-content button { padding: 10px 25px; border: none; border-radius: 6px; background: var(--primary-color); color: var(--white); cursor: pointer; transition: var(--transition-base); font-size: 0.95rem; } .modal-content button:hover { background: var(--primary-dark); transform: translateY(-2px); } .modal-content button:active { transform: translateY(0); }