高亮:priority 属性

基准线 2025
新推出

自 2025 年 6 月起,此功能已在最新的设备和浏览器版本中可用。此功能可能不适用于旧设备或浏览器。

Highlight 接口的 priority 属性是一个数字,用于确定在重叠部分解决样式冲突时应使用哪个高亮的样式。具有较高 priority 值的 `priority` 属性优先于具有较低 priority 值的 `priority` 属性。

在文档中创建重叠的 Range 对象是可能的。

当重叠的范围被多个不同的 Highlight 对象使用,并且当这些高亮使用 ::highlight 伪元素进行样式设置时,可能会导致样式冲突。

如果两个文本范围重叠,并且都使用 CSS Custom Highlight API 进行高亮显示,并且它们都使用 color CSS 属性进行样式设置,浏览器需要决定在重叠部分使用哪种颜色进行文本样式设置。

如果没有设置 priority,则所有高亮具有相同的优先级,浏览器将选择最近注册的高亮来为重叠部分设置样式。

请注意,高亮的所有样式都会被应用,浏览器只需要在多个重叠的高亮使用相同的 CSS 属性时解决冲突。高亮样式冲突的解决也不取决于 ::highlight 伪元素规则在源中的出现顺序,也不取决于 CSS 属性是否标记为 !important

一个整数。

示例

默认优先级

HTML

html
<p>Time is an illusion. Lunchtime doubly so.</p>

CSS

css
::highlight(highlight-2) {
  color: blue;
}

::highlight(highlight-1) {
  color: white;
  background: orange;
}

JavaScript

js
const text = document.querySelector("p").firstChild;

// Create two overlapping highlights
const range1 = new Range();
range1.setStart(text, 5);
range1.setEnd(text, 25);

const range2 = new Range();
range2.setStart(text, 15);
range2.setEnd(text, 35);

const highlight1 = new Highlight(range1);
const highlight2 = new Highlight(range2);

CSS.highlights.set("highlight-1", highlight1);
CSS.highlights.set("highlight-2", highlight2);

结果

如下所示,默认情况下,在两个已注册的高亮重叠的文本节点部分显示为蓝色,因为 highlight-2 是在 highlight-1 之后注册的。highlight-1 定义的背景颜色包含了整个 range1 范围,因为它不与另一个背景颜色冲突。

设置优先级

HTML

html
<button id="prioritize-1" type="button">Prioritize 1</button>
<button id="prioritize-2" type="button">Prioritize 2</button>
<button id="reset" type="button">Reset</button>
<p>Time is an illusion. Lunchtime doubly so.</p>

CSS

css
::highlight(highlight-1) {
  background-color: blue;
  color: white;
}

::highlight(highlight-2) {
  background-color: orange;
}

JavaScript

js
const text = document.querySelector("p").firstChild;

// Create two overlapping highlights
const range1 = new Range();
range1.setStart(text, 5);
range1.setEnd(text, 25);

const range2 = new Range();
range2.setStart(text, 15);
range2.setEnd(text, 35);

const highlight1 = new Highlight(range1);
const highlight2 = new Highlight(range2);

CSS.highlights.set("highlight-1", highlight1);
CSS.highlights.set("highlight-2", highlight2);

// Add buttons to change the highlight priority.
const prioritize1 = document.querySelector("#prioritize-1");
const prioritize2 = document.querySelector("#prioritize-2");
const reset = document.querySelector("#reset");

prioritize1.addEventListener("click", () => {
  highlight1.priority = 1;
  highlight2.priority = 0;
});

prioritize2.addEventListener("click", () => {
  highlight1.priority = 0;
  highlight2.priority = 1;
});

reset.addEventListener("click", () => {
  highlight1.priority = 0;
  highlight2.priority = 0;
});

结果

如下所示,默认情况下,在两个已注册的高亮重叠的文本节点部分显示为蓝色,因为 highlight-2 是在 highlight-1 之后注册的。

规范

规范
CSS 自定义高亮 API 模块级别 1
# dom-highlight-priority

浏览器兼容性

另见