生成器(dev/theme-builder): - paletteVars 的 text-secondary/text-muted 从「往底色混 36%/55%」改成 mixToContrast(5.5/4.5):二分找最淡且达标的位置,文字本身不达标就原样返回 - 半透明卡片先 flatten 压平到底色再算对比度;参考背景取「页面底色 + 压平后的卡片」中更不利的 - 配色面板加读数(正文/次要/淡文字/主色),低于 4.5 变橙;默认 primary #4a7fc1(3.69) → #3d6fac(4.63) - 新增 ?dump=palette 四种配色回归;README 补配色一节 主题/base(含用户本轮 base.css 改动): - sakura muted #a08c94(2.8:1) → #78696e(4.61)、shiroko #8794a7(2.76:1) → #656e7a(4.63):主题覆盖令牌,基座的 AA 修复到不了主题页 - 深色顶栏链接补 secondary 覆盖:亮色块已是次要文字色,深色块原来 !important 定成正文色,同一顶栏权重跳一档 - _scaffold.css 令牌清单 23 → 29(补 fs 阶梯与 page-position),muted 说明 AA 下限 - StaticVersion 20261021a → 20261021b
3.1 KiB
3.1 KiB
前端样式(长版明细)
前端样式
static/css/base.css(?v=取conf.StaticVersion,改完必须 +1)。令牌在:root(亮)+html[data-theme="dark"](暗)。新样式一律var(--tb-*),别写死色值,也别为深色另写分支。- 页面级样式内联在各自模板
<style>;尽量用类不用style=(深色下内联写死色值会露白)。 - 主题属性在 head 内联脚本里打(cookie
theme),不能挪回 body,否则深色用户白闪。 - 移动端(≤640px)语言切换与主题按钮在固定底栏
#tb-mobile-utils(.tb-nav-utils被隐藏, body 留padding-bottom:56px)。用户曾误以为"按钮不见了",先解释位置。 ⚠️/_/{domain}箱主页IsUserPage = true(route/question/page.go:133),语言切换包在{{ if not .IsUserPage }}里 → 箱主页没有语言切换入口,有意设计(用户 2026-10-19 确认),别当 bug 修。 - ⚠️ UIkit 3.3.3 的
.uk-flex::before/::after{display:none}:给带uk-flex的元素加伪元素必须写 复合选择器(.tb-cover.uk-flex::after),否则静默失效。 - 分类/题型标签一律
.tb-chip;彩色uk-label只留给语义状态(置顶/私密/被举报/已读、投票四态)。 - 字号阶梯 5 档:
--tb-fs-xs/md/lg/xl/hero(12/14/16/24/28)。散落的.9/.95/.98rem一律映射到档位, 别新增第 6 个值。⚠️ 已令牌化的是模板层;base.css自身仍留 11 处硬编码(0.78/0.82/0.88/0.95/1.1),templates/user/profile.html还留 16 处 —— 想彻底统一得先扫这两处。 - 圆角只用
--tb-radius(-sm/-xs);50%与999px是语义(头像、胶囊),不要换成令牌。 - ⚠️
.uk-text-muted/.uk-text-meta必须带!important:UIkit 3.3.3 自带color:#999!important, 普通声明压不过(现象:规则写了但全站还是 #999)。 - 文字色下限 WCAG AA 4.5:1(正文级)。
--tb-text-muted=#6b7280(白底 4.83)。 旧值#8a919c3.18、#9992.85 —— 肉眼"淡一点"其实已经不合格。 主色还没达标(#1e87f03.26 /#4a7fc13.69 / sakura#e5678f2.80),要动得连主题一起改。 - ⚠️ 改 base.css 的配色令牌必须同步检查
static/css/themes/*.css:主题覆盖同名令牌, 基座修了但主题页纹丝不动(sakura/shiroko 的 muted 就曾是 2.8:1,是这次才补到 4.6)。 - 顶栏链接:亮色用
--tb-text-secondary、hover/当前页--tb-primary;深色块原本!important定成--tb-text,会让同一顶栏在深浅两模式权重跳一档 → 已加 dark secondary 覆盖。 - 视觉自检:
TEST_PREVIEW=1 go test ./templates -run TestGenPreview→outputs/preview-*.html; 截图必须chrome --headless=old --force-device-scale-factor=1(新版 headless 本机挂住)。 ⚠️--window-size≠ CSS 视口;要精确视口就用 iframe 指定 width/height。验证 CSS 靠像素比对 (PIL 在 venv)而非目测;扫描循环上界不能与物体边界重合。