本文按更新日志(2026.03.14 v1.7.8 / 2026.03.17 v1.7.9 / 2026.03.18 v1.8.0)的顺序,记录这套页面在 CSS 变量主题化、暗黑/明亮切换、小屏顶部布局、以及 公告/免责声明弹窗可读性修复 上的关键技术点。
代码栈偏传统:PHP 模板 + AmazeUI 组件 + 一套自定义
style.css。但“主题系统、响应式、可维护 CSS”这些问题,本质上跟框架新旧关系不大。
更新日志重点:
多源聚合产品最怕某个源突然抽风导致用户一直点一直失败。健康缓存思路通常是:
这类策略本质是把不确定性从用户体验转移到系统策略,避免用户反复踩同一个坑。
把示例链接/接口改为 https 的好处很直接:
更新日志重点:
相比在每个组件里写两套颜色(.theme-dark ... / .theme-light ...),更可维护的方式是:
--text / --muted / --card / --border ...这样你只需要维护:
这类单页/静态站点的主题记忆,一般就是:
html 加 class(例如 theme-dark)localStorage优点:实现简单、无后端依赖;缺点:不同设备不同浏览器不共享(但多数情况下可接受)。
“首次访问自动弹出”一般要解决两个问题:
这也是为什么日志里强调“关闭后记忆;右上角按钮可随时查看”。
更新日志重点:
下面挑两个“看起来很小、但很典型”的前端问题展开。
顶部区域是一个横向按钮组:主题 / 公告 / 免责声明。
小屏宽度不足时,常见现象:
inline-flex 布局white-space: nowrap;这类处理背后的原则是:
小屏不是要“完整展示所有信息”,而是要“用最小空间表达可用的交互”。
AmazeUI 的弹窗、列表、strong、a 等元素可能自带默认颜色;而项目自身又有主题变量。
当这些规则叠加时,暗黑模式下很容易出现:
li / strong / a)被框架样式覆盖 → 颜色不统一与其在每段公告/免责声明文案上手动加 class,不如把“颜色规则”放到容器层:
.am-popup-bd)决定主题色inherit这样你以后怎么改文案、换成什么标签,颜色都稳定。
弹窗 DOM 的关键点是:正文都在 .am-popup-bd,且两个弹窗有独立 ID:
#site-notice(公告)#copr-info(免责声明)因此我们只对这两个弹窗的正文做“作用域内强制”:
/* 公告/免责声明弹窗:内容文字固定蓝色(后续你改内容也默认蓝色) */
#site-notice .am-popup-bd,
#copr-info .am-popup-bd {
color: #2563eb !important; /* blue-600 */
}
html.theme-dark #site-notice .am-popup-bd,
html.theme-dark #copr-info .am-popup-bd {
color: #60a5fa !important; /* blue-400 */
}
/* 强制正文内所有元素跟随弹窗正文颜色 */
#site-notice .am-popup-bd *,
#copr-info .am-popup-bd * {
color: inherit !important;
}另外,免责声明正文用的是 ul.disclaimer,原本可能有单独的 li/strong 颜色。为了不“抢颜色”,把它们也改成继承:
.disclaimer li {
color: inherit !important;
}
.disclaimer strong {
color: inherit !important;
font-weight: 700;
}!important工程上不是不能用 !important,而是不要无脑全局用。
本例里满足三个条件:
#site-notice / #copr-info 两个弹窗内inherit,未来文案结构改动也不需要额外补 CSS这类场景用 !important 反而是“稳定且成本最低”的方案。
把 v1.7.8~v1.8.0 放在一起看,会发现它们其实在做同一件事:
如果要用一句话概括这段演进:
不追求“花哨的炫技”,而是把 UI/交互最容易出问题的细节逐个补齐,让产品在不同设备/主题/不稳定外部环境下都能更稳地跑起来。
—— 评论区 ——