主题默认黑字与极简白色删除报告
默认主题「有底黑字」与删除极简白色 — 实现报告
一、需求摘要
- 删除「极简白色」主题:后台不再提供该选项,避免与默认主题混淆。
- 默认主题特殊规则:有底色的区域使用默认主题色作为底色,字体一律黑色(仅默认主题如此)。
- 其他主题不变:有底色的区域仍为主题色底色 + 白色字体;无底色的区域仍为主题色字体。
- 原则统一:有底色 → 底色=主题色,字体=白(或默认主题下=黑);无底色 → 字体=主题色。修改时不改变其他主题的功能、样式和色彩。
二、实现思路(如何做到「完美更改」)
2.1 只动「一处变量 + 一处样式」
- 变量:在
:root中增加--theme-on-bg-text,由 PHP 根据当前主题 key 输出:
- 当前为 default → --theme-on-bg-text: #000;(黑字)
- 当前为 其他主题(blue/red/green/…/black)→ --theme-on-bg-text: #fff;(白字)
- 样式:全站唯一主题样式文件 theme.css 中,所有「有主题底色的元素」的字体颜色由写死的
#fff改为var(--theme-on-bg-text, #fff),这样:
- 默认主题:读到 #000,有底处为黑字。
- 其他主题:读到 #fff,有底处仍为白字。
- 未注入变量时用回退值 #fff,不影响现有行为。
这样只通过一个 CSS 变量区分「默认=黑字 / 其他=白字」,不改其他主题的色值、功能或结构。
2.2 不动的部分(保证其他主题不受影响)
- 主题色体系:
--theme-color、--theme-color-hover、--theme-gradient等仍只由getThemeColor($module)决定,与主题 key(default/blue/red/…)一一对应,未做任何修改。 - 无底色规则:所有「无底色的文字/链接」仍使用
color: var(--theme-color),未做任何修改。 - 其他主题 key:blue、red、green、purple、orange、gray、pink、cyan、gold、black 的配色与逻辑均未改动,仅默认主题多了一个「有底用黑字」的规则。
三、已完成的代码修改
3.1 PHP:注入 --theme-on-bg-text(Banyan/Common/theme-helper.php)
- 在 getThemeRootVars($module) 中:
- 调用 getThemeKey($module) 得到当前主题 key(如 default、blue)。
- 若 $theme === 'default',则 $onBgText = '#000';否则 $onBgText = '#fff'。
- 在返回的 :root 字符串中追加:--theme-on-bg-text:{$onBgText};
- getThemeColor()、getThemeKey() 及主题色映射表未改,其他主题色与逻辑不变。
3.2 CSS:有底色处统一用变量(themes/default/Home/statics/css/theme.css)
- 将所有「有主题底色的元素」上的
color: #fff !important改为color: var(--theme-on-bg-text, #fff) !important(包括导航、按钮、楼层标题、Tab 选中、分类选中、弹层按钮等)。 - 将工具类 .btn-theme-primary、.pc-theme-button 的
color: #fff改为color: var(--theme-on-bg-text, #fff)。 - 未改动:无底色处的
color: var(--theme-color)、背景/边框使用的var(--theme-color)等,保证其他主题的样式和色彩不变。
3.3 后台:删除「极简白色」选项(Banyan/Backstage/template/index.html)
- PC 端(Home)、移动端(WAP) 两个下拉框中,删除
<option value="white">🤍 极简白色</option>。 - 主题预览脚本中删除对 theme === 'white' 的特殊处理,避免引用已移除的选项。
- 预览脚本中 themeColors 移除 'white',仅用于前端预览,不影响 PHP 主题逻辑。
- 为默认主题预览增加「有底色处为黑字」的展示:当 theme === 'default' 时,预览块中的 header/button 使用 onBgText = '#000000',其余主题仍为白字,便于管理员区分默认主题行为。
四、效果与原则对照
| 项目 | 默认主题 | 其他主题(蓝/红/绿/…/黑) |
|---|---|---|
| 有底色的底色 | 主题色 | 主题色 |
| 有底色的字体 | 黑色 | 白色 |
| 无底色的字体 | 主题色 | 主题色 |
- 原则:有底色 → 底色=主题色,字体=白(默认主题下=黑);无底色 → 字体=主题色。
- 其他主题:功能、样式、色彩均未改变,仅默认主题多「有底用黑字」这一条规则。
五、若需同步 Wap 端
- Wap 端若使用同一套 getThemeRootVars('Wap') 且引用 themes/default/Wap/statics/css/theme.css,则只需在 Wap 的 theme.css 中,对「有主题底色的元素」做同样替换:
color: #fff→color: var(--theme-on-bg-text, #fff)。 - getThemeRootVars 已按 getThemeKey($module) 区分 Home/Wap,故 PC 与 Wap 可各自为 default 或其他主题,互不影响。
六、总结
- 极简白色:已从后台选项中删除,预览与前端主题列表均不再出现。
- 默认主题:通过新增
--theme-on-bg-text: #000与 theme.css 中统一使用var(--theme-on-bg-text, #fff),实现「有底色一律黑字」;其他主题仍为白字,未改变其他主题的功能、样式和色彩,实现「完美更改」。
