diff --git a/quirks.bs b/quirks.bs index ff4db32..9ac7f54 100644 --- a/quirks.bs +++ b/quirks.bs @@ -3,7 +3,7 @@ Group: WHATWG H1: Quirks Mode Shortname: quirks Text Macro: TWITTER quirksstandard -Text Macro: LATESTRD 2022-02 +Text Macro: LATESTRD 2025-08 Abstract: Quirks Mode defines quirks in CSS and Selectors that are necessary to support for Web browsers for compatibility with the Web. Translation: zh-Hans https://htmlspecs.com/quirks/ Translation: ja https://jp.htmlspecs.com/quirks/ diff --git a/review-drafts/2025-08.bs b/review-drafts/2025-08.bs new file mode 100644 index 0000000..f039f02 --- /dev/null +++ b/review-drafts/2025-08.bs @@ -0,0 +1,526 @@ +
+Group: WHATWG
+Status: RD
+Date: 2025-08-18
+H1: Quirks Mode
+Shortname: quirks
+Text Macro: TWITTER quirksstandard
+Text Macro: LATESTRD 2025-08
+Abstract: Quirks Mode defines quirks in CSS and Selectors that are necessary to support for Web browsers for compatibility with the Web.
+Translation: zh-Hans https://htmlspecs.com/quirks/
+Translation: ja https://jp.htmlspecs.com/quirks/
+Translation: ko https://ko.htmlspecs.com/quirks/
+
+ +
+{
+    "INTRINSIC": {
+        "authors": [ "David Baron" ],
+        "href": "https://dbaron.org/css/intrinsic/",
+        "title": "More Precise Definitions of Intrinsic Widths and Table Layout (Proposal)"
+    }
+}
+
+ +
+urlPrefix: https://drafts.csswg.org/css2/; spec:css2
+    urlPrefix: visuren.html
+        type: dfn; text: block container element
+    urlPrefix: conform.html
+        type: dfn; text: illegal
+        type: dfn; text: replaced element
+    urlPrefix: box.html
+        type: dfn; text: border box; url: #border-edge
+        type: dfn; text: content box; url: #content-edge
+urlPrefix: https://dbaron.org/css/intrinsic/
+    type: dfn;
+        text: min-content width of an inline formatting context; url: #inline-intrinsic-min
+        text: outer min-content width of a table cell; url: #autotable
+
+ + + + + + +

Introduction

+ +

History

+ +

Browsers have several rendering modes to render HTML documents. The reason for this is basically +a historical accident. The CSS specification was incompatible with the behavior of existing browsers +which existing Web content relied on. In order to comply with the specification while not breaking +existing content, browsers introduced a new rendering mode (no-quirks mode). Some browsers still had +the shrink-wrapping behavior for images in table cells in their no-quirks mode, and sites started +relying on that, so browsers that implemented the specification's behavior introduced a third mode +(limited-quirks mode). In hindsight, it would have been better to make the default CSS behavior be +compatible with what the existing content relied on and providing opt-ins to different behavior. The +different modes have since gained a few differences outside of CSS. + + +

Goals

+ + + +

This specification does not enumerate all quirks that currently exist in browsers. A +number of quirks are specified in HTML, DOM, CSSOM and CSSOM View. [[HTML]] [[DOM]] [[CSSOM]] +[[CSSOM-VIEW]] If a quirk is not specified anywhere, it is probably due to the second bullet point +above. + + +

Common infrastructure

+ +

Conformance

+ +

All diagrams, examples, and notes in this specification are non-normative, as are all sections +explicitly marked non-normative. Everything else in this specification is normative. + +

The key words "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT +RECOMMENDED", "MAY", and "OPTIONAL" in the normative parts of this specification are to be +interpreted as described in RFC2119. For readability, these words do not appear in all uppercase +letters in this specification. [[!RFC2119]] + + +

Terminology

+ +

When this specification refers to a "|foo| element", it means an element with the +local name |foo| and having the namespace http://www.w3.org/1999/xhtml. + +

When this specification refers to a "|foo| attribute", it means an attribute with +the local name |foo| and having no namespace. + +

The document's body element is the first child of the document element that is a <{body}> element, if there is one, and the document element is an <{html}> element. Otherwise it is null. + +

The document's body element is different from HTML's the body +element, since the latter can be a <{frameset}> element. + + +

CSS

+ +

The hashless hex color quirk

+ +

