Houdini API

Houdini 是一组低级 API,它公开 CSS 引擎的部分功能,使开发人员能够通过接入浏览器的渲染引擎的样式和布局过程来扩展 CSS。Houdini 是一组 API,它使开发人员能够直接访问 CSS 对象模型 (CSSOM),使开发人员能够编写浏览器可以解析为 CSS 的代码,从而创建新的 CSS 功能,而无需等待它们在浏览器中原生实现。

Houdini 的优势

与使用 JavaScript HTMLElement.style 进行样式更改相比,Houdini 能够实现更快的解析时间。浏览器在应用脚本中找到的任何样式更新之前,会解析 CSSOM,包括布局、绘制和合成过程。此外,还会为 JavaScript 样式更新重复布局、绘制和合成过程。Houdini 代码不会等待第一个渲染周期完成。相反,它包含在第一个周期中,从而创建可渲染、可理解的样式。Houdini 提供了一个基于对象的 API,用于在 JavaScript 中处理 CSS 值。

Houdini 的 CSS 类型化对象模型 API 是一个具有类型和方法的 CSS 对象模型,它将值公开为 JavaScript 对象,从而使 CSS 操作比以前基于字符串的 HTMLElement.style 操作更直观。每个元素和样式表规则都有一个样式映射,可以通过其 StylePropertyMap 访问。

CSS Houdini 的一项功能是 Worklet。使用 worklet,您可以创建模块化的 CSS,只需一行 JavaScript 代码即可导入可配置的组件:无需预处理器、后处理器或 JavaScript 框架。

js
CSS.paintWorklet.addModule("csscomponent.js");

这个添加的模块包含 PaintWorkletGlobalScope.registerPaint 函数,这些函数注册完全可配置的 worklet。

注意:您可以编写自己的 worklet,也可以安装其他人创建的组件。Houdini.how 网站是 worklet 的集合,其中包含有关如何使用它们的说明.

CSS paint() 函数是 <image> 类型支持的另一个函数。它接受的参数包括 worklet 的名称,以及 worklet 需要使用的其他参数。worklet 还可以访问元素的自定义属性:无需将它们作为函数参数传递。

在以下示例中,paint() 函数传递了一个名为 myComponent 的 worklet。

css
li {
  background-image: paint(myComponent, stroke, 10px);
  --highlights: blue;
  --lowlights: green;
}

注意:能力越大,责任越大!使用 Houdini,您可以创建自己的 masonry、网格或区域实现,但这样做不一定是最明智的选择。CSS 工作组做了很多工作,以确保每个功能都具有高性能,处理所有边缘情况,并考虑安全性、隐私和无障碍性。在使用 Houdini 扩展 CSS 时,请确保牢记这些注意事项,并从小处着手,然后再进行更具雄心的项目。

Houdini API

您可以在下面找到指向涵盖 Houdini 范围内的 API 的主要参考页面的链接,以及指向指南的链接,这些指南可以在您需要学习如何使用它们时提供帮助。

CSS 属性和值 API

定义了一个用于注册新 CSS 属性的 API。使用此 API 注册的属性将提供一个解析语法,该语法定义类型、继承行为和初始值。

CSS 类型化 OM

将 CSSOM 值字符串转换为有意义的类型化 JavaScript 表示形式,反之亦然,会产生重大的性能开销。CSS 类型化 OM 将 CSS 值公开为类型化 JavaScript 对象,以允许对其进行高效的操作。

CSS 绘制 API

该 API 旨在提高 CSS 的可扩展性,它允许开发人员编写 JavaScript 函数,这些函数可以使用 paint() CSS 函数直接绘制到元素的背景、边框或内容中。

Worklet

一个 API,用于在渲染管道的各个阶段运行脚本,这些脚本独立于主要的 JavaScript 执行环境。Worklet 从概念上类似于 Web Workers,并由渲染引擎调用和扩展。

CSS 布局 API

该 API 旨在提高 CSS 的可扩展性,它使开发人员能够编写自己的布局算法,例如 masonry 或线对齐。

此 API 在 Chrome Canary 中部分支持。它尚未在 MDN 上记录。

CSS 解析器 API

一个 API,更直接地公开 CSS 解析器,用于将任意类似 CSS 的语言解析为轻度类型化的表示形式。

此 API 目前处于提议阶段,并且没有浏览器实现或 MDN 文档。

字体度量 API

一个 API,公开字体度量,提供对排版布局结果的访问。

此 API 目前处于提议阶段,并且没有浏览器实现或 MDN 文档。

另请参阅