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 Issue リポジトリ
仕様内のインライン表示
編集者:
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] …コメントの概要…」。 すべての issue とコメントはアーカイブされます。 または、フィードバックを(アーカイブ済み)公開メーリングリスト www-style@w3.org に送信することもできます。

この文書は、2021年11月2日付 W3C プロセス文書によって管理されています。

この文書は、W3C 特許ポリシーの下で活動するグループによって作成されました。 W3C は、グループの成果物に関連して行われた特許開示の 公開一覧を維持しています。 このページには、特許を開示するための手順も含まれています。 ある個人が、その個人が 必須 クレームを含むと考える特許について実際の知識を有する場合、その情報をW3C 特許 ポリシー第6節に従って開示しなければなりません。

1. はじめに

この節は非規範的です

Custom Highlight API は、ハイライト疑似要素の概念(CSS 疑似要素 4 § 3 ハイライト疑似要素を参照)を拡張し、 ユーザーエージェントが定義する ::selection::inactive-selection::spelling-error、 および '::grammar-error' に限定されるのではなく、 Web 開発者が任意の Range オブジェクトのテキストをスタイル設定する方法を提供します。 これはさまざまなシナリオで有用であり、 独自の選択を実装したい編集フレームワーク、 仮想化された文書に対するページ内検索、 オンライン共同作業を表現するための複数選択、 スペルチェックフレームワークなどが含まれます。

Custom Highlight API は、基盤となる DOM 構造に影響を与えないハイライトを プログラムによって追加および削除する方法を提供し、 代わりに range オブジェクトに基づいてテキストにスタイルを適用します。 これらには ::highlight() 疑似要素を介してアクセスします。

次のコードでは、::highlight() 疑似要素を使用して、 テキスト One two に黄色の背景色と青色の前景色を適用します。 これは、HighlightHighlightRegistry に追加することで行います (これらはいずれも、この仕様で導入される新しい概念です)。 Highlight には、境界点がテキスト One two を囲む Range が含まれます。
<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 Standard [INFRA] および WebIDL [WebIDL] に依存します。

