Skip to content

【Bug】登录页「保持登入」复选框勾选后无视觉反馈(已提交 PR #1420 修复) #1421

Description

@Sualiu

问题描述

登录页(wp-login.php)中"保持登入"(Remember Me)复选框勾选后没有任何视觉反馈——勾选状态不可见,但功能实际正常(登录后确实保持会话)。

复现环境:WordPress 7.x 登录页 + Sakurairo 主题(custom_login() 注入的登录页样式)。

根因分析

主题 functions.phpcustom_login() 通过 login_head 注入的样式:

.login form input[type=checkbox], ... {
    background: rgba(255,255,255,0.7);
    border: 1px solid #FFFFFF;
    ...
}

WordPress 核心(load-styles.php 的 forms.css)将登录页复选框渲染为 appearance: none 的自定义样式,勾选标记是白色 SVGinput[type=checkbox]:checked::before),勾选背景色由 input[type=checkbox]:checked { background: var(--wp-admin-theme-color); } 设置。

问题在于:

  • 主题规则 .login form input[type=checkbox] 的 specificity 为 (0,2,1),与核心的 input[type=checkbox]:checked(0,2,1)相同
  • 主题样式通过 login_head 在核心样式表之后加载 → 同 specificity 时主题规则胜出
  • 结果:勾选后复选框背景仍为半透明白色,白色 SVG 勾标记在白底上看不见 → 视觉无反馈(state 已切换,功能正常)

修复方案

已提交 PR #1420https://github.com/mirai-mamori/Sakurairo/pull/1420):

.login form input[type=checkbox]:checked {
    background: <?php echo iro_opt('theme_skin') ?: '#FF69B4'; ?>;
    border-color: <?php echo iro_opt('theme_skin') ?: '#FF69B4'; ?>;
}

specificity (0,3,1) 高于基础规则,无论加载顺序如何都会胜出;白色勾标记在主题色背景上清晰可见。

临时修复(PR 合并前)

站点侧可在登录页额外 CSS 中加入上述 :checked 规则即可立即生效。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions