本文由 FlintHub 开发文档归档发布。原始文档日期见标题前缀,来源:8月13日备份/SoSite-CSS清理交接说明-2026-08-12.md。
SoSite CSS 历史债清理 · 交接说明(2026-08-12)
本文件为 2026-08-12 会话的 CSS 清理工作交接。新会话请先读本文件,了解清理范围、当前状态、遗留事项。
清理计划:
CSS清理计划-2026-08-12.md;本次清理已执行 4 个阶段,产物为 update/23 ~ update/26 四个部署包。已重新核查:所有改动文件语法/括号/UTF-8 均正常;update 包与工作区已同步一致。
一、清理总览(4 阶段,4 个 update 包)
| 阶段 | 主题 | update 包 | 改动文件 |
|---|---|---|---|
| 1 | 同名类收敛 | update/23/ | assets/css/admin.css |
| 2 | 死类清理 | update/24/ | assets/css/components.css、assets/css/style.css |
| 3 | 插件后台内联收敛 | update/25/ | medal / content_review / friend_links / announcements 各 2 个文件(视图+style.css) |
| 4 | 前台分页收敛 | update/26/ | plugins/notifications/views/index.php |
阶段 1 — 同名类收敛(update/23)
- 核实结论:31 个跨文件同名类中 30 个是"假互覆"(admin.css 均已带
.admin-content/.admin-container/.admin-nav等作用域前缀,0807 整改已覆盖);仅.btn-edit裸定义但属有意的后台覆盖(加载顺序 style→components→admin)——均未修改 - 实际改动:删除 admin.css 中 7 个与 components.css 内容完全相同的重复工具类:
.text-center.mt-15.mt-20.mb-12.fs-13.fs-12.m-0(后台页面 components.css 必然先加载,不丢样式) - 保留:
.c-666 {color:#666}等(components.css 用var(--text-muted),内容不同);.c-555.m-0-0-8.w-50等 admin 独有
阶段 2 — 死类清理(update/24)
- 批 A(明确死类):
- components.css 删
invite-系列 21 类(invite-container/card/header/title/stats/msg/form/table/row 等)——全项目 233 文件扫描零引用 + 插件已停用(activated=false)+ 视图已改用 mn- 类 + hook 注入的是插件自身 style.css 的invite-field - style.css 删零引用
page-theme-settings块;style.css 整体保留(content-card被 dice/quiz_duel 使用 7 处、text-success被 invite 视图使用) - 批 B(components.css 零引用类,4 层核实后删除):
- 递归扫描(RecursiveDirectoryIterator,265 文件,排除 CSS 自身):275 个定义类中 176 个零引用
- JS 动态拼接检查(classList.add/className/前缀拼接):0 个
- 其他 CSS 依赖检查:仅 border-top/inline-flex 被 modern.css 提及(实为 CSS 属性声明非类选择器,已排除)
- 抽样人工核实
- 结果:1112 → 535 行(约删 52%),删除的全是视图/JS 从未使用的死类
- ⚠️ 过程中发生并已修复的问题:批 B 执行脚本的块配对逻辑在 @media 嵌套处出错(2 处孤立
}+ 误删 1 个@media开头行)。已修复并验证:大括号 121/121 平衡、0 孤立、UTF-8 正常、无 BOM、@media 结构完整、视图引用的类无缺失
阶段 3 — 插件后台内联样式收敛(update/25)
将 4 个插件后台视图的 82 处内联 style="..." 收编为插件自身 style.css 的工具类:
| 插件后台视图 | 原内联数 | 收编后剩余 | 新增工具类 |
|---|---|---|---|
| medal/views/admin.php | 36 | 1 | medal-form-row / medal-w-\* / medal-pt-26 / medal-color-input / medal-actions 等 23 个 |
| content_review/views/admin.php | 17 | 4 | cr-w-30~cr-w-215 列宽 8 个 + cr-group-badge 默认背景 |
| friend_links/views/admin.php | 16 | 1 | fl-inline / fl-w-\* / fl-label-check / fl-pt-24 等 12 个 |
| announcements/views/admin.php | 13 | 2 | ann-w-\* / ann-flex-col / ann-content-flex 等 11 个 |
剩余内联均为必须保留项:
display:none;— Alpine x-show 弹窗初始隐藏机制依赖,删除会破坏弹窗显隐background:<?php echo $g['color'] ... ?>/border/background:<?php echo $s['border']/$s['bg'] ... ?>— 动态色,无法静态化
附带收编:content_review 的静态 background:#3b82f6(分类徽章)→ 移入 .cr-group-badge 类默认背景,视图去掉内联
阶段 4 — 前台分页收敛到 mn-* 基座(update/26)
- 精确盘点(排除子串误报,类名边界匹配):
- 分页:前台 8 文件已用 mn-page-link/mn-page-dots/mn-pagination;唯一旧残留 = notifications 插件
- 按钮:前台 mn-btn 78 处为主;icon_generator/quiz_duel/dice 用旧
btn-,但各自 style.css 自带完整定义(基于 --mn- 变量)——自包含体系,非互覆问题,保留 - 卡片:前台 mn-section 46 处为主;icon_generator
card、dice/quiz_duelcontent-card同样为插件自包含体系,保留 - 实际改动:notifications 分页从旧
pagination/page-dots收敛为mn-pagination/mn-page-link/mn-page-dots,并补齐"上一页/下一页"链接(样式来自 modern.css,无需新增 CSS)
二、重新核查结果(2026-08-12 编写本交接前执行)
| 检查项 | 结果 |
|---|---|
| 7 个 CSS 文件括号平衡 / UTF-8 / 无 BOM | ✅ 全部通过 |
| 5 个 PHP 视图 php -l 语法 | ✅ 全部通过 |
| 新增工具类(medal-/cr-w-/fl-/ann-)定义与视图使用 | ✅ 定义即使用 |
| update/23-26 包与工作区文件 md5 一致性 | ✅ 已同步一致 |
| 核查中发现并修复 | friend_links style.css 曾有 7 个"仅定义未使用"的冗余类(fl-w-140/fl-flex-col-gap/fl-flex-wrap-gap/fl-link-flex/fl-link-sub/fl-shrink-0/fl-mb-10,系收编时误与 announcements 内联混用)→ 已删除,同步到 update/25 |
三、部署注意事项
- 4 个包按 update/23 → 26 顺序部署,各自独立可回滚(README 内有回归清单)
- 部署后浏览器硬刷新(Ctrl+F5,排除 CSS 缓存)
- 每包回归重点:
- 23:后台全部页面视觉无变化
- 24:前台(含 dice/quiz_duel 依赖 content-card)、移动端(@media 块)、后台
- 25:4 个插件后台(勋章/内容审核/友链/公告)表单与弹窗
- 26:通知中心分页
- 若启用 invite 插件:注册页邀请码输入框(invite-field)由插件自身 style.css 提供,不受 components.css 删除影响
四、给新会话的注意点(经验教训)
- CSS 自动删除脚本的坑:块级配对(
{→}计数)在 @media 嵌套处会错乱——如需自动化清理,用"整行单规则级"删除(每行自身{}平衡才删),且删除前务必先备份文件(本次 git 不可用、无备份,靠栈式括号诊断 + 人工修复才恢复) - 同名类判定要用完整选择器:正则提取
.类名会把嵌套选择器(如.admin-content .btn)误判为互覆;判定是否真互覆必须看完整选择器行是否带作用域前缀 - 死类判定要排除 3 类误报:JS 动态拼接(classList/className/前缀拼接)、其他 CSS 的选择器引用(非类定义)、字符串子串(
mn-page-link含 "page-link")——用类名边界(?<![a-zA-Z0-9_-])匹配 - Alpine 弹窗
display:none不能删:视图内联style="display:none"是 x-show 初始隐藏机制的一部分,注释里已写明"不要写死 CSS display:none" - 插件自包含体系不要强行收敛:quiz_duel/dice/icon_generator 的 btn-/card 类有各自 style.css 完整定义(基于 --mn- 变量),强行改成 mn-btn 会破坏插件视觉
- 编码纪律:CSS/视图均保持 UTF-8 无 BOM;用
edit_file/search_replace改文件(限定 path+glob 防误改其他文件),不要用 sed/重定向
五、遗留 / 可选后续
- 阶段 3 剩余:前台插件视图的内联样式(red_packet 前台 18 处等)与 48 处硬编码色值(red_packet/index 8、detail 6、icon_generator 5、content_review 4、admin/groups 3 等)未变量化——
CSS清理计划-2026-08-12.md中标注"可后续评估" - 旧模板 CSS(forum/pages/layout/blog/home.css)在本次清理前已不存在(0807 后已清理)
- MD3 令牌化改造为独立议题,与本清理互不干扰
交接完成 — SoSite 2026-08-12。清理 4 阶段 + 重新核查 + 4 个部署包已就绪。