Skip to main content

SITIST - сборник статей про веб разработку

CSS ::search-text — кастомная подсветка поиска

Проблема с поиском по странице (Ctrl+F) знакома всем: браузеры накладывают своё стандартное выделение на найденный текст — в Chrome это жёлтое/оранжевое выделение и тёмно-серые буквы, малиновое в Firefox и т.д. Это может резать глаз или сливаться с градиентом и другим сложным фоном.

Дизайнеры тратят часы на идеальный фон и подбор цветов для сайта, а браузерный прямоугольник всё ломает без возможности стилизовать. ::search-text даёт контроль над тем, как будет выглядеть выделение найденного текста.

Спецификация: https://www.w3.org/TR/css-pseudo-4/

На текущий момент работает только в Chrome 144, который вышел в январе 2026. Смотрите поддержку на caniuse


::search-text {
  background: red;
  color: white;
}

Этот код подсветит все совпадения. Но в оригинале Chrome подсвечивал оранжевым текущий найденный элемент. Для этого потребуется псевдокласс :current


::search-text {
  background: red;
  color: white;

  &:current {
    background: darkred;
  }
}

В спецификации упоминаются псевдоклассы :past и :future. Они зарезервированы для подсветки предыдущих и следующих результатов в будущем.


/* Прошлые/будущие совпадения */
::search-text:past {
  opacity: 0.6;
}

::search-text:future {
  opacity: 0.3;
}

Количество свойств, которые можно стилизовать сильно ограничено. Цвет текста, цвет фона, text-decoration. На текущий момент фон градиентом работать отказался. Но поддерживаются кастомные свойства. А это дает хорошие возможности для изменения вида выделенного текста в зависимости от темы сайта или цветов блока.

Подбирайте цвета к своим блокам и темам:


:root {
  --search-text-color: #47293E;
  --search-text-bg: #D5BECA;
  --search-text-current-color: #D5BECA;
  --search-text-current-bg: #47293E;

  @media (prefers-color-scheme: dark) {
    --search-text-color: #a9d9e0;
    --search-text-bg: #4f6e8a;
    --search-text-current-color: #4f6e8a;
    --search-text-current-bg: #a9d9e0;
  }
}

::search-text {
  color: var(--search-text-color);
  background: var(--search-text-bg);

  &:current {
    color: var(--search-text-current-color);
    background: var(--search-text-current-bg);
  }
}
Вверх