Разбираемся с CSS Custom Highlight API
CSS Custom Highlight API предоставляет механизм для стилизации произвольных диапазонов текста в документе с помощью JavaScript и CSS для их стилизации.
Концепции и использование
Стилизация диапазонов текста на веб-странице может быть очень полезной. Например, веб-приложения для редактирования текста выделяют орфографические или грамматические ошибки, а редакторы кода выделяют синтаксические ошибки.
CSS Custom Highlight API расширяет концепцию других псевдоэлементов для выделения, таких как ::selection
, ::spelling-error
, ::grammar-error
и ::target-text
, предоставляя способ создания и стилизации произвольных объектов Range, вместо ограничения браузером определенных диапазонов.
Используя CSS Custom Highlight API, вы можете программно создавать диапазоны текста и выделять их без влияния на структуру DOM на странице.
Существует четыре шага для стилизации диапазонов текста на веб-странице с помощью CSS Custom Highlight API:
- Создание объектов
Range
. - Создание объектов
Highlight
для этих диапазонов. - Регистрация выделений с помощью
HighlightRegistry
. - Стилизация выделений с помощью псевдоэлемента
::highlight()
.
Создание диапазонов
Первый шаг - определить диапазоны текста, которые вы хотите стилизовать, создав объекты Range в JavaScript. Например:
const parentNode = document.getElementById("foo");
const range1 = new Range();
range1.setStart(parentNode, 10);
range1.setEnd(parentNode, 20);
const range2 = new Range();
range2.setStart(parentNode, 40);
range2.setEnd(parentNode, 60);
Создание выделений
Второй шаг - создать объекты Highlight для ваших диапазонов текста.
Несколько диапазонов могут быть связаны с одним выделением. Если вы хотите выделить несколько частей текста одинаковым образом, вам нужно создать одно выделение и инициализировать его соответствующими диапазонами.
const highlight = new Highlight(range1, range2);
Но вы также можете создать столько выделений, сколько вам нужно. Например, если вы создаете совместный текстовый редактор, в котором каждый пользователь получает разный цвет текста, вы можете создать одно выделение на пользователя, как показано в приведенном ниже фрагменте кода:
const user1Highlight = new Highlight(user1Range1, user1Range2);
const user2Highlight = new Highlight(user2Range1, user2Range2, user2Range3);
Каждое выделение может быть стилизовано по-разному.
Регистрация выделений
После создания выделений, их необходимо зарегистрировать, используя HighlightRegistry
, доступный как CSS.highlights
.
Реестр - это объект, похожий на карту, используемый для регистрации выделений по именам, как показано ниже:
CSS.highlights.set("user-1-highlight", user1Highlight);
CSS.highlights.set("user-2-highlight", user2Highlight);
В приведенном выше фрагменте кода user-1-highlight и user-2-highlight - это пользовательские идентификаторы, которые можно использовать в CSS для применения стилей к зарегистрированным выделениям.
Вы можете зарегистрировать столько выделений, сколько вам нужно в реестре, а также удалить выделения и очистить весь реестр.
// Удаление одного выделения из реестра.
CSS.highlights.delete("user-1-highlight");
// Очистка реестра.
CSS.highlights.clear();
Стилизация выделений
Заключительный шаг - это оформление зарегистрированных основных элементов. Это делается с помощью псевдоэлемента ::highlight()
. Например, для оформления пользовательского-1-выделения выделите, зарегистрированное на предыдущем шаге:
::highlight(user-1-highlight) {
background-color: yellow;
color: black;
}
Заключение
Применение CSS Custom Highlight API позволяет легко выделить определенные участки текста на веб-странице, не затрагивая структуру DOM документа.
Однако, следует помнить, что CSS Custom Highlight API является экспериментальной технологией, и перед использованием в продакшене необходимо тщательно изучить таблицу совместимости браузеров, чтобы убедиться в корректной работе функционала на разных платформах.
Например, если вы разрабатываете онлайн-редактор кода, вы можете использовать CSS Custom Highlight API для выделения синтаксических ошибок, или если вы разрабатываете текстовый редактор, то можете использовать этот функционал для выделения грамматических или орфографических ошибок.