CSS Custom Highlight API를 활용한 웹페이지 텍스트 범위 스타일링

CSS Custom Highlight API - Web APIs | MDN

작성자
발행일
2025년 11월 08일

핵심 요약

  • 1 CSS Custom Highlight API는 DOM 변경 없이 웹페이지 텍스트 범위를 프로그래밍 방식으로 생성하고 스타일링할 수 있는 새로운 웹 표준입니다.
  • 2 이 API는 Range 객체 생성, Highlight 객체 인스턴스화, HighlightRegistry 등록, 그리고 ::highlight() 가상 요소를 통한 스타일링의 네 가지 주요 단계로 구성됩니다.
  • 3 검색 결과 하이라이팅, 문법 오류 표시 등 다양한 텍스트 편집 및 강조 기능 구현에 유용하며, 기존 ::selection 등과 유사하나 임의의 범위에 적용 가능합니다.

도입

웹페이지에서 텍스트 범위를 스타일링하는 것은 텍스트 편집기나 코드 편집기에서 오류를 강조하거나 특정 내용을 표시하는 데 매우 유용합니다. 기존에는 ::selection, ::spelling-error와 같은 브라우저 정의 가상 요소에 의존했지만, CSS Custom Highlight API는 이러한 한계를 넘어 임의의 Range 객체를 생성하고 스타일링할 수 있는 새로운 방법을 제공합니다. 이 API를 사용하면 DOM 구조를 변경하지 않고도 텍스트 범위를 프로그래밍 방식으로 하이라이트할 수 있어, 웹 애플리케이션의 유연성과 성능을 향상시킵니다.

CSS Custom Highlight API의 작동 방식

CSS Custom Highlight API는 웹페이지에서 텍스트 범위를 스타일링하기 위한 네 가지 핵심 단계로 구성됩니다.

  1. Range 객체 생성: JavaScript를 사용하여 스타일링할 텍스트의 시작점과 끝점을 정의하는 Range 객체를 생성합니다. 이는 문서 내의 특정 노드와 오프셋을 지정하여 텍스트 범위를 설정하는 과정입니다.
    • new Range()를 사용하여 객체를 생성하고, setStart()setEnd() 메서드로 범위를 정의합니다.
  2. Highlight 객체 인스턴스화: 생성된 하나 이상의 Range 객체들을 모아 Highlight 객체를 만듭니다. 하나의 Highlight 객체는 여러 Range를 포함할 수 있으며, 이를 통해 여러 텍스트 조각에 동일한 스타일을 적용할 수 있습니다. 각 Highlight 객체는 고유한 스타일을 가질 수 있습니다.
    • new Highlight(range1, range2, ...)와 같이 Range 객체들을 인수로 전달하여 생성합니다.
  3. HighlightRegistry 등록: CSS.highlights를 통해 접근 가능한 전역 HighlightRegistryHighlight 객체를 사용자 정의 식별자와 함께 등록합니다. 이 레지스트리는 Map과 유사한 구조로, 등록된 하이라이트를 이름으로 관리하며, 필요에 따라 하이라이트를 추가, 삭제 또는 전체 초기화할 수 있습니다.
    • CSS.highlights.set("custom-id", highlightObject) 형태로 등록합니다.
  4. ::highlight() 가상 요소를 통한 스타일링: 마지막으로, CSS에서 ::highlight() 가상 요소를 사용하여 HighlightRegistry에 등록된 하이라이트의 사용자 정의 식별자에 스타일을 적용합니다. 이를 통해 background-color, color 등 다양한 CSS 속성을 사용하여 하이라이트의 시각적 표현을 제어할 수 있습니다.
    • ::highlight(custom-id) { /* styles */ }와 같이 CSS 규칙을 작성합니다.

예시: 검색 결과 하이라이팅

이 API는 웹페이지 내 검색 결과 하이라이팅과 같은 동적인 텍스트 강조 기능 구현에 매우 효과적입니다. 사용자 입력에 따라 문서 내에서 일치하는 텍스트를 찾아 Range 객체를 생성하고, 이들을 하나의 Highlight 객체로 묶어 HighlightRegistry에 등록합니다. 이후 CSS를 통해 해당 하이라이트에 스타일을 적용함으로써, DOM을 직접 조작하지 않고도 시각적으로 강조된 검색 결과를 사용자에게 제공할 수 있습니다. 이는 성능 이점과 더불어 코드의 유지보수성을 높이는 데 기여합니다.

결론

CSS Custom Highlight API는 웹페이지에서 텍스트 하이라이팅을 구현하는 데 있어 강력하고 유연한 도구를 제공합니다. DOM을 직접 수정하지 않고도 임의의 텍스트 범위를 스타일링할 수 있다는 점은 성능 최적화 및 코드 복잡성 감소에 기여합니다. 이 API는 텍스트 편집기, 코드 에디터, 검색 결과 강조 등 다양한 웹 애플리케이션에서 사용자 경험을 향상시키는 데 활용될 수 있으며, 개발자에게 더욱 세밀한 제어 권한을 부여합니다. 향후 웹 애플리케이션에서 동적인 텍스트 강조 기능의 표준적인 구현 방식으로 자리매김할 것으로 기대됩니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!