CSSカスタムハイライトAPIモジュール レベル1

W3C作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2021/WD-css-highlight-api-1-20211215/
最新版:
https://www.w3.org/TR/css-highlight-api-1/
編集者ドラフト:
https://drafts.csswg.org/css-highlight-api-1/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/css-highlight-api-1
フィードバック:
CSSWG課題リポジトリ
仕様内インライン
編集者:
Florian Rivoal (Bloomberg代表)
Sanket Joshi (Microsoft Corporation)
Megan Gardner (Apple Inc.)
この仕様の編集提案:
GitHubエディター

概要

このCSSモジュールは、スクリプトによって識別された文書内の任意の範囲をスタイル設定する仕組みを説明します。

CSSは、構造化文書(HTMLやXMLなど)の画面表示、印刷などのレンダリングを記述する言語です。

この文書のステータス

このセクションは、本書の発行時点でのステータスを説明します。 現在のW3C出版物およびこの技術レポートの最新版は W3C技術レポート索引 https://www.w3.org/TR/ でご覧いただけます。

この文書は、CSSワーキンググループ作業草案として 勧告トラックを用いて発行しました。 作業草案としての公開は W3Cおよびその会員による承認を意味するものではありません。

この文書はドラフトであり、随時更新、置換、または他の文書によって廃止される可能性があります。 この文書を進行中の作業以外として引用することは適切ではありません。

フィードバックは GitHubでissueを提出(推奨)してください。 タイトルに仕様コード「css-highlight-api」を含めてください(例: “[css-highlight-api] …コメント要約…”)。 すべての課題とコメントはアーカイブされています。 または、(アーカイブ) 公開メーリングリスト www-style@w3.orgへ送ってください。

この文書は 2021年11月2日 W3Cプロセス文書に準拠しています。

この文書は、W3C特許ポリシーの下で活動するグループによって作成されました。 W3Cは、グループの成果物に関連して提出された特許開示の 公開リストを管理しています。 このページには特許開示方法の案内も掲載されています。 個人が特許に関する実質的な知識を有し、その特許が必須クレームを含むと考える場合、 W3C特許ポリシー第6節に従って情報開示しなければなりません。

1. はじめに

このセクションは非規範です

カスタムハイライトAPIは、ハイライト疑似要素CSS Pseudo-Elements 4 § 3 ハイライト疑似要素参照)の概念を拡張し、 ウェブ開発者が任意のRangeオブジェクトのテキストをスタイルできるようにします。 これは、ユーザーエージェントによって定義される::selection::inactive-selection::spelling-error、 および'::grammar-error'に限定されずに利用できます。 これは、独自の選択範囲を実装する編集フレームワークや、 仮想化された文書上のページ内検索、 オンライン共同編集を表現する複数選択、 またはスペルチェックフレームワークなど、様々なシナリオで有用です。

カスタムハイライトAPIは、DOM構造に影響を与えず、 Rangeオブジェクトに基づいてテキストにスタイルを適用するプログラム的なハイライト追加・削除方法を提供します。 これはrangeオブジェクトを利用し、 ::highlight()疑似要素を介してアクセスできます。

以下のコードは::highlight()疑似要素を使い、 テキストOne twoに黄色の背景色と青色の前景色を適用しています。 これは、HighlightHighlightRegistry に追加することで実現します(どちらも本仕様で新しく導入された概念です)。 HighlightRange を含み、その境界点はOne twoのテキストを囲みます。
<style>
  :root::highlight(example-highlight) {
    background-color: yellow;
    color: blue;
  }
</style>
<body><span>One </span><span>two </span><span>three…</span>
<script>
  let r = new Range();
  r.setStart(document.body, 0);
  r.setEnd(document.body, 2);

  CSS.highlights.set("example-highlight", new Highlight(r));
</script>

結果イメージ:

One Two three…

2. モジュールの相互作用

このモジュールはInfra標準[INFRA]とWebIDL[WebIDL]に依存します。

CSSおよびDOM標準[DOM]に関する一般的な知識を前提とし、 特にCSS Pseudo-Elements Module Level 4[css-pseudo-4]で定義された仕組みを ハイライト疑似要素の扱いに拡張します。 Selectors Level 4[selectors-4]仕様は、 疑似要素の一般動作を定義しています。

