[开发]SoSite CSS 历史债清理 · 交接说明(2026-08-12)

👑Lv.11 元老 🌞 骨干会员
2026-10-26 00:46:51

本文由 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 层核实后删除):
  1. 递归扫描(RecursiveDirectoryIterator,265 文件,排除 CSS 自身):275 个定义类中 176 个零引用
  2. JS 动态拼接检查(classList.add/className/前缀拼接):0 个
  3. 其他 CSS 依赖检查:仅 border-top/inline-flex 被 modern.css 提及(实为 CSS 属性声明非类选择器,已排除)
  4. 抽样人工核实
  • 结果: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.php361medal-form-row / medal-w-\* / medal-pt-26 / medal-color-input / medal-actions 等 23 个
content_review/views/admin.php174cr-w-30~cr-w-215 列宽 8 个 + cr-group-badge 默认背景
friend_links/views/admin.php161fl-inline / fl-w-\* / fl-label-check / fl-pt-24 等 12 个
announcements/views/admin.php132ann-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_duel content-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


三、部署注意事项

  1. 4 个包按 update/23 → 26 顺序部署,各自独立可回滚(README 内有回归清单)
  2. 部署后浏览器硬刷新(Ctrl+F5,排除 CSS 缓存)
  3. 每包回归重点:
  • 23:后台全部页面视觉无变化
  • 24:前台(含 dice/quiz_duel 依赖 content-card)、移动端(@media 块)、后台
  • 25:4 个插件后台(勋章/内容审核/友链/公告)表单与弹窗
  • 26:通知中心分页
  1. 若启用 invite 插件:注册页邀请码输入框(invite-field)由插件自身 style.css 提供,不受 components.css 删除影响

四、给新会话的注意点(经验教训)

  1. CSS 自动删除脚本的坑:块级配对({→} 计数)在 @media 嵌套处会错乱——如需自动化清理,用"整行单规则级"删除(每行自身 {} 平衡才删),且删除前务必先备份文件(本次 git 不可用、无备份,靠栈式括号诊断 + 人工修复才恢复)
  2. 同名类判定要用完整选择器:正则提取 .类名 会把嵌套选择器(如 .admin-content .btn)误判为互覆;判定是否真互覆必须看完整选择器行是否带作用域前缀
  3. 死类判定要排除 3 类误报:JS 动态拼接(classList/className/前缀拼接)、其他 CSS 的选择器引用(非类定义)、字符串子串(mn-page-link 含 "page-link")——用类名边界 (?<![a-zA-Z0-9_-]) 匹配
  4. Alpine 弹窗 display:none 不能删:视图内联 style="display:none" 是 x-show 初始隐藏机制的一部分,注释里已写明"不要写死 CSS display:none"
  5. 插件自包含体系不要强行收敛:quiz_duel/dice/icon_generator 的 btn-/card 类有各自 style.css 完整定义(基于 --mn- 变量),强行改成 mn-btn 会破坏插件视觉
  6. 编码纪律: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 个部署包已就绪。

轻量级、高性能、零 MySQL 依赖的PHP社区系统。
| 浏览 1 次 | 回复 0 次

全部回复 (0)

暂无回复

请 登录