CSS 自定义高亮 API

CSS 自定义高亮 API 模块提供了一种编程式的方法,可以针对由 Range 对象定义的特定文本范围,而不会影响底层的 DOM 结构。然后可以通过 ::highlight() 伪元素选择这些 Range 对象,并添加和删除高亮样式。该模块的功能可以创建类似于文本编辑器高亮拼写或语法错误,以及代码编辑器高亮语法错误的高亮效果。

CSS 自定义高亮 API 扩展了其他高亮伪元素的概念,例如 ::selection::spelling-error::grammar-error::target-text,它提供了一种创建任意文本范围(在 JavaScript 中定义为 Range 对象)并通过 CSS 进行样式设置的方法,而不是局限于浏览器定义的范围。

自定义高亮 API 的实际应用

要使用 CSS 自定义高亮 API 在网页上启用文本范围的样式设置,你需要创建一个 Range 对象,然后为该范围创建一个 Highlight 对象。使用 HighlightRegistry.set() 方法注册高亮后,你可以使用 ::highlight() 伪元素选择该范围。在 set() 方法中定义的名称用作 ::highlight() 伪元素选择器的参数来选择该范围。通过 ::highlight() 伪元素选择的范围可以使用有限数量的属性进行样式设置。

此示例使用 text-decoration 属性划掉我们 JavaScript 定义的 steps 高亮范围

css
::highlight(steps) {
  text-decoration: line-through;
  color: blue;
}

我们创建了一个具有开始和结束节点(在此例中是同一个节点)的 Range。然后我们使用 CSS HighlightRegistry 接口的 set() 方法将此范围设置为 Highlight

js
const rangeToHighlight = new Range();
const list = document.querySelector("ol");
rangeToHighlight.setStart(list, 0);
rangeToHighlight.setEnd(list, 0);

CSS.highlights.set("steps", new Highlight(rangeToHighlight));

当完成的步骤数发生变化时,事件监听器会更新高亮范围的末尾

js
const currentPositionSlider = document.querySelector("input");
currentPositionSlider.addEventListener("change", (e) => {
  rangeToHighlight.setEnd(list, e.target.value);
});

参考

伪元素

接口

接口扩展

此模块向其他规范中定义的接口添加了属性和方法。

指南

CSS 自定义高亮 API

CSS 自定义高亮 API 的概念和用法,包括创建 RangeHighlight 对象,使用 HighlightRegistry 注册高亮,以及使用 ::highlight() 伪元素为高亮设置样式。

规范

规范
CSS 自定义高亮 API 模块级别 1

另见