依存関係の全リストは参考文献を参照してください。

注: このドラフトは初期バージョンです。 今後成熟するにつれ、CSS-WGは独立したモジュールとして維持するか、 [css-pseudo-4]またはその後継バージョンに統合することを選択する可能性があります。

3. カスタムハイライトの設定

3.1. カスタムハイライトの作成

カスタムハイライトは、ドキュメントの一部を表すRangeの集合です。 必ずしも要素ツリーに収まる必要はなく、 ネスト構造を無視して任意に要素境界をまたぐことができます。 これらのドキュメント部分の外観に影響を与えたり (§ 4 カスタムハイライトのスタイリング参照)、 関連するイベントを処理したりするために利用できます (§ 6 イベント処理参照)。

カスタムハイライトは、Highlightオブジェクト、つまりsetlikeオブジェクトであり、そのセットエントリAbstractRangeオブジェクトです。Rangeは、コンストラクタに渡すことでカスタムハイライトに追加することができ、 またはsetlikeオブジェクトの通常のAPIを使って そのセットエントリを操作することもできます。

注: カスタムハイライト内のrangeAbstractRange オブジェクトなので、作者はRange オブジェクトとStaticRange オブジェクトのどちらを使うか選択できます。 詳細とその影響については§ 5.2 範囲の更新と無効化を参照してください。

enum HighlightType {
  "highlight",
  "spelling-error",
  "grammar-error"
};

[Exposed=Window]
interface Highlight {
  constructor(AbstractRange... initialRanges);
  setlike<AbstractRange>;
  attribute long priority;
  attribute HighlightType type;
};

priority 属性の詳細は§ 4.2.5 重複ハイライトの優先順位を参照してください。

type 属性の詳細は§ 4.2.6 ハイライトタイプを参照してください。

Highlight(AbstractRange... initialRanges) コンストラクタが呼び出されたとき、次の手順を実行します:
  1. highlightを新しいHighlight オブジェクトとする。
  2. highlightpriority0に設定する。
  3. highlighttypehighlightに設定する。
  4. initialRanges の各rangeについて、 rangeArgIDL値をECMAScript値に変換した結果とし、 組み込みsetlikeのadd関数の手順highlightthis値とし、rangeArgを引数として実行する。
  5. highlightを返す。

3.2. カスタムハイライトの登録

効果を持たせるためには、カスタムハイライト登録し、ハイライトレジストリに入れる必要があります。

ハイライトレジストリは、highlights 属性を介してCSS 名前空間からアクセスでき、 登録済みカスタムハイライト全てを表します。 これは現在のグローバルオブジェクト関連付けられたDocumentに対して有効です。 maplikeであり、通常のメソッドで更新できます。 map entriesは初期状態では空です。

カスタムハイライト登録済みであると言うのは、それがハイライトレジストリに存在する場合です。 後で削除された場合、登録済みではなくなります。

partial namespace CSS {
  readonly attribute HighlightRegistry highlights;
};

[Exposed=Window]
interface HighlightRegistry {
  maplike<DOMString, Highlight>;
};
カスタムハイライトを登録するには、 ハイライトレジストリsetメソッドを呼び出します。 これにより、組み込みmaplikeのset関数の手順this値としてコンテキストオブジェクトを、 keyArgとして渡されたカスタムハイライト名valueArgとして渡されたハイライトを使って実行されます。

カスタムハイライト登録する際に割り当てるカスタムハイライト名は、スタイリング時(§ 4 カスタムハイライトのスタイリング参照)にハイライトを識別するために使われます。

注: カスタムハイライトを登録する際、 作者はカスタムハイライト名に有効なCSS識別子を使うことを推奨します。 有効な識別子でない名前を使うと、CSSでハイライトをスタイルするのが困難、場合によっては不可能になります。

注: 1つのカスタムハイライトに複数のカスタムハイライト名を登録することも可能です。 しかし、1つのハイライトに複数の名前でスタイルを当てると、 それぞれ独立したスタイルセットが割り当てられ、ペインティング時にそれらの競合するスタイルの重ね順を制御できません。 これは作者にとって制限となり、混乱するペインティング結果になる可能性があります(詳細は下記参照)。 よって、スタイリング時はハイライトにつき1つの名前のみ使用することを推奨します

