跳到主要内容

CSS 的诞生与演化

要点

  • 起因:HTML 早期的表现与结构耦合(<font>、table 布局),浏览器厂商私有标签泛滥,缺少跨页面的样式复用。
  • CSS 让样式与结构分离,浏览器统一解析模型;随后通过模块化迭代(CSS1 → CSS2 → CSS3/Level 3+)。
  • 核心演化方向:布局(float → Flexbox → Grid)、响应式(媒体查询 → 容器查询)、可维护性(自定义属性/层级/逻辑选择器)、性能与工具链(预处理、后处理、JIT 原子化)。
  • 今天的场景:多 runtime(Web/RSC/小程序/Native),依赖 tokens、原子类和编译期工具保持一致性与性能。

CSS 诞生的背景

  • 1994 年,Håkon Wium Lie 在 CERN 提出「层叠样式表」,与 HTML 分离表现层,降低表现标签膨胀。
  • 1996 年发布 CSS1:定义选择器、层叠与继承模型、字体与文本、颜色与背景等基础能力。
  • 设计目标:
    • 分离结构与表现:HTML 只描述语义/结构;样式由 CSS 控制。
    • 层叠与继承:同一元素接受多来源样式(作者/用户/UA),按优先级与权重合并。
    • 跨页面复用:外链样式表 link,避免每页重复写内联。

时间脉络(里程碑)

100%
Mermaid Live

演化主线

  • 布局体系:table → float 清除 → 多栏 → Flexbox(单轴)→ Grid(二维)→ subgrid/容器查询协同,极大减少包装 div 数量。
  • 响应式与适配@media → 自适应单位(vw/vh/rem)→ @container(基于容器尺寸)→ View Transitions/新媒体特性(动态范围、首选配色、指针类型)。
  • 可维护性:自定义属性(CSS 变量)支撑 design tokens;@layer:where():is()@scope(提案中)帮助管理优先级;color-mix/lab 等色彩空间。
  • 表现与交互:Transforms/Transitions/Animations → 滚动驱动动画(Scroll-driven Animations)、view-transition-name
  • 工具链/性能:Sass/Less 等预处理器 → PostCSS 自动补全/压缩 → 原子化 + JIT(Tailwind/Uno)→ 编译期 CSS-in-JS(vanilla-extract/stylex/Linaria)减少运行时。

与现代方案的衔接

  • 语义化:从全局命名(BEM)到组件/作用域(CSS Modules、Scoped、CSS-in-JS),再到类名弱语义但组合语义强的原子化;自定义属性承担语义载体。
  • 信息密度:媒体查询/断点复用、Tokens/原子化/recipes(cva/tv/Panda)提高密度,避免在模板重复写数值。
  • 多运行时:小程序/Native 需提前编译、限制动态样式;RSC/SSR 要求零或极薄运行时注入;统一 token 表成为跨端桥梁。
  • 性能:HTTP/2+ 多路复用、content-visibility/contain 提升渲染;JIT/摇树裁剪未用样式;@layer 让原子库与自定义样式共存而不失控。

继续阅读