Custom Highlight API

Baseline 2026DOMを変えずに、テキストの任意の範囲に色や下線を付けるMDN ↗

CSS Custom Highlight API を使うと、テキストの任意の範囲に色を付けられます。

従来は <mark> や <span> で文字を囲む必要があり、DOMを書き換えていました。この方法では DOM は変わらず、CSS で見た目だけを指定します。

検索結果の強調、エディタの色分け、校正ツールの指摘など、CSS とJavaScript を組み合わせたさまざまな表現に使えます。

文章を書き換えると、指摘が更新されます。

新しいサーバを導入する事で、処理を高速化する事が出来る。

設定ファイルを確認して下さい。サーバーの再起動は不要です。

    使っている機能

    new Highlight()
    テキストの範囲(Range)をまとめて持つオブジェクト
    CSS.highlights.set()
    ハイライトに名前を付けて登録する。CSSからはこの名前で指定する
    ::highlight()
    登録した名前のハイライトに、色や背景色などの見た目を指定する疑似要素

    CSS

    /* "search" という名前で登録したハイライトの見た目 */
    ::highlight(search) {
    	background-color: #fde047;
    	color: black;
    }

    JavaScript

    const highlight = new Highlight();
    CSS.highlights.set('search', highlight);
    
    // 一致した範囲を Range で表し、ハイライトに追加する。DOMは変更しない
    const range = new Range();
    range.setStart(node, i);
    range.setEnd(node, i + query.length);
    highlight.add(range);

    使っている機能

    ::highlight()
    見つけた範囲に下線を付ける。色や背景だけでなく text-decoration も指定できる
    text-decoration-line: spelling-error
    ブラウザ標準のスペルミスと同じ波線を引く(Baseline 2025)。grammar-error は文法ミスの波線

    CSS

    /* ブラウザ標準のスペルミス・文法ミスと同じ波線を使う */
    ::highlight(lint-error) {
    	text-decoration-line: spelling-error;
    }
    
    ::highlight(lint-warning) {
    	text-decoration-line: grammar-error;
    }

    JavaScript

    const highlights = {
    	'lint-error': new Highlight(),
    	'lint-warning': new Highlight(),
    };
    CSS.highlights.set('lint-error', highlights['lint-error']);
    CSS.highlights.set('lint-warning', highlights['lint-warning']);