<style>
  div::highlight(bar) {
    color: red;
  }
  div::highlight(foo) {
    color: green;
  }
</style>
<body><div>abc</div>
<script>
  let div = document.body.firstChild;
  let r = new Range();
  r.setStart(div, 0);
  r.setEnd(div, 1);
  let h = new Highlight(r);
  CSS.highlights.set('foo', h);
  CSS.highlights.set('bar', h);
</script>

上記の例では、同じカスタムハイライトオブジェクトがfoobarという名前で登録されています。 それぞれのスタイルルールは同じハイライトを対象とし、詳細度も同じなので、 作者はカスケード順で最後のルールが優先され、ハイライト部分が緑色になると予想するかもしれません。 しかし、各ハイライト名は独立したスタイルセットを持ち、ハイライトは名前ごとに描画されます。 この場合、foobarより先に登録されたため、 まずfooの色(緑)で描画され、次にbarの色(赤)で描画されます。 その結果、ハイライト部分は赤色に見えます。

4. カスタムハイライトのスタイリング

4.1. カスタムハイライト疑似要素:::highlight()

::highlight(<custom-highlight-name>)疑似要素(カスタムハイライト疑似要素とも呼ばれる)は、 文書内で含まれるまたは部分的に含まれる rangeのすべての登録済みカスタムハイライトカスタムハイライト名 <custom-highlight-name>)があれば、それを表します。 <custom-highlight-name>は有効なCSS <ident-token>でなければなりません。

4.2. 処理モデル

4.2.1. 適用可能なプロパティ

カスタムハイライト疑似要素は、 組み込みのハイライト疑似要素と同様に、 限定されたプロパティのみでスタイリングできます。 詳細なリストはCSS Pseudo-Elements 4 § 3.2 ハイライトのスタイリングを参照してください。

4.2.2. デフォルトスタイル

UAはカスタムハイライト疑似要素に対してUAデフォルトスタイルシートでスタイルを定義してはなりません。 カスタムハイライト疑似要素は、その発生元要素のスタイルを継承します。

4.2.3. カスケードと継承

カスケードおよび継承は、 カスタムハイライト疑似要素においても 組み込みのハイライト疑似要素と同様に扱われます。 詳細はCSS Pseudo-Elements 4 § 3.5 カスケードと要素ごとのハイライトスタイルで定義されています。

4.2.4. ペインティング

カスタムハイライトの描画も 組み込みのハイライト疑似要素と同様に処理されます。 詳細はCSS Pseudo-Elements 4 § 3.4 ハイライト領域およびCSS Pseudo-Elements 4 § 3.6 ハイライトのペインティングで指定されています。 なお、以下の補足があります:

4.2.5. 重複ハイライトの優先順位

カスタムハイライトpriority 属性は、その優先順位を定義します。 これはペインティング時のハイライトオーバーレイの重なり順を決めるために使われます(§ 4.2.4 ペインティング参照)。 より高いpriority値ほど重なり順が上になります。 priority 属性が明示的に設定されていない場合、デフォルトは数値0です。

2つ以上のカスタムハイライトが同じ数値priorityの場合、 より最近登録された方が有効priorityが高くなります。

<style>
  :root::highlight(foo) {
    color:blue;
    background-color:yellow;
  }
  :root::highlight(bar) {
    background-color:orange;
  }
</style>
<body>Some text
<script>
  let textNode = document.body.firstChild;

  let r1 = new Range();
  r1.setStart(textNode, 0);
  r1.setEnd(textNode, 6);

  let r2 = new Range();
  r2.setStart(textNode, 3);
  r2.setEnd(textNode, 9);

  let h1 = new Highlight(r1);
  let h2 = new Highlight(r2);

  CSS.highlights.set("foo", h1);
  CSS.highlights.set("bar", h2);
</script>

priorityが設定されていない(h1とh2が同順位)の場合、 カスタムハイライトのスタイルはハイライトレジストリへの挿入順で重ねられます。 描画結果は「Som」が青文字・黄背景、「e t」が青文字・オレンジ背景、「ext」がデフォルト色・オレンジ背景になります。

Some text

