创新方案
写可维护 CSS 时:用现代布局…
适用于前端样式开发中需要组织可维护、响应式、可访问且性能良好的 CSS 代码的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
写可维护 CSS 时:用现代布局、语义化通用
解决思路
- 编写语义化 HTML,以提升可访问性与 SEO
- 用 CSS 负责样式,避免使用内联样式
- 使用媒体查询和灵活布局确保响应式设计
- 优先使用外部样式表,而非内联样式或嵌入式样式
- 一维布局(行或列)使用 Flexbox
- 用 justify-content 和 align-items 做对齐
- 用 flex-wrap 实现响应式换行行为
- 间距优先使用 gap 属性,而不是用 margin
- 二维布局使用 CSS Grid
- 用 grid-template-columns 和 grid-template-rows 定义网格模板
- 用 grid-area 实现具名模板区域
- 用 auto-fit 和 auto-fill 实现响应式网格
- 排版使用 rem 单位,以尊重用户的字体偏好设置
- 组件内相对尺寸使用 em 单位
- 避免用 px 设置字号,px 仅保留给边框和固定尺寸元素
- 在合适场景用 clamp() 实现流体排版
- 谨慎使用视口单位(vw、vh)做全屏布局
- 在 :root 上把设计令牌定义为 CSS 变量
- 颜色、间距、排版和阴影都使用变量
- 通过在不同上下文中覆盖变量来实现主题切换
- 语义化命名变量(如 --color-primary、--spacing-md)
- 按 BEM 方法命名:Block 为独立组件(如 .card)
- 按 BEM 方法命名:Element 为块的一部分(如 .card__title)
- 按 BEM 方法命名:Modifier 为块或元素的变体(如 .card--featured)
- 类名使用小写加连字符
- 样式选择器避免使用 ID,ID 保留给 JavaScript 钩子
- 使用单个类选择器保持低特异性
- 把样式限定在组件作用域内,避免冲突
- 尽可能把特异性控制在 0-1-0(单个类)
- 避免使用 !important 声明
- 有意地使用层叠,而不是让层叠意外生效
- 考虑用 CSS Layers(@layer)控制特异性
- 采用移动优先的媒体查询
- 用相对单位实现灵活布局
- 在多种视口尺寸下测试
- 组件级响应式考虑使用容器查询(container queries)
- 降低选择器复杂度
- 避免过深的嵌套选择器
- 使用高效选择器(优先类选择器而非元素选择器)
- 对隔离的组件使用 CSS containment
- 对上屏首屏内容考虑关键 CSS(critical CSS)
- 用 aspect-ratio 保持比例
- 在 Flexbox 和 Grid 中善用 gap
- 使用逻辑属性(margin-inline、padding-block)
- 用 transition 属性实现平滑过渡
- 用 @supports 做特性检测
- 按 base、layout、components、utilities 的逻辑结构组织样式表
- 保持文件模块化、职责聚焦
- 用注释记录复杂的样式
- 在声明块内使用一致的属性书写顺序
- 必要时添加厂商前缀(可考虑 Autoprefixer)
- 在目标浏览器上测试
- 为较新的特性提供回退方案
- 采用渐进增强的思路
- 确保足够的颜色对比度(至少满足 WCAG AA)
- 为键盘导航提供可见的焦点样式
- 避免用影响屏幕阅读器的方式隐藏内容
- 动画使用 prefers-reduced-motion 媒体查询
适用边界 · 注意事项
- 依赖 CSS 变量、Grid、容器查询等现代特性的写法不适用于需兼容 IE11 等老浏览器且无法加 polyfill 的场景
- 面向 HTML 邮件模板等客户端样式支持极差的场景,不宜套用本套架构与变量/Grid 做法
- 若项目已采用 CSS-in-JS 或原子化 CSS 框架并约定了相应命名规范,则不宜再强行引入 BEM 与全局样式表结构