クイークスモード

現行標準 — 最終更新

参加方法:
GitHub whatwg/quirks新しいissueオープン中のissue
Matrixでチャット
コミット:
GitHub whatwg/quirks/commits
このコミット時点のスナップショット
@quirksstandard
テスト:
web-platform-tests quirks/進行中の作業
翻訳 (参考情報):
简体中文
日本語
한국어

概要

クイークスモードは、WebブラウザーがWebとの互換性のためにサポートする必要があるCSSおよびセレクターのクイーク(非標準動作)を定義します。

1. はじめに

1.1. 歴史

ブラウザーにはHTML文書をレンダリングするための複数のレンダリングモードがあります。その理由は基本的には歴史的な偶然によるものです。CSS仕様は既存のWebコンテンツが依存していた従来のブラウザーの動作と互換性がありませんでした。仕様に準拠しつつ既存コンテンツを壊さないために、ブラウザーは新しいレンダリングモード(ノークイークスモード)を導入しました。一部のブラウザーではノークイークスモードでもテーブルセル内の画像のシュリンクラッピング動作が残っており、サイト側がそれに依存し始めたため、仕様通りの動作を実装したブラウザーは3つ目のモード(リミテッドクイークスモード)を導入しました。今振り返れば、デフォルトのCSS動作を既存コンテンツが依存しているものと互換にし、異なる動作にはオプトインできるようにした方がよかったでしょう。これらの異なるモードはその後、CSS以外の点でもいくつかの差異を持つようになりました。

1.2. 目的

この仕様は現時点でブラウザーに存在するすべてのクイークを列挙しているわけではありません。HTML、DOM、CSSOM、CSSOM Viewなどで定義されているクイークも多くあります。[HTML] [DOM] [CSSOM] [CSSOM-VIEW] どこにも仕様化されていないクイークは、上記の2番目の項目によるものが多いです。

2. 共通インフラストラクチャー

2.1. 適合性

本仕様のすべての図、例、および注記は参考情報であり、また明示的に参考情報と記載された節も参考情報です。それ以外の本仕様のすべては規範的です。

規範的な部分における "MUST"、"MUST NOT"、"REQUIRED"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"NOT RECOMMENDED"、"MAY"、および "OPTIONAL" というキーワードは、RFC2119で説明されているとおりに解釈されます。読みやすさのため、これらの単語は本仕様ではすべて大文字では表示されていません。[RFC2119]

2.2. 用語

本仕様で「foo 要素」と記載されている場合は、ローカル名が foo で、名前空間が http://www.w3.org/1999/xhtml である要素を意味します。

本仕様で「foo 属性」と記載されている場合は、ローカル名が foo で、名前空間を持たない属性を意味します。

文書のbody要素は、であり、 文書要素body 要素である場合、その最初の html要素の子要素を指します。そうでなければnullとなります。

文書のbody要素は、HTMLのbody要素とは異なります。後者は frameset 要素でもあり得るためです。

3. CSS

3.1. ハッシュなし16進数カラーのクイーク

CSS Color 4 § B 廃止されたquirkyな16進数カラーを参照。

3.2. 単位なし長さのクイーク

CSS Values 4 § C quirkyな長さを参照。

3.3. 行の高さ計算のクイーク

クイークスモードおよびリミテッドクイークスモードにおいて、以下すべての条件を満たすインラインボックスは、行の高さの計算の目的において、そのボックスのline-heightが0であるかのように振る舞わなければなりません。

3.4. ブロック要素がline-heightを無視するクイーク

クイークスモードおよびリミテッドクイークスモードにおいて、内容がブロックコンテナー要素で構成されているインラインレベル要素の場合、その要素のline-height は、その要素内のラインボックスの最小高さ計算の目的で無視されなければなりません。

これは「strut(ストラット)」が作成されないことを意味します。

3.5. パーセント高さ計算のクイーク

クイークスモードにおいて、要素elementheightの計算のために、 element算出値positionプロパティが relativeまたはstaticであり、 elementheightプロパティの指定値が<percentage>であり、かつelement算出値display プロパティがtable-rowtable-row-grouptable-header-grouptable-footer-grouptable-cell、またはtable-captionでない場合、 element包含ブロックは以下のアルゴリズムで計算し、最初に値が返された時点で中断すること:

  1. 存在する場合は、elementの最も近い先祖の包含ブロックとする。存在しない場合は、初期包含ブロックを返す。

  2. element算出値displayプロパティが table-cellである場合、UA定義の値を返す。

  3. element算出値heightプロパティが autoでない場合はelementを返す。

  4. element算出値positionプロパティが absoluteである場合、またはelementブロックコンテナーでも テーブルラッパーボックスでもない場合はelementを返す。

  5. 最初の手順に戻る。

執筆時点では、テーブル内のパーセント高さがどのように動作するかはCSSで未定義です。本仕様はテーブル内のパーセント高さ計算時の包含ブロックに何を使うべきかについて規定しません。健闘を祈ります!

このクイークはwriting-modeも考慮する必要があります。

3.6. html 要素がビューポート全体を埋めるクイーク

クイークスモードにおいて、文書要素 element が以下のすべての条件を満たす場合:

...であれば、elementborder boxサイズ(ブロックフロー方向)は、以下のアルゴリズムで設定されなければならない:

  1. element縦書きモードの場合、marginselement使用値である margin-leftmargin-rightプロパティの合計とし、そうでなければmargins使用値である margin-topmargin-bottomプロパティの合計とする。

  2. sizeを、初期包含ブロックブロックフロー方向のサイズからmarginsを引いた値とする。

  3. sizeと、要素がCSS仕様に従って持つ通常のborder boxサイズのうち大きい方を返す。

3.7. body 要素が html 要素全体を埋めるクイーク

クイークスモードにおいて、文書のbody要素 body がnullでなく、かつ以下のすべての条件を満たす場合:

...であれば、bodyborder boxサイズ(ブロックフロー方向)は以下のアルゴリズムで設定されなければならない:

  1. body縦書きモードの場合、marginsbody使用値である margin-leftmargin-rightプロパティの合計とし、そうでなければmargins使用値である margin-topmargin-bottomプロパティの合計とする。

  2. sizeを、bodyの親要素のcontent boxブロックフロー方向のサイズからmarginsを引いた値とする。

  3. sizeと、要素がCSS仕様に従って持つ通常のborder boxサイズのうち大きい方を返す。

html および body のwriting-modeが異なる場合はどうすべきか?

3.8. テーブルセル幅計算のクイーク

クイークスモードにおいて、テーブルセルcell包含ブロックとなっているインラインフォーマッティングコンテキストのmin-content幅を計算する目的で、 cell算出値widthプロパティがautoの場合、 そのインラインフォーマッティングコンテキスト内の img 要素でインラインレベルかつ置換要素であるものは、その前後にソフトラップ機会があってはならない。[CSS-TEXT-3] [INTRINSIC]

3.9. テーブルセルnowrap最小幅計算のクイーク

クイークスモードにおいて、以下のすべての条件を満たす要素cellは、オートテーブルレイアウトアルゴリズムにおいて cell算出値widthプロパティと、 テーブルセルのouter min-content幅のうち大きい方を テーブルセルのouter min-content幅とするかのように振る舞わなければならない。[INTRINSIC]

3.10. テーブル折りたたみのクイーク

クイークスモードにおいて、以下のすべての条件を満たす要素tableは、 使用値height プロパティを0使用値border-styleプロパティをnoneとしなければならない。

3.11. text-decorationがテーブルに伝播しないクイーク

クイークスモードにおいて、text-decorationは table 要素へ伝播してはならない。

3.12. テーブルがbodyからcolorを継承するクイーク

クイークスモードにおいて、color プロパティの初期値はquirk-inheritとし、これはキーワードによるマッピングが存在しない特別な値でなければならない。

要素element算出値colorプロパティは、以下のアルゴリズムで計算されなければならない:

  1. elementcolor プロパティの指定値が quirk-inheritでない場合、最後の手順へジャンプ。

  2. elementtable 要素でない場合、最後の手順へジャンプ。

  3. 文書のbody要素がnullの場合、最後の手順へジャンプ。

  4. 使用値color プロパティ(文書のbody要素のもの)を返す。 これ以降の手順は中止。

  5. elementcolor プロパティの指定値がquirk-inheritである場合は、 elementcolor プロパティの指定値をCSS仕様に従った初期値とし、 算出値colorプロパティをCSS仕様に従って返す。

