Стилизация результатов Ctrl+F с помощью ::search-text
Долгие годы стилизовать подсветку результатов поиска по странице с помощью CSS было попросту невозможно. Браузер полностью владел этим элементом интерфейса. Можно было настроить ::selection для текста, выделенного мышью, но как только пользователь нажимал Ctrl+F, ваша таблица стилей теряла всякое влияние. Ситуация начинает меняться — по крайней мере, в браузерах на основе Chromium.
Псевдоэлемент ::search-text — это новая экспериментальная возможность CSS, позволяющая стилизовать подсветку, создаваемую встроенной функцией поиска по странице. Разберём, что он делает, как работает и чего от него реально стоит ожидать сегодня.
Ключевые выводы
::search-text— это псевдоэлемент-подсветка CSS, который стилизует совпадения встроенного поиска по странице без JavaScript.- Используйте состояние
:current, чтобы визуально отличать активное совпадение от остальных при переходе между результатами. - Применяются только свойства, связанные с отрисовкой:
color,background-color,text-decorationиtext-shadow. Свойства компоновки не имеют эффекта. - Поддержка пока ограничена браузерами на основе Chromium (Chrome, Edge) начиная с версии 144. Firefox и Safari пока не поддерживают эту возможность.
- Функция корректно деградирует, поэтому её безопасно использовать как прогрессивное улучшение без строгого определения поддержки.
Что на самом деле делает ::search-text
Когда пользователь нажимает Ctrl+F (или Cmd+F в macOS) и вводит запрос, браузер подсвечивает совпадающий текст на странице. Исторически эта подсветка отрисовывалась полностью на уровне user-agent браузера — вне досягаемости каких-либо авторских стилей.
::search-text — это псевдоэлемент-подсветка CSS, относящийся к тому же семейству, что и ::selection, ::target-text и ::spelling-error. Он нацеливается на фрагменты текста, которые браузер помечает во время сеанса поиска по странице, давая вам возможность применить собственные стили.
Базовое использование
Синтаксис прост:
::search-text {
background-color: oklch(85% 0.2 90);
color: black;
}
Также можно нацелиться на текущее активное совпадение — то, на котором браузер сфокусирован при переходе между результатами — с помощью состояния :current:
::search-text:current {
background-color: oklch(70% 0.25 60);
color: white;
}
Это различие важно для UX. Без :current все совпадения выглядят одинаково. С ним вы можете визуально отделить активный результат от остальных — именно так браузеры стилизуют его по умолчанию.
Какие стили реально поддерживаются
::search-text следует тем же ограничениям, что и другие псевдоэлементы-подсветки CSS. Вы ограничены конкретным подмножеством свойств, связанных с отрисовкой:
colorbackground-colortext-decoration(и связанные подсвойства)text-shadow
Свойства компоновки, такие как padding, margin, border или font-size, не оказывают никакого влияния. Слой подсветки отрисовывается поверх существующего контента — он не вызывает перерасчёта компоновки.
Чем это отличается от CSS Custom Highlight API
Стоит прояснить различие, поскольку оба механизма связаны с псевдоэлементами-подсветками CSS.
CSS Custom Highlight API позволяет определять собственные именованные подсветки через JavaScript с помощью объектов Range и CSS.highlights.set(). Затем вы стилизуете их через ::highlight(your-name). Это мощный инструмент, но он требует JavaScript, и вы сами контролируете, какой текст подсвечивается.
::search-text устроен иначе: браузер контролирует, что именно подсвечивается (всё, что соответствует запросу поиска по странице), а вы контролируете только визуальный стиль. Никакого JavaScript не требуется. Знать содержимое поискового запроса не нужно.
Discover how at OpenReplay.com.
Поддержка браузерами: экспериментально и только Chromium
Это самое важное при принятии решений для production. По состоянию на начало 2026 года ::search-text доступен только в браузерах на основе Chromium начиная с версии 144 — Chrome и Edge на десктопе. Firefox и Safari пока не поддерживают эту возможность. Отслеживать текущий статус поддержки можно на Can I use.
Относитесь к этому как к прогрессивному улучшению. Браузеры без поддержки ::search-text просто проигнорируют правило и применят стандартную подсветку. Это нормально — функция корректно деградирует.
/* Применяется только в поддерживающих Chromium-браузерах */
::search-text {
background-color: #ffe066;
color: #111;
}
::search-text:current {
background-color: #f5a623;
color: white;
}
Запросы поддержки вроде @supports selector(::search-text) не обязательны для безопасного фолбэка, но могут быть полезны, если вы хотите ограничить область применения стилей или явнее обозначить наличие поддержки.
Стоит добавить уже сейчас
::search-text сегодня не заменит стандартное поведение браузера для большинства пользователей. Но для команд, создающих тщательно проработанные читательские интерфейсы — сайты документации, контентоёмкие приложения, дизайн-системы — это малозатратный способ без JavaScript привести подсветку поиска по странице в соответствие с вашим визуальным языком, по крайней мере для пользователей современных браузеров на Chromium.
Добавьте его в свою таблицу стилей, сочетайте с :current для выделения активного совпадения и следите за поддержкой в Firefox и Safari по мере развития спецификации.
Заключение
Псевдоэлемент ::search-text закрывает небольшой, но давно существовавший пробел в CSS, позволяя авторам стилизовать результаты поиска по странице. Хотя поддержка пока ограничена браузерами Chromium, API прост, не требует JavaScript и аккуратно деградирует в неподдерживаемых средах. Для сайтов, где важен опыт чтения, это простое дополнение, приближающее нативный интерфейс браузера к вашей дизайн-системе.
Часто задаваемые вопросы
Нет. Браузеры, которые не распознают ::search-text, молча проигнорируют правило и применят стандартную подсветку поиска по странице. Стили можно добавить прямо в таблицу стилей без обёртки @supports. Тем не менее, если вы хотите применить принципиально иные fallback-стили, feature query всё же может пригодиться для ясности.
Да, в рамках поддерживаемого набора свойств. Установка background-color и color у ::search-text заменяет стандартный вид подсветки в поддерживающих Chromium-браузерах. Однако нельзя изменить размер, позицию или компоновку подсветки, поскольку применяются только свойства, связанные с отрисовкой. Браузер по-прежнему контролирует, какие диапазоны текста подсвечиваются.
Каждый документ или shadow tree рассматривайте отдельно. Для iframe стили должны быть добавлены внутри документа iframe; CSS родительской страницы не пересекает границы фрейма. Для Shadow DOM детали поддержки стоит проверить в ваших целевых браузерах, поэтому не полагайтесь на это поведение для критически важного UX.
Нет. Интерфейс поиска по странице полностью контролируется браузером, и не существует стандартизированного события или API, раскрывающего активность поиска для скриптов. ::search-text даёт вам только контроль над стилизацией получаемой подсветки. Если вам нужно программное поведение поиска, подходящей альтернативой будет CSS Custom Highlight API в сочетании с собственным полем ввода.
Truly understand users experience
See every user interaction, feel every frustration and track all hesitations with OpenReplay — the open-source digital experience platform. It can be self-hosted in minutes, giving you complete control over your customer data. . Check our GitHub repo and join the thousands of developers in our community..