Skip to content

CdsHighlight

New in v4.0

Подсветка объясняет, почему строка попала в выдачу: компонент находит в тексте совпадения с запросом (query) или с готовыми диапазонами (matches) и оборачивает их в mark. Берите его в результатах поиска, подсказках автодополнения и отфильтрованных списках.

Storybook GitLab
Покрытие тестами: 100% — хорошее покрытие
API в спеках
9 / 9 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
16 юнит · 0 браузерных
Покрытие кода
100% строк · 100% ветвей замер v4.0.0-alpha.13
A11y (axe)
2 рекомендаций в 10 историях замер v4.0.0-alpha.11

В CdsAutocomplete, CdsCombobox и CdsSelect подсветка совпадений уже встроена — отдельный CdsHighlight там не нужен. Для постоянной метки рядом с текстом возьмите CdsTag, для счётчика — CdsBadge.

Вариации ​

Поисковый запрос ​

Свойство text принимает исходную строку, query — то, что искал пользователь. Запрос может быть строкой или массивом терминов: подсветятся все из них.

Sandbox Storybook

Все вхождения ​

По умолчанию подсвечивается первое вхождение каждого термина. Свойство match-all подсвечивает все — в длинном тексте так видно полную картину.

Sandbox Storybook

Регистр ​

Свойство ignore-case ищет совпадения без учёта регистра. Оно нужно почти всегда, когда запрос набирает пользователь.

Sandbox Storybook

Готовые диапазоны ​

Когда совпадения ищет не браузер, а сервер, передайте их в matches — массив пар [start, end] по индексам исходной строки. Диапазоны имеют приоритет над query, пересекающиеся объединяются автоматически.

Sandbox Storybook

Цвет и плотность ​

Свойство color задаёт цвет подсветки — им же тонируется фон, поэтому достаточно одного значения. opacity меняет плотность фона.

Sandbox Storybook

Разметка ​

Свойство tag задаёт тег обёртки (по умолчанию span), mark-class добавляет свой класс каждому совпадению.

Sandbox Storybook

Рекомендации ​

Сценарии использования ​

Поиск по списку ​

Один и тот же запрос фильтрует список и подсвечивает совпадения в найденных строках. match-all и ignore-case держат подсветку и фильтр согласованными: раз строка попала в выдачу, совпадение в ней видно.

Sandbox Storybook

Запрос из нескольких слов ​

Разбейте введённую фразу на слова и передайте массивом в query — компонент подсветит каждое слово по отдельности, даже если в тексте они стоят далеко друг от друга.

Sandbox Storybook

Совпадения с сервера ​

Полнотекстовый поиск на бэкенде уже знает, какие фрагменты считать совпадениями: он учитывает морфологию, синонимы и опечатки. Отдайте эти диапазоны в matches — клиент ничего не будет искать заново.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
colorstring | undefined—Цвет текста подсветки.
ignoreCaseboolean | undefined—Игнорировать регистр при поиске по query.
markClassstring | undefined—Дополнительный CSS-класс для элемента <mark>.
matchAllboolean | undefined—Подсвечивать все вхождения, а не только первое.
matchesreadonly MatchRange[] | undefined—Готовые диапазоны совпадений [start, end]. Имеют приоритет над query.
opacitystring | number | undefined—Прозрачность фона подсветки (CSS-переменная --cds-highlight-opacity).
querystring | string[] | undefined—Поисковый запрос: строка или массив строк-терминов.
tagstring | JSXComponent<any> | undefined'span'Пользовательский HTML-тег для отображения
textstring | undefined''Текст, в котором выполняется подсветка.