See [[CSS-COLOR-4#quirky-color]].

+ + +

The unitless length quirk

+ +

See [[CSS-VALUES-4#deprecated-quirky-length]].

+ + +

The line height calculation quirk

+ +

In quirks mode and limited-quirks mode, an inline box that +matches all of the following conditions, must, for the purpose of line height calculation, act as +if the box had a 'line-height' of zero. + +

+ + +

The blocks ignore line-height quirk

+ +

In quirks mode and limited-quirks mode, for a block container +element whose content is composed of inline-level elements, the element's 'line-height' +must be ignored for the purpose of calculating the minimal height of line boxes within the element. + +

This means that the "strut" is not created.

+ + +

The percentage height calculation +quirk

+ +

In quirks mode, for the purpose of calculating the 'height' of an element +|element|, if the computed value of the 'position' property of |element| is +''position/relative'' or ''position/static'', the specified value for the 'height' property of +|element| is a <>, and |element| does not have a computed value of the 'display' +property that is ''display/table-row'', ''display/table-row-group'', ''display/table-header-group'', +''display/table-footer-group'', ''display/table-cell'' or ''display/table-caption'', the +containing block of |element| must be calculated using the following algorithm, aborting on +the first step that returns a value: + +

    + +
  1. Let |element| be the nearest ancestor containing block of |element|, if there is + one. Otherwise, return the initial containing block. + +

  2. If |element| has a computed value of the 'display' property that is + ''display/table-cell'', then return a UA-defined value. + +

  3. If |element| has a computed value of the 'height' property that is not + ''height/auto'', then return |element|. + +

  4. If |element| has a computed value of the 'position' property that is + ''position/absolute'', or if |element| is a not a block container or a + table wrapper box, then return |element|. + +

  5. Jump to the first step. + +

+ +

It is at the time or writing undefined how percentage heights inside tables work in +CSS. This specification does not try to specify what to use as the containing block for calculating +percentage heights in tables. Godspeed! + +

This quirk needs to take writing modes into account.

+ + +

The <{html}> element fills the viewport +quirk

+ +

In quirks mode, if the document element |element| matches all of +the following conditions: + +

+ +

...then |element| must have its border box size in the block flow direction set +using the following algorithm: + +

    + +
  1. Let |margins| be sum of the used values of the 'margin-left' and 'margin-right' + properties of |element| if |element| has a vertical writing mode, otherwise let |margins| be + the sum of the used values of the 'margin-top' and 'margin-bottom' properties of |element|. + +

  2. Let |size| be the size of the initial containing block in the block flow + direction minus |margins|. + +

  3. Return the bigger value of |size| and the normal border box size the element would + have according to the CSS specification. + +

+ + +

The <{body}> element fills the <{html}> element +quirk

+ +

In quirks mode, if the document's body element |body| is not null and if +it matches all of the following conditions: + +

+ +

...then |body| must have its border box size in the block flow direction set using +the following algorithm: + +

    + +
  1. Let |margins| be the sum of the used values of the 'margin-left' and 'margin-right' + properties of |body| if |body| has a vertical writing mode, otherwise let |margins| be the + sum of the used values of the 'margin-top' and 'margin-bottom' properties of |body|. + +

  2. Let |size| be the size of |body|'s parent element's content box in the block flow + direction minus |margins|. + +

  3. Return the bigger value of |size| and the normal border box size the element would + have according to the CSS specification. + +

+ +

What should happen if the <{html}> and the <{body}> have different writing modes? + + +

The table cell width calculation quirk

+ +

In quirks mode, for the purpose of calculating the min-content width of an +inline formatting context for which a table cell |cell| is the containing block, if +|cell| has a computed value of the 'width' property that is ''width/auto'', <{img}> elements +that are inline-level replaced elements in that inline formatting context must +not have a soft wrap opportunity before or after them. [[!CSS-TEXT-3]] [[!INTRINSIC]]

+ + + + +

The table cell nowrap minimum width +calculation quirk

+ +

In quirks mode, an element |cell| that matches all of the following conditions +must act as if it had an outer min-content width of a table cell in the automatic table +layout algorithm that is the bigger value of |cell|'s computed value of the 'width' property +and the outer min-content width of a table cell. [[!INTRINSIC]] + +

+ + +

The collapsing table quirk

+ +

In quirks mode, an element |table| that matches all of the following conditions +must have a used value of the 'height' property of ''0'' and a used value of the +'border-style' property of ''border-style/none''. + +

+ + +

The text decoration doesn't propagate +into tables quirk

+ +

In quirks mode, text decoration must not propagate +into <{table}> elements.

+ + + + +

The tables inherit color from body +quirk

+ +

In quirks mode, the initial value of the 'color' +property must be ''quirk-inherit'', a special value that has no keyword mapping to it. + +

The computed value of the 'color' property of an element |element| must be calculated +using the following algorithm: + +

    + +
  1. If the specified value of the 'color' property of |element| is not + ''quirk-inherit'', jump to the last step. + +

  2. If |element| is not a <{table}> element, jump to the last step. + +

  3. If the document's body element is null, jump to the last step. + +

  4. Return the used value of the 'color' property of the document's body element. + Abort these steps. + +

  5. If the specified value of the 'color' property of |element| is ''quirk-inherit'', let the + specified value of the 'color' property of |element| be the initial value of the 'color' property + according to the CSS specification. Return the computed value of the 'color' property of + |element| as specified in the CSS specification. + +

+ + + + + +

The table cell height box sizing quirk

+ +

In quirks mode, elements that have a computed value of the 'display' +property of ''display/table-cell'' must act as they have used value of the 'box-sizing' +property of ''box-sizing/border-box'', but only for the purpose of the 'height', 'min-height' and +'max-height' properties. + + +

Selectors

+ +

The :active and :hover quirk

+ +

In quirks mode, a compound selector |selector| that matches all of the +following conditions must not match elements that would not also match the '':any-link'' selector. +[[!SELECTORS4]] + +

+ + +

Security and Privacy Considerations

+ +

There are no known security or privacy impacts in this specification.

+ + +

Acknowledgments

+ +

Thanks to +Anne van Kesteren, +Boris Zbarsky, +Chris Rebert, +Dan Mulvey, +David Baron, +Kang-Hao Lu, +Ms2ger, +Simon Sapin, +and +Tab Atkins +for their useful comments. + +

Special thanks to Boris Zbarsky and David Baron for documenting Mozilla's +quirks in MDN. + +

This standard is written by Simon Pieters (Mozilla, zcorpan@gmail.com).