维护 CSS 的关键是建立清晰边界、分层责任与可持续更新机制。基础层由设计系统统一维护变量与重置;组件层禁止样式覆盖;页面层仅限布局逻辑且复用变量;通过工具约束、升级节奏和决策文档保障可追溯性。
引入 CSS 工具与框架后,维护的关键不在于“禁用”或“替换”,而在于建立清晰的边界、分层的责任和可持续的更新机制。盲目混用、随意覆盖、忽略版本演进,才是维护失控的根源。
将 CSS 体系拆解为三层,每层有明确输入源和修改权限:
--color-primary)、间距标尺、字体栈、CSS Reset。业务开发不可直接修改,仅通过变量引用。
方只通过 props 控制状态(如 variant="outline"),禁止用 class 覆盖样式(如 .btn { color: red !important })。.dashboard-layout > .sidebar),禁止出现颜色、圆角、阴影等视觉值——必须复用基础变量。工具链本身不阻止写 CSS,但需用机制降低随意性:
postcss-discard-comments 或 ESLint 插件(如 stylelint-no-unknown-animations),自动拦截 !important、内联 style 属性、未声明变量的引用。data-* 属性 + scoped class(如 [data-theme="dark"] .card)做轻量适配。scoped(Vue)/ css prop(Emotion),杜绝全局污染。不升级会累积技术债,乱升级会引发样式断裂。需固化流程:
npm ls postcss 校验。很多“为什么这里用了 flex 而不是 grid”的疑问,源于缺失上下文。建议在项目中维护一个 /docs/css-decisions.md:
.sr-only 仅用于无障碍隐藏,禁止用于布局隐藏);.table th 加了 white-space: nowrap 是因后台列表列名过长,已同步反馈给组件库 PR #1234”);aspect-square 在 Safari 15.4 下失效,临时用 padding-top hack 替代”)。基本上就这些。维护不是让 CSS 变得更“安全”,而是让每一次修改都有据可依、有路可退、有人可问。