问题描述
登录页(wp-login.php)中"保持登入"(Remember Me)复选框勾选后没有任何视觉反馈——勾选状态不可见,但功能实际正常(登录后确实保持会话)。
复现环境:WordPress 7.x 登录页 + Sakurairo 主题(custom_login() 注入的登录页样式)。
根因分析
主题 functions.php 的 custom_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 的自定义样式,勾选标记是白色 SVG(input[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 #1420(https://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 规则即可立即生效。
问题描述
登录页(
wp-login.php)中"保持登入"(Remember Me)复选框勾选后没有任何视觉反馈——勾选状态不可见,但功能实际正常(登录后确实保持会话)。复现环境:WordPress 7.x 登录页 + Sakurairo 主题(
custom_login()注入的登录页样式)。根因分析
主题
functions.php的custom_login()通过login_head注入的样式:WordPress 核心(
load-styles.php的 forms.css)将登录页复选框渲染为appearance: none的自定义样式,勾选标记是白色 SVG(input[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 时主题规则胜出修复方案
已提交 PR #1420(https://github.com/mirai-mamori/Sakurairo/pull/1420):
specificity (0,3,1) 高于基础规则,无论加载顺序如何都会胜出;白色勾标记在主题色背景上清晰可见。
临时修复(PR 合并前)
站点侧可在登录页额外 CSS 中加入上述
:checked规则即可立即生效。