Skip to content

前言

CSS:从布局到渲染的全链路穿透

第一阶段:重新理解 CSS 的本质

  • CSS 不只是样式表,它是浏览器渲染流程的核心
    解析 → 计算 → 布局 → 绘制 → 合成,每个步骤都影响性能
  • 响应式设计的本质:媒体查询、视口单位、弹性布局
    如何在不同设备上保持一致的用户体验?
  • 现代 CSS 架构:BEM、OOCSS、SMACSS、Tailwind
    模块化、可维护性、扩展性的最佳实践
  • TypeScript + CSS-in-JS:类型安全的样式解决方案
    使用 styled-components、emotion 等工具实现强类型样式
  • CSS 工程化:Linter、Formatter、Preprocessor(Sass, Less)的最佳实践

第二阶段:深入布局机制与容器模型

Flexbox

  • Flexbox 的核心概念:主轴(main axis)、交叉轴(cross axis)、flex-grow/shrink/basis
    如何实现自适应布局?
  • 常见问题与解决方案:
    • 子元素溢出容器怎么办?(overflow: hidden/auto
    • 如何让子元素垂直居中?(align-items: center; justify-content: center
    • Flexbox 在不同浏览器中的兼容性问题及解决方法
  • 实战案例:构建一个响应式的导航栏

Grid

  • Grid 的核心概念:行、列、网格线、区域(grid-template-rows/columns/areas)
    相比 Flexbox,Grid 更适合复杂的二维布局
  • 常见问题与解决方案:
    • 如何实现栅格布局中的对齐方式?(justify-items, align-items
    • 如何定义网格间距?(gap 属性)
    • Grid 在嵌套布局中的应用
  • 实战案例:构建一个响应式的图片画廊

Float 与 Position

  • Float 的前世今生:为什么现在很少用 Float?
    替代方案:Flexbox 和 Grid
  • Position 的四种模式:static、relative、absolute、fixed
    如何实现粘性头部和底部?(position: sticky
  • 常见问题与解决方案:
    • 如何避免浮动塌陷?(clearfix 技术)
    • 如何实现绝对定位元素的居中?(transform: translate(-50%, -50%)

第三阶段:掌握浏览器渲染与优化

  • 浏览器渲染流程:解析 HTML/CSS → 样式计算 → 布局 → 绘制 → 合成
    如何通过 CSS 减少重排和重绘?
  • CSS 性能优化:
    • 使用 will-change 提前告知浏览器哪些属性将要变化
      避免不必要的布局重排
    • 避免使用昂贵的属性:filter, box-shadow, border-radius
      使用硬件加速的替代方案
    • 批量更新样式:使用 requestAnimationFramebatchedUpdates
  • GPU 加速:
    • 如何启用 GPU 加速?translate3d, backface-visibility: hidden
    • 硬件加速的优势与局限性
  • 实战案例:优化一个复杂页面的滚动性能

第四阶段:动画与交互设计

CSS 动画基础

  • 过渡(Transition)与动画(Animation)的区别与应用场景
    Transition 适用于简单的状态切换,Animation 更适合复杂的序列
  • 关键帧(@keyframes)与动画属性详解:
    • animation-name, animation-duration, animation-timing-function
    • 如何实现无限循环动画?(animation-iteration-count: infinite
  • 常见问题与解决方案:
    • 如何避免动画抖动?(will-change
    • 如何控制动画的播放顺序?(animation-delay

Web Animations API

  • Web Animations API 的优势:更强大的控制力与更好的性能
    使用 JavaScript 控制 CSS 动画
  • 基本用法:
    • 创建动画实例:new Animation()
    • 控制动画播放:play(), pause(), reverse()
  • 实战案例:构建一个基于 Web Animations API 的动态加载指示器

交互设计与微动效

  • 微动效的设计原则:提升用户体验的关键细节
    如何通过细微的动画增强用户感知?
  • 常见的交互效果:悬停(hover)、点击反馈、拖拽
    使用 :hover, :active, :focus 状态
  • 实战案例:为按钮添加微动效,提升点击反馈

第五阶段:CSS 架构与工程化

CSS-in-JS vs CSS Modules

  • CSS-in-JS 的优缺点:
    • 优点:组件化、作用域隔离、动态样式生成
    • 缺点:性能开销、调试困难
  • CSS Modules 的优缺点:
    • 优点:静态分析、易于维护、支持 Sass/Less
    • 缺点:需要额外配置、不如 CSS-in-JS 动态
  • 选择标准:
    • 小型项目 vs 大型项目
    • 团队技术栈偏好
    • 性能要求

设计系统与原子化 CSS

  • 设计系统的构建:建立统一的样式库与组件库
    使用 Storybook、Figma 等工具进行协作
  • 原子化 CSS(如 Tailwind CSS)的优势:
    • 提高开发效率
    • 减少冗余代码
    • 易于维护和扩展
  • 实战案例:使用 Tailwind CSS 构建一个企业级 UI 组件库

Linting 与自动化测试

  • CSS Linter:ESLint 插件、Stylelint 的配置与使用
    如何确保团队代码风格一致性?
  • CSS 自动化测试:
    • 使用 Jest 进行单元测试
    • 使用 Cypress 进行端到端测试
    • 测试样式的视觉回归(Percy, Chromatic)

第六阶段:未来趋势与深度集成

CSS 容器查询(Container Queries)

  • 容器查询的引入背景:响应式设计的新范式
    如何根据父容器的尺寸调整样式?
  • 基本用法:
    • @container 规则的语法与示例
    • 支持的浏览器版本与 Polyfill 方案
  • 实战案例:构建一个响应式卡片布局

CSS Houdini

  • CSS Houdini 的革命性意义:允许开发者自定义渲染管道
    如何编写自定义布局、绘制、动画?
  • 基本用法:
    • registerLayout(), registerProperty(), PaintWorklet
    • 示例:创建自定义渐变背景
  • 实战案例:使用 CSS Houdini 实现高级动画效果

CSS 与 Web Components

  • Web Components 的基本概念:Shadow DOM、Custom Elements、HTML Templates
    如何封装可复用的 UI 组件?
  • CSS 与 Shadow DOM 的结合:
    • 样式隔离与穿透
    • 使用 ::part::theme 选择器
  • 实战案例:使用 Web Components 构建一个可复用的对话框组件