3.13. テーブルセルheightのボックスサイズクイーク

クイークスモードにおいて、算出値display プロパティがtable-cellである要素は、使用値box-sizing プロパティがborder-boxであるかのように振る舞わなければならないが、これはheightmin-heightmax-height プロパティの目的に限る。

4. セレクター

4.1. :activeおよび:hoverのクイーク

クイークスモードにおいて、以下すべての条件を満たす複合セレクター selectorは、:any-linkセレクターにも一致しない要素には一致してはならない。 [SELECTORS4]

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

本仕様には既知のセキュリティまたはプライバシーへの影響はありません。

謝辞

Anne van Kesteren、 Boris Zbarsky、 Chris Rebert、 Dan Mulvey、 David Baron、 Kang-Hao Lu、 Ms2ger、 Simon Sapin、 Tab Atkins に有用なコメントをいただき感謝します。

特にBoris ZbarskyおよびDavid Baronには、MozillaのクイークスをMDNに文書化してくださったことに感謝します。

この標準はSimon Pieters(Mozillazcorpan@gmail.com)によって執筆されました。

知的財産権

Copyright © WHATWG (Apple, Google, Mozilla, Microsoft)。この作業はクリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下で提供されます。その一部がソースコードに組み込まれている場合、ソースコード部分は代わりにBSD 3-Clause Licenseの下でライセンスされます。

これは現行標準です。 特許審査バージョンに関心のある方は、 現行標準審査ドラフトを参照してください。

索引

本仕様で定義されている用語

他仕様で定義されている用語

参考文献

規範的参考文献

[CSS-BACKGROUNDS-3]
Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. URL: https://drafts.csswg.org/css-backgrounds/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. URL: https://drafts.csswg.org/css-box-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. URL: https://drafts.csswg.org/css-cascade-5/
[CSS-COLOR-4]
Chris Lilley; Tab Atkins Jr.; Lea Verou. CSS Color Module Level 4. URL: https://drafts.csswg.org/css-color-4/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 4. URL: https://drafts.csswg.org/css-display/
[CSS-MULTICOL-2]
Florian Rivoal; Rachel Andrew. CSS Multi-column Layout Module Level 2. URL: https://drafts.csswg.org/css-multicol-2/
[CSS-PAGE-FLOATS-3]
Johannes Wilm. CSS Page Floats. URL: https://drafts.csswg.org/css-page-floats/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 3. URL: https://drafts.csswg.org/css-position-3/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. URL: https://drafts.csswg.org/css-sizing-3/
[CSS-TABLES-3]
François Remy; Greg Whitworth; David Baron. CSS Table Module Level 3. URL: https://drafts.csswg.org/css-tables-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS Text Module Level 3. URL: https://drafts.csswg.org/css-text-3/
[CSS-TEXT-4]
Elika Etemad; et al. CSS Text Module Level 4. URL: https://drafts.csswg.org/css-text-4/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. URL: https://drafts.csswg.org/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. URL: https://drafts.csswg.org/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. URL: https://drafts.csswg.org/css-writing-modes-4/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. URL: https://drafts.csswg.org/css2/
[CSS3-MULTICOL]
Florian Rivoal; Rachel Andrew. CSS Multi-column Layout Module Level 1. URL: https://drafts.csswg.org/css-multicol/
[DOM]
Anne van Kesteren. DOM Standard. 現行標準. URL: https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML Standard. 現行標準. URL: https://html.spec.whatwg.org/multipage/
[INTRINSIC]
David Baron. More Precise Definitions of Intrinsic Widths and Table Layout (Proposal). URL: https://dbaron.org/css/intrinsic/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. URL: https://drafts.csswg.org/selectors/

参考情報

[CSSOM]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). URL: https://drafts.csswg.org/cssom/
[CSSOM-VIEW]
Simon Pieters. CSSOM View Module. URL: https://drafts.csswg.org/cssom-view/