接下来 8 天,我们将开启「CSS 对象模型(CSSOM)」系列专题。本系列专为初中级前端开发者打造,旨在构建一套系统化的知识体系,帮助大家彻底打通样式与脚本的交互逻辑。

以下是本次系列学习的目录大纲预告,内容将全面覆盖 CSSOM 的核心概念、关键 API 及实战应用,带你从底层原理到工程实践,循序渐进地掌握这一前端进阶必备技能。

第一章:CSSOM 概览 —— 什么是 CSS 对象模型?

简述:

CSSOM 是一组允许通过 JavaScript 操作 CSS 的 API,类似于 DOM 操作 HTML。本章将帮助学习者建立对 CSSOM 的基本认知,理解它在前端开发中的定位与价值。

要点:
  • CSSOM 与 DOM 的关系与区别。

  • CSSOM 在浏览器渲染流程中的位置(CSSOM 树)。

  • 为什么需要动态操作 CSS —— 从静态样式到动态交互。

  • CSSOM 的基本组成:模型部分(CSSOM)+ 视图部分(CSSOM View)。

第二章:获取与访问样式表

简述:

学习如何通过 JavaScript 获取文档中所有的样式表,以及如何访问特定的样式表和样式规则。这是使用 CSSOM 进行动态样式操作的第一步。

要点:
  • document.styleSheets —— 获取文档中所有样式表。

  • 通过 <style> 元素的 sheet 属性获取关联样式表。

  • 样式表对象的基本属性与结构。

  • 如何判断样式表是内联还是外部引入。

第三章:操作样式规则(CSSRule)

简述:

深入 CSSOM 的核心 —— 如何读取、添加、修改和删除样式表中的具体样式规则。

要点:
  • cssRules 属性 —— 获取样式表中的所有规则。

  • insertRule() —— 向样式表中添加新规则。

  • removeRule() / deleteRule() —— 删除样式表中的规则。

  • CSSStyleRule 接口:selectorText 和 style 属性。

  • 通过 cssText 批量修改样式规则。

第四章:操作元素的内联样式(HTMLElement.style)

简述:

学习如何直接操作单个元素的 style 属性,这是前端开发中最常用的动态样式修改方式。

要点:
  • element.style 的用法与注意事项。

  • 内联样式与样式表规则的优先级关系。

  • 通过 style 对象读取和设置 CSS 属性(注意驼峰命名转换)。

  • 最佳实践:优先使用 className 切换类,而非直接操作 style。

第五章:获取计算样式(getComputedStyle)

简述:

学习如何获取元素经过所有样式表计算后的最终样式,这是排查样式问题的重要手段。

要点:
  • window.getComputedStyle() 的用法与参数。

  • 获取伪元素样式(如 ::before、::after)。

  • getComputedStyle() 与 element.style 的区别。

  • 实际应用场景:获取元素真实尺寸、颜色等。

第六章:CSSOM View —— 窗口、滚动与布局

简述

CSSOM View 是 DOM API 的扩展,提供与浏览器窗口、滚动和元素布局相关的功能。

要点

6.1 窗口 API

  • moveTo()、moveBy()、resizeTo()、resizeBy() —— 控制窗口位置与大小。

  • window.open() 的第三个参数控制新窗口尺寸。

6.2 滚动 API

  • 视口滚动:scrollX/pageXOffset、scrollY/pageYOffset。

  • scroll()、scrollTo()、scrollBy() —— 控制页面滚动。

  • 元素滚动:scrollTop、scrollLeft、scrollWidth、scrollHeight。

  • scrollIntoView() —— 将元素滚动到可见区域。

  • 滚动事件的监听。

6.3 布局 API

  • 全局尺寸信息(窗口尺寸、视口尺寸)。

  • 元素的布局信息(位置、尺寸等)。

第七章:CSS 类型对象模型(CSS Typed OM)

简述:

CSS Typed OM 是 CSSOM 的现代化升级,将 CSS 值暴露为类型化的 JavaScript 对象而非字符串,大幅提升操作效率和代码可维护性。

注意: 此功能目前尚未在所有主流浏览器中完全支持,属于渐进式增强技术。

要点

7.1 为什么需要 Typed OM?

  • 字符串操作 CSS 的痛点(慢、易出错、缺乏类型安全)。

  • Typed OM 的优势:类型安全、单位感知、性能更好。

7.2 核心接口

  • CSSStyleValue —— 所有 Typed OM CSS 值的基类。

  • CSSStyleValue.parse() 与 parseAll() —— 从 CSS 字符串解析为类型化对象。

  • StylePropertyMap —— CSS 声明块的新表示,替代 CSSStyleDeclaration。

  • StylePropertyMap.set()、append()、delete()、clear()。

  • CSSUnparsedValue —— 表示包含自定义属性的值。

  • CSSTransformValue —— 表示 transform 属性的值。

第八章:实战场景与最佳实践

简述:

将前面所学的知识整合到实际开发场景中,帮助学习者掌握 CSSOM 的真实应用方式。

要点:
  • 动态切换主题样式(暗色/亮色模式)。

  • 实现 CSS 动画的 JavaScript 控制。

  • 根据用户交互动态修改样式规则。

  • 性能优化建议:避免频繁读写样式、使用 requestAnimationFrame。

  • 何时使用 className 切换 vs 直接操作样式。

  • 浏览器兼容性注意事项。

满载干货的 CSSOM 学习旅途即将开启,让我们一起深入浏览器底层,彻底吃透样式与脚本的交互逻辑。准备好你的编辑器,锁定更新,我们明天见!🚀

附录:学习资源与参考资料