h1.priority = 1; を設定すると、h1がh2より上位になり、「Some t」が青文字・黄背景、「ext」がデフォルト色・オレンジ背景になります。

Some text

4.2.6. ハイライトタイプ

カスタムハイライトtype 属性は、作者がハイライトの意味的役割を指定するために使います。 これにより、支援技術がユーザーに意味を伝えることができます。

type属性を明示的に設定しなかった場合、デフォルトはhighlightです。

注:作者はミススペル強調には カスタムハイライトtypespelling-errorに、 文法誤り強調にはgrammar-errorに設定することを推奨します。 その他用途ではtypeはhighlightのままで問題ありません。

UAはカスタムハイライトを支援技術へ提供すべきです。 ハイライトをプラットフォームのアクセシビリティAPIで公開する際、 UAはtype属性で指定された意味を可能な限り具体的に伝える必要があります。

注:例えば、プラットフォームのアクセシビリティAPIがスペルミスや文法誤りを明示できる場合は、 UAはtype=spelling-errorやtype=grammar-errorの意味をそのまま使います。 スペルミスのみ表現可能なAPIなら、spelling-errorとgrammar-error両方をスペルミスとして扱います。 どちらも表現できないAPIなら、すべてのハイライトはtype属性に関係なくhighlightとして公開されます。

注:この初期タイプセットは、Highlight APIでよく使われるであろうケースと、現行のアクセシビリティAPIに一部サポートがあることから選定されました。 他のHighlight API用途には現状アクセシビリティAPIで表現手段がありません。 今後、新たな用途が普及しアクセシビリティAPIで表現可能になれば、HighlightTypeにタイプ追加される可能性があります。

5. 変更への対応

5.1. 再描画

ハイライトレジストリ内のカスタムハイライトの追加や削除、 または登録済みカスタムハイライト内のrangeの追加や削除は、 ユーザーエージェントがレンダリングを再評価し、必要に応じて再描画する原因となります。

また、作者によるpriority の変更や、境界点によるRangeの変更に応じても ユーザーエージェントはハイライトを再描画しなければなりません。