この仕様では、CSS および DOM Standard [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 オブジェクトによって表現され、その set entryAbstractRange オブジェクトです。Range は、コンストラクターに渡すか、 setlike オブジェクトの通常の API を使用して その set entry を操作することにより、カスタム ハイライトに追加できます。

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

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 について、 range を ECMAScript 値に変換した結果を rangeArg とし、 次に組み込み setlike add 関数の手順を、 highlightthis 値として、 rangeArg を引数として実行します。
  5. highlight を返します。

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

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

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

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

partial namespace CSS {
  readonly attribute HighlightRegistry highlights;
};

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

カスタムハイライト登録されるときに割り当てられるカスタム ハイライト名は、スタイル設定時にハイライトを識別するために使用されます (§ 4 カスタムハイライトのスタイル設定を参照)。

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

注: カスタムハイライトを複数のカスタムハイライト名登録することは可能です。 ただし、ハイライトのスタイル設定に複数の名前を使用すると、 ハイライトには複数の異なるスタイルセットが割り当てられ、 ペイント中に、それらのセット内で競合するスタイルの重なり順を制御する方法はありません。 これは作者にとって制約となり、分かりにくいペイント動作を引き起こす可能性があります (詳細な文脈については、以下のを参照してください)。 したがって、作者には、スタイル設定時にハイライトごとに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>

上記の例では、 同じカスタム ハイライトオブジェクトが、foo および bar という名前で登録されています。 各スタイル規則は同じハイライトを対象とし、同じ詳細度を持つため、 作者はカスケード順で最後の規則が優先され、 ハイライトされた内容が緑色になることを期待するかもしれません。 しかし、各ハイライト名には独立したハイライトスタイルのセットがあり、 ハイライトは名前ごとに一度ペイントされます。 この場合、foobar より先に登録されたため、 ハイライトはまず foo の色(緑)でペイントされ、 次に bar の色(赤)でペイントされます。 その結果、ハイライトされた内容は赤色で表示されます。

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

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

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

4.2. 処理モデル

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

カスタムハイライト疑似要素は、 組み込みのハイライト疑似要素と同様に、 限られたプロパティのセットでのみスタイル設定できます。 完全な一覧については、CSS 疑似要素 4 § 3.2 ハイライトのスタイル設定を参照してください。

4.2.2. デフォルトスタイル

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

4.2.3. カスケードと継承

カスケード継承について、 カスタムハイライト疑似要素は、 CSS 疑似要素 4 § 3.5 カスケードと要素ごとのハイライトスタイルで定義されるとおり、 組み込みのハイライト疑似要素と同一に処理されます。

4.2.4. ペイント

カスタム ハイライトのペイントも、 CSS 疑似要素 4 § 3.4 ハイライトの領域およびCSS 疑似要素 4 § 3.6 ハイライトのペイントで規定されるとおり、 組み込みのハイライト疑似要素と同一に処理されますが、 次の点を明確化します。

4.2.5. 重なり合うハイライトの優先度

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

2つ以上のカスタム ハイライトが同じ数値優先度を持つ場合、 最も最近登録されたものが より高い実効優先度を持ちます。

<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>

優先度が設定されていないため (すなわち、h1h2 が同順位であるため)、 カスタムハイライトのスタイルは、ハイライトレジストリへの挿入順で重ねられます。 レンダリング結果では、"Som" は黄色の背景に青いテキスト、 "e t" はオレンジ色の背景に青いテキスト、 "ext" はオレンジ色の背景にデフォルトの色になります。

Some text

h1.priority = 1; と設定すると、h1h2 より上に重なるようになり、 その結果、"Some t" は黄色の背景に青色、 "ext" はオレンジ色の背景にデフォルトの色になります。

Some text

4.2.6. ハイライトの種類

カスタムハイライトtype 属性は、ハイライトの意味論的な意味を指定するために作者によって使用されます。 これにより、支援技術はハイライトをユーザーに提示するときに この意味を含めることができます。

カスタムハイライトの type 属性が明示的に設定されていない場合、 デフォルトの type は highlight になります。

注: 作者には、カスタムハイライトtypespelling-error に設定することが推奨されます。その カスタムハイライトが スペルミスのある内容を強調するために使用される場合です。 作者には、カスタムハイライトtypegrammar-error に設定することが推奨されます。その カスタムハイライトが 文法的に正しくない内容を強調するために使用される場合です。 その他のすべてのユースケースでは、typehighlight のままにしておくのが最適です。

UA は、カスタム ハイライトを支援技術から利用できるようにするべきです。 特定のプラットフォームアクセシビリティ API を使用してハイライトを公開するとき、 UA は、その type 属性で指定されるハイライトの意味論的な意味を、 そのアクセシビリティ API で可能な限り具体的に公開するべきです。

注: たとえば、 プラットフォームアクセシビリティ API がスペルミスと文法エラーを それぞれ具体的に表現する能力を持つ場合、 UA はこれらの能力を使用して、spelling-error および spelling-error を持つハイライトの意味を伝えることが期待されます。 アクセシビリティ API がスペルミスを表現する能力だけを持つ場合、 UA は spelling-error を持つハイライトと grammar-error を持つハイライトの両方を、スペルミスの意味論を使用して伝えることが期待されます。 アクセシビリティ API がスペルミスも文法エラーも表現することをサポートしていない場合、 UA は実際の type にかかわらず、すべてのハイライトを汎用的な highlight として公開します。

注: この初期の種類のセットは、 Highlight API の一般的なユースケースになることが予想され、 現在のプラットフォームアクセシビリティ API に、その意味論を表現するための既存のサポートがある程度存在するため選択されました。 現在、アクセシビリティ API には、 Highlight API のその他の想定されるユースケースの具体的な意味論を表現する方法がありません。 アクセシビリティ API が Highlight API の追加の一般的なユースケースを表現するためのサポートを得るにつれて、 より多くの種類が後から HighlightType に追加される可能性があります。

5. 変更への対応

5.1. 再ペイント

ハイライトレジストリ内のカスタム ハイライト、 または登録済みカスタム ハイライト内のrangeの追加または削除は、 ユーザーエージェントにレンダリングを再評価させ、 適切な場合には再ペイントさせなければなりません。

ユーザーエージェントはまた、 作者による priority の変更、 または登録済みカスタムハイライトRange境界点の変更に応じて、 必要に応じてハイライトを再ペイントしなければなりません。

この再評価の タイミング(および同期性)はどのように規定するべきでしょうか? [Issue #4596]

5.2. Range の更新と無効化

作者は、Range または StaticRange のどちらかを使用してカスタム ハイライトを構築できます。

結果として得られるカスタム ハイライトは文書の同じ部分を表し、 同一の方法でスタイル設定できます。 ただし、基盤となる文書が変更された場合の動作は異なります。

Rangelive rangeです。 ユーザーエージェントは、range と重なる、またはその境界における DOM の変更に応じて、 Range境界 点を調整し、 それに応じて再ペイントします。live range境界 点は、作者によって変更することもできます。

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

DOM が変更されるたびにすべての Range オブジェクトを更新することには、 大きなパフォーマンスコストがあります。 DOM の変更を監視し、それに反応してカスタムハイライト内の range を調整または再作成する予定の作者には、 この高コストでありながら不要な手順を回避するため、StaticRangeを 使用することが強く推奨されます。

逆に、StaticRangeを使用する作者は、 古くなったrangeまたはカスタムハイライトを破棄し、新しいものを再作成することによって、 DOM の変更を監視し、それに対応するべきです。

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

カスタム ハイライト内の StaticRange[css-contain-2] の相互作用には問題があるように見えます。 完全に containment された要素では、 その要素の子孫に対する DOM の変更が、 containment された要素の外部にある要素の無効化や再スタイル設定/再ペイントを 引き起こさないことが期待されます。 しかし、static range の一方の境界点が containment されたサブツリー内にあり、 もう一方の境界点がその外側にあり、 containment されたサブツリー内の DOM が変更されて、 内部の境界点が有効なノードを指さなくなった場合、 range 全体を無視するべきであり、 これは containment されたサブツリー外部のペイントに影響します。 これはスタイル containmentの弱点なのでしょうか、 それとも上記の無効化ロジックの弱点なのでしょうか、 あるいは別の何かなのでしょうか? [Issue #4598]

6. イベント処理

https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/master/highlight/events-explainer.md に基づくイベントに関する節は未定です

カスタム ハイライトには専用のイベント処理メカニズムを持たせるべきでしょうか、 それとも一般に疑似要素へ追加するべきでしょうか?

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

この節は非規範的です

この仕様が新たなセキュリティまたはプライバシー上の懸念を導入するとは考えられていません。 これが正確でないと疑う人には、 CSS ワーキンググループまたは共同編集者に連絡することが推奨されます。

付録 B. 謝辞

この節は非規範的です

これに貢献し、 クレジットに値する人々(編集者を除く)に謝辞を述べる。

付録 C. 変更点

この節は非規範的です

2020年12月8日付 ワーキングドラフト以降の変更点

さまざまな編集上の改善と軽微な調整に加えて、 主な変更点は次のとおりです。

  • HighlightsRegisterHighlightRegistry に改名しました。

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

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

  • ハイライトの優先度を浮動小数点数ではなく整数で扱うようにしました。 (Issue 4592 を参照)

  • ハイライト優先度のデフォルト値を 0 と定義しました。 (Issue 6136 を参照)

  • HighlightRegistry を(setlike ではなく)maplike にし、 Highlight から name プロパティを削除しました。 (Issue 5910 を参照)

  • 誤った window からの range はペイントされないことを明確化しました。 (Issue 6417 を参照)

  • カスタムハイライトには UA スタイルが存在しないことを規定しました。 (Issue 6375 を参照)

  • range の無効化について [DOM] 仕様に委ねました (Issue 4597 を参照)

  • Highlighttype 属性を追加し、異なるハイライトにより明確な意味論を与えることで、 ハイライトをアクセシビリティツールに公開することを支援しました。 (Issue 6498 を参照)

2020年10月22日付 ワーキングドラフト以降の変更点

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 を不適合にはしません。(たとえば、UA は モノクロモニター上で色をレンダリングする必要はありません。)

オーサリングツールは、 一般的な CSS 文法およびこのモジュール内の各機能の個別の文法に従って 構文的に正しいスタイルシートを作成し、 このモジュールで説明されているスタイルシートのその他すべての適合性要件を 満たす場合、この仕様に適合します。

部分的な実装

作者が前方互換な解析規則を利用して フォールバック値を割り当てられるようにするため、CSS レンダラーは、使用可能なレベルの サポートを持たないすべての at-rule、プロパティ、プロパティ値、キーワード、 およびその他の構文構造を無効として扱わなければならず(かつ適切に 無視しなければなりません)。特に、ユーザーエージェントは、 単一の複数値プロパティ宣言において、サポートされていないコンポーネント値を選択的に 無視し、サポートされている値だけを尊重してはなりません。いずれかの値が無効と見なされる場合 (サポートされていない値は無効と見なされなければならないため)、CSS では宣言全体を 無視することが要求されます。

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

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

非実験的な実装

仕様が Candidate Recommendation 段階に達すると、 非実験的な実装が可能になり、実装者は、仕様に従って正しく実装されていることを 実証できる CR レベルの機能について、 接頭辞なしの実装を公開するべきです。

実装間での CSS の相互運用性を確立し維持するため、 CSS ワーキンググループは、非実験的な CSS レンダラーに対して、 CSS 機能の接頭辞なしの実装を公開する前に、 実装報告書(必要な場合は、その実装報告書で使用した テストケースも)を W3C に提出するよう要請しています。W3C に提出されたテストケースは、 CSS ワーキンググループによるレビューと修正の対象となります。

テストケースおよび実装報告書の提出に関する詳細情報は、 CSS ワーキンググループの Web サイト 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日. WD. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-CONTAIN-2]
Tab Atkins Jr.; Florian Rivoal; Vladimir Levin. CSS Containment モジュール レベル 2. 2020年12月16日. WD. URL: https://www.w3.org/TR/css-contain-2/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS 疑似要素モジュール レベル 4. 2020年12月31日. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-SYNTAX-3]
Tab Atkins Jr.; Simon Sapin. CSS 構文モジュール レベル 3. 2019年7月16日. CR. URL: https://www.w3.org/TR/css-syntax-3/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS オブジェクトモデル (CSSOM). 2021年8月26日. WD. 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月. 現行のベストプラクティス. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors レベル 4. 2018年11月21日. WD. 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 索引

この再評価のタイミング(および同期性)はどのように規定するべきでしょうか? [Issue #4596]
カスタムハイライト内の StaticRange[css-contain-2] の相互作用には問題があるように見えます: 完全に containment された要素では、 その要素の子孫に対する DOM の変更が、 containment された要素の外部にある要素の 無効化や再スタイル設定/再ペイントを引き起こさないことが期待されます。 しかし、static range の一方の境界点が containment されたサブツリー内にあり、 もう一方の境界点がその外側にあり、 containment されたサブツリー内の DOM が変更されて、 内部の境界点が有効なノードを指さなくなった場合、 range 全体を無視するべきであり、 これは containment されたサブツリー外部のペイントに影響します。 これはスタイル containmentの弱点なのでしょうか、 それとも上記の無効化ロジックの弱点なのでしょうか、 あるいは別の何かなのでしょうか? [Issue #4598]
イベントに関する節は未定です。以下に基づきます: https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/master/highlight/events-explainer.md
カスタムハイライトには専用のイベント処理メカニズムを持たせるべきでしょうか、 それとも一般に疑似要素へ追加するべきでしょうか?
これに貢献し、クレジットに値する人々(編集者を除く)に謝辞を述べる。