この再評価のタイミング(同期性含む)をどう規定すべきか? [Issue #4596]

5.2. 範囲の更新と無効化

作者はカスタムハイライトRange またはStaticRangeで構築できます。

結果として得られるカスタムハイライトは 同じ文書部分を表し、同じようにスタイリングできます。 ただし、基礎となる文書が変更された場合の挙動は異なります。

Rangeライブ範囲です。 ユーザーエージェントは、範囲またはその境界に重なるDOM変更に応じてRange境界点を調整し、 それに応じて再描画します。ライブ範囲の境界点は作者によって変更することもできます。

一方、ユーザーエージェントはStaticRange境界点を DOM変更に応じて調整してはならず、作成後に作者が変更することもできません。 ユーザーエージェントは実際のStaticRangeを保持し、 ライブRangeによるバックアップはしません。

DOMが変更されるたびに全てのRange オブジェクトを更新することは大きなパフォーマンスコストになります。 DOM変更を監視して反応し、カスタムハイライト内の範囲を調整・再作成したい作者は、 不要なコストを避けるためStaticRangeの利用を強く推奨します。

逆に、StaticRangeを使う作者は、 DOM変更を監視して反応し、 古くなったrangeカスタムハイライトを破棄し新たに作成すべきです。

文書のレンダリング計算時、 その文書ウィンドウに関連付けられたハイライトレジストリ内の 開始ノード終了ノード が、その文書でないNodeshadow-including rootを参照する場合、 ユーザーエージェントはそのrangeを無視しなければなりません。 また、その文書ウィンドウに関連付けられたハイライトレジストリ内のStaticRange有効でない場合も、 ユーザーエージェントはそのrangeを無視しなければなりません。

StaticRangeを含むカスタムハイライト[css-contain-2]との相互作用は問題があるように思われる: 完全に包含された要素であれば、その子孫へのDOM変更は外部要素の無効化や再描画を引き起こさないはずだが、 static rangeの境界点が包含サブツリー内と外部両方にあり、 包含サブツリー内のDOMが変更されて境界点が有効ノードでなくなった場合、 範囲全体が無視され、外部サブツリーの描画にも影響する。 これはスタイル包含の弱点か、 それとも上記無効化ロジックの弱点か、あるいは他の問題か? [Issue #4598]

6. イベント処理

イベントに関するセクションは未定です。https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/master/highlight/events-explainer.md を参照してください。

カスタムハイライト専用のイベント処理機構を持つべきか、疑似要素全般に追加すべきか検討中です。

付録A. プライバシーとセキュリティに関する考慮事項

このセクションは非規範です

本仕様が新たなセキュリティやプライバシー上の懸念を引き起こすとは考えられていません。 もしそうでない疑いがある場合は、CSSワーキンググループまたは共同編集者までご連絡ください。

付録B. 謝辞

このセクションは非規範です

編集者以外で謝辞を述べるべき人物を記載してください。

付録C. 変更履歴

このセクションは非規範です

2020年12月8日作業草案以降の変更点 8 December 2020 Working Draft

様々な編集改善や細かな調整に加え、主な変更点は以下の通りです:

  • HighlightsRegisterHighlightRegistryに名称変更

  • HighlightRegistryから冗長なadd()メソッドを削除 (Issue 6092参照)

  • カスタムハイライトオーバーレイがネイティブハイライトオーバーレイより下に重なるように変更 (Issue 4595参照)

  • ハイライトの優先順位をfloat型から整数型で扱うように変更 (Issue 4592参照)

  • ハイライトの優先順位のデフォルト値を0に定義 (Issue 6136参照)

  • HighlightRegistryをsetlikeからmaplikeに変更し、Highlightからnameプロパティを削除 (Issue 5910参照)

  • 異なるwindowのrangeは描画されないことを明確化 (Issue 6417参照)

  • カスタムハイライトはUAスタイルを持たないことを明記 (Issue 6375参照)

  • rangeの無効化は[DOM]仕様に委譲 (Issue 4597参照)

  • type属性をHighlightに追加し、 ハイライトの意味を明確化、アクセシビリティツールへの公開をサポート (Issue 6498参照)

2020年10月22日作業草案以降の変更点 22 October 2020 Working Draft

2020年10月22日作業草案以降は編集上の変更のみです。 詳細は差分を参照してください。

適合性

文書の規約

適合性要件は、記述的な断定とRFC 2119の用語を組み合わせて表現されます。「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」は、本仕様の規範部分ではRFC 2119に従って解釈されます。ただし、可読性のため、これらの語はすべて大文字ではなく記述されています。

本仕様の文書本文は、明示的に非規範と記載されたセクション、例、注記を除き、すべて規範的です。[RFC2119]

この仕様の例は「例えば」で始まるか、class="example"で規範本文から分離されており、次のように記載されます:

これは参考例の一例です。

参考注記は「注」で始まり、class="note"で規範本文から分離されています。次のようになります:

注:これは参考注記です。

勧告事項は特別な注意を喚起するスタイルで規範的セクションとして示され、他の規範本文と区別するために<strong class="advisement">で記載されます。例えば: UAは必ずアクセシブルな代替手段を提供しなければなりません。

適合クラス

本仕様への適合性は、以下の3つの適合クラスで定義されます:

スタイルシート
CSSスタイルシート
レンダラー
スタイルシートの意味を解釈し、それを利用する文書をレンダリングするUA
オーサリングツール
スタイルシートを作成するUA

スタイルシートは、このモジュールで定義された構文を使うすべての文が、汎用CSS文法および本モジュールで定義された各機能の個別文法に従って有効であれば、本仕様に適合します。

レンダラーは、スタイルシートを関連する仕様で定義された通りに解釈することに加え、本仕様で定義された全機能を正しくパースし、文書を適切にレンダリングしていれば適合とみなされます。ただし、デバイスの制限によりUAが文書を正しくレンダリングできない場合でも、非適合とはなりません。(例えば、UAはモノクロモニターで色をレンダリングする必要はありません。)

オーサリングツールは、汎用CSS文法および本モジュールで定義された各機能の個別文法に従って構文的に正しいスタイルシートを書き、本モジュールで規定されるスタイルシートの他の適合要件も満たしていれば適合とみなされます。

部分実装

作者が将来互換性のあるパース規則を活用してフォールバック値を指定できるように、CSSレンダラーは、利用可能なレベルのサポートがない@ルール、プロパティ、プロパティ値、キーワード、その他の構文要素を無効として扱い、適切に無視しなければなりません。特に、ユーザーエージェントは、未サポートの値がある場合に、マルチ値プロパティ宣言でサポートされる値だけを選択的に適用してはなりません。どれか一つでも値が無効と見なされる場合(未サポート値は必ず無効)、CSSは宣言全体を無視することを要求します。

不安定および独自機能の実装

将来の安定したCSS機能との衝突を避けるため、CSSWGはベストプラクティスに従って、不安定機能および独自拡張の実装を推奨します。

非実験的実装

仕様がCandidate Recommendation段階に達したら、非実験的な実装が可能となり、実装者は正しく仕様通り実装できたCRレベルの機能について、プレフィックスなしの実装をリリースするべきです。

CSSの実装間の相互運用性を確立・維持するため、CSSワーキンググループは、非実験的CSSレンダラーがCSS機能のプレフィックスなし実装をリリースする前に、W3Cへ実装報告書(必要に応じてその報告書用のテストケースも)を提出することを推奨します。提出されたテストケースはCSSワーキンググループによって審査・修正される場合があります。

テストケースや実装報告書の提出についてはCSSワーキンググループのウェブサイトhttps://www.w3.org/Style/CSS/Test/で詳細をご覧ください。ご質問はpublic-css-testsuite@w3.orgのメーリングリストまで。

索引

本仕様で定義される用語

参照によって定義される用語

参考文献

規範参照

[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS カスケードおよび継承 レベル5. 2021年12月3日. 作業草案. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-CONTAIN-2]
Tab Atkins Jr.; Florian Rivoal; Vladimir Levin. CSS コンテインメントモジュール レベル2. 2020年12月16日. 作業草案. URL: https://www.w3.org/TR/css-contain-2/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS 疑似要素モジュール レベル4. 2020年12月31日. 作業草案. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-SYNTAX-3]
Tab Atkins Jr.; Simon Sapin. CSS構文モジュール レベル3. 2019年7月16日. 勧告候補. URL: https://www.w3.org/TR/css-syntax-3/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSSオブジェクトモデル (CSSOM). 2021年8月26日. 作業草案. URL: https://www.w3.org/TR/cssom-1/
[DOM]
Anne van Kesteren. DOM現行標準. 現行標準. URL: https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML標準. 現行標準. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 現行標準. 現行標準. URL: https://infra.spec.whatwg.org/
[RFC2119]
S. Bradner. RFCで要求レベルを示すキーワード. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. セレクター レベル4. 2018年11月21日. 作業草案. URL: https://www.w3.org/TR/selectors-4/
[WebIDL]
Edgar Chen; Timothy Gu. Web IDL現行標準. 現行標準. URL: https://webidl.spec.whatwg.org/

IDL索引

enum HighlightType {
  "highlight",
  "spelling-error",
  "grammar-error"
};

[Exposed=Window]
interface Highlight {
  constructor(AbstractRange... initialRanges);
  setlike<AbstractRange>;
  attribute long priority;
  attribute HighlightType type;
};

partial namespace CSS {
  readonly attribute HighlightRegistry highlights;
};

[Exposed=Window]
interface HighlightRegistry {
  maplike<DOMString, Highlight>;
};

課題索引

この再評価のタイミング(同期性含む)をどう規定すべきか? [Issue #4596]
StaticRangeを含むカスタムハイライト[css-contain-2]との相互作用は問題があるように思われる: 完全に包含された要素であれば、その子孫へのDOM変更は外部要素の無効化や再描画を引き起こさないはずだが、 static rangeの境界点が包含サブツリー内と外部両方にあり、 包含サブツリー内のDOMが変更されて境界点が有効ノードでなくなった場合、 範囲全体が無視され、外部サブツリーの描画にも影響する。 これはスタイル包含の弱点か、 それとも上記無効化ロジックの弱点か、あるいは他の問題か? [Issue #4598]
イベントに関するセクションは未定です。https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/master/highlight/events-explainer.md を参照してください。
カスタムハイライト専用のイベント処理機構を持つべきか、疑似要素全般に追加すべきか検討中です。
編集者以外で謝辞を述べるべき人物を記載してください。