css3-conditional/Overview.html

Wed, 06 Feb 2013 13:40:30 -0700

author
L. David Baron <dbaron@dbaron.org>
date
Wed, 06 Feb 2013 13:40:30 -0700
changeset 7374
34b185ae3bac
parent 7373
ab8be4484fdb
child 7381
06244e910e27
permissions
-rw-r--r--

[css3-conditional] Require whitespace around 'and' and 'or' and after 'not'.

Resolves last call issue 2.

As resolved in http://lists.w3.org/Archives/Public/www-style/2012Dec/0330.html

     1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
     2 "http://www.w3.org/TR/html4/strict.dtd">
     4 <html lang=en>
     5  <head
     6   profile="http://dublincore.org/documents/2008/08/04/dc-html/ http://www.w3.org/2006/03/hcard">
     7   <meta content="text/html; charset=utf-8" http-equiv=Content-Type>
     8   <title>CSS Conditional Rules Module Level 3</title>
    10   <link href="http://purl.org/dc/terms/" rel=schema.dcterms>
    11   <link href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright"
    12    rel=dcterms.rights>
    13   <meta content="CSS Conditional Rules Module Level 3" name=dcterms.title>
    14   <meta content=text name=dcterms.type>
    15   <meta content=2013-02-06 name=dcterms.issued>
    16   <meta content="http://dev.w3.org/csswg/css3-conditional/"
    17    name=dcterms.creator>
    18   <meta content=W3C name=dcterms.publisher>
    19   <meta content="http://www.w3.org/TR/2013/ED-css3-conditional-20130206/"
    20    name=dcterms.identifier>
    21   <link href="../default.css" rel=stylesheet type="text/css">
    22   <link href="../csslogo.ico" rel="shortcut icon" type="image/x-icon">
    23   <link href="http://www.w3.org/StyleSheets/TR/W3C-ED.css" rel=stylesheet
    24    type="text/css"><!--
    25   <script src="http://test.csswg.org/harness/annotate.js#CSS3-CONDITIONAL_DEV" 
    26         type="text/javascript" defer></script
    27 -->
    29  <body>
    30   <div class=head> <!--begin-logo-->
    31    <p><a href="http://www.w3.org/"><img alt=W3C height=48
    32     src="http://www.w3.org/Icons/w3c_home" width=72></a> <!--end-logo-->
    34    <h1>CSS Conditional Rules Module Level 3</h1>
    36    <h2 class="no-num no-toc" id=longstatus-date>Editor's Draft 6 February
    37     2013</h2>
    39    <dl>
    40     <dt>This version:
    42     <dd><a href="http://www.w3.org/TR/2013/ED-css3-conditional-20130206/">
    43      http://www.w3.org/TR/2013/ED-css3-conditional-20130206/</a>
    45     <dt>Latest version:
    47     <dd><a
    48      href="http://www.w3.org/TR/css3-conditional/">http://www.w3.org/TR/css3-conditional/</a>
    50     <dt>Editor's draft:
    52     <dd><a
    53      href="http://dev.w3.org/csswg/css3-conditional/">http://dev.w3.org/csswg/css3-conditional/</a>
    55     <dt>Previous version:
    57     <dd><a
    58      href="http://www.w3.org/TR/2012/WD-css3-conditional-20120911/">http://www.w3.org/TR/2012/WD-css3-conditional-20120911/</a>
    60     <dt>Editors:
    62     <dd class=vcard><a class=fn href="http://dbaron.org/">L. David Baron</a>,
    63      <a class=org href="http://www.mozilla.org/">Mozilla</a>
    65     <dt>Issues list:
    67     <dd>Maintained in document (only editor's draft is current)
    69     <dt>Feedback:
    71     <dd><a
    72      href="http://lists.w3.org/Archives/Public/www-style/">www-style@w3.org</a>
    73      with subject line “<kbd>[css3-conditional] <var>… message topic
    74      …</var></kbd>”
    76     <dt>Test suite:
    78     <dd><a
    79      href="https://test.csswg.org/shepherd/search/spec/css3-conditional/">submitted
    80      tests</a>; no built test suite yet
    81    </dl>
    82    <!--begin-copyright-->
    83    <p class=copyright><a
    84     href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright"
    85     rel=license>Copyright</a> © 2013 <a href="http://www.w3.org/"><abbr
    86     title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup> (<a
    87     href="http://www.csail.mit.edu/"><abbr
    88     title="Massachusetts Institute of Technology">MIT</abbr></a>, <a
    89     href="http://www.ercim.eu/"><abbr
    90     title="European Research Consortium for Informatics and Mathematics">ERCIM</abbr></a>,
    91     <a href="http://www.keio.ac.jp/">Keio</a>, <a
    92     href="http://ev.buaa.edu.cn/">Beihang</a>), All Rights Reserved. W3C <a
    93     href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
    94     <a
    95     href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>
    96     and <a
    97     href="http://www.w3.org/Consortium/Legal/copyright-documents">document
    98     use</a> rules apply.</p>
    99    <!--end-copyright-->
   100    <hr title="Separator for header">
   101   </div>
   103   <h2 class="no-num no-toc" id=abstract>Abstract</h2>
   105   <p>CSS is a language for describing the rendering of structured documents
   106    (such as HTML and XML) on screen, on paper, in speech, etc. This module
   107    contains the features of CSS for conditional processing of parts of style
   108    sheets, conditioned on capabilities of the processor or the document the
   109    style sheet is being applied to. It includes and extends the functionality
   110    of CSS level 2 <a href="#CSS21"
   111    rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a>, which builds on CSS level 1
   112    <a href="#CSS1" rel=biblioentry>[CSS1]<!--{{CSS1}}--></a>. The main
   113    extensions compared to level 2 are allowing nesting of certain at-rules
   114    inside ‘<code class=css>@media</code>’, and the addition of the
   115    ‘<code class=css>@supports</code>’ rule for conditional processing.
   117   <h2 class="no-num no-toc" id=status>Status of this document</h2>
   118   <!--begin-status-->
   120   <p>This is a public copy of the editors' draft. It is provided for
   121    discussion only and may change at any moment. Its publication here does
   122    not imply endorsement of its contents by W3C. Don't cite this document
   123    other than as work in progress.
   125   <p>The (<a
   126    href="http://lists.w3.org/Archives/Public/www-style/">archived</a>) public
   127    mailing list <a
   128    href="mailto:www-style@w3.org?Subject=%5Bcss3-conditional%5D%20PUT%20SUBJECT%20HERE">
   129    www-style@w3.org</a> (see <a
   130    href="http://www.w3.org/Mail/Request">instructions</a>) is preferred for
   131    discussion of this specification. When sending e-mail, please put the text
   132    “css3-conditional” in the subject, preferably like this:
   133    “[<!---->css3-conditional<!---->] <em>…summary of comment…</em>”
   135   <p>This document was produced by the <a href="/Style/CSS/members">CSS
   136    Working Group</a> (part of the <a href="/Style/">Style Activity</a>).
   138   <p>This document was produced by a group operating under the <a
   139    href="/Consortium/Patent-Policy-20040205/">5 February 2004 W3C Patent
   140    Policy</a>. W3C maintains a <a href="/2004/01/pp-impl/32061/status"
   141    rel=disclosure>public list of any patent disclosures</a> made in
   142    connection with the deliverables of the group; that page also includes
   143    instructions for disclosing a patent. An individual who has actual
   144    knowledge of a patent which the individual believes contains <a
   145    href="/Consortium/Patent-Policy-20040205/#def-essential">Essential
   146    Claim(s)</a> must disclose the information in accordance with <a
   147    href="/Consortium/Patent-Policy-20040205/#sec-Disclosure">section 6 of the
   148    W3C Patent Policy</a>.</p>
   149   <!--end-status-->
   151   <p>The following features are at risk:
   153   <ul>
   154    <li>The inclusion of ‘<code class=css>@font-face</code>’ rules and
   155     ‘<code class=css>@keyframes</code>’ rules as allowed within all of
   156     the @-rules in this specification is at risk, though only because of the
   157     relative rates of advancement of specifications. If this specification is
   158     able to advance faster than one or both of the specifications defining
   159     those rules, then the inclusion of those rules will move from this
   160     specification to the specification defining those rules.
   162    <li>The addition of support for @-rules inside of conditional grouping
   163     rules is at risk; if interoperable implementations are not found, it may
   164     be removed to advance the other features in this specification to
   165     Proposed Recommendation.
   167    <li>The ‘<code class=css>@supports</code>’ rule is at risk; if
   168     interoperable implementations are not found, it may be removed to advance
   169     the other features in this specification to Proposed Recommendation.
   170   </ul>
   172   <p>This is a <strong>Last Call Working Draft</strong>. The deadline for
   173    comments is <strong>10 January 2013</strong>. <!--
   175   Things to go in level 4:
   177   * Create some way to put these new conditional things on an @import.
   178   * The @document rule (commented out, down below).
   180 -->
   182   <h2 class="no-num no-toc" id=contents>Table of contents</h2>
   183   <!--begin-toc-->
   185   <ul class=toc>
   186    <li><a href="#introduction"><span class=secno>1. </span>Introduction</a>
   187     <ul class=toc>
   188      <li><a href="#context"><span class=secno>1.1. </span>Background</a>
   190      <li><a href="#placement"><span class=secno>1.2. </span>Module
   191       Interactions</a>
   193      <li><a href="#conventions"><span class=secno>1.3. </span>Document
   194       Conventions</a>
   195     </ul>
   197    <li><a href="#processing"><span class=secno>2. </span>Processing of
   198     conditional group rules</a>
   200    <li><a href="#contents-of"><span class=secno>3. </span>Contents of
   201     conditional group rules</a>
   203    <li><a href="#use"><span class=secno>4. </span>Placement of conditional
   204     group rules</a>
   206    <li><a href="#at-media"><span class=secno>5. </span>Media-specific style
   207     sheets: the ‘<code class=css>@media</code>’ rule</a>
   209    <li><a href="#at-supports"><span class=secno>6. </span>Feature queries:
   210     the ‘<code class=css>@supports</code>’ rule</a>
   211     <ul class=toc>
   212      <li><a href="#support-definition"><span class=secno>6.1.
   213       </span>Definition of support</a>
   214     </ul>
   216    <li><a href="#apis"><span class=secno>7. </span>APIs</a>
   217     <ul class=toc>
   218      <li><a href="#extentions-to-cssrule-interface"><span class=secno>7.1.
   219       </span> Extensions to the <code>CSSRule</code> interface</a>
   221      <li><a href="#the-cssgroupingrule-interface"><span class=secno>7.2.
   222       </span> The <code>CSSGroupingRule</code> interface</a>
   224      <li><a href="#the-cssconditionrule-interface"><span class=secno>7.3.
   225       </span> The <code>CSSConditionRule</code> interface</a>
   227      <li><a href="#the-cssmediarule-interface"><span class=secno>7.4. </span>
   228       The <code>CSSMediaRule</code> interface</a>
   230      <li><a href="#the-csssupportsrule-interface"><span class=secno>7.5.
   231       </span> The <code>CSSSupportsRule</code> interface</a>
   233      <li><a href="#the-css-interface"><span class=secno>7.6. </span> The
   234       <code>CSS</code> interface, and the <code title="">supports()</code>
   235       function</a>
   236     </ul>
   238    <li class=no-num><a href="#grammar">Grammar</a>
   240    <li><a href="#conformance"><span class=secno>8. </span>Conformance</a>
   241     <ul class=toc>
   242      <li><a href="#base-modules"><span class=secno>8.1. </span>Base
   243       Modules</a>
   245      <li><a href="#conformance-classes"><span class=secno>8.2.
   246       </span>Conformance Classes</a>
   248      <li><a href="#partial"><span class=secno>8.3. </span> Partial
   249       Implementations</a>
   251      <li><a href="#experimental"><span class=secno>8.4. </span>Experimental
   252       Implementations</a>
   254      <li><a href="#cr-exit-criteria"><span class=secno>8.5. </span>CR Exit
   255       Criteria</a>
   256     </ul>
   258    <li><a href="#changes"><span class=secno>9. </span> Changes</a>
   260    <li class=no-num><a href="#acknowledgments">Acknowledgments</a>
   262    <li class=no-num><a href="#references">References</a>
   263     <ul class=toc>
   264      <li class=no-num><a href="#normative-references">Normative
   265       references</a>
   267      <li class=no-num><a href="#other-references">Other references</a>
   268     </ul>
   270    <li class=no-num><a href="#index">Index</a>
   271   </ul>
   272   <!--end-toc-->
   274   <h2 id=introduction><span class=secno>1. </span>Introduction</h2>
   276   <h3 id=context><span class=secno>1.1. </span>Background</h3>
   278   <p><em>This section is not normative.</em>
   280   <p><a href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a> defines
   281    one type of conditional group rule, the ‘<code
   282    class=css>@media</code>’ rule, and allows only rulesets (not other
   283    @-rules) inside of it. The ‘<code class=css>@media</code>’ rule
   284    provides the ability to have media-specific style sheets, which is also
   285    provided by style sheet linking features such as ‘<code
   286    class=css>@import</code>’ and <code class=html>&lt;link&gt;</code>. The
   287    restrictions on the contents of ‘<code class=css>@media</code>’ rules
   288    made them less useful; they have forced authors using CSS features
   289    involving @-rules in media-specific style sheets to use separate style
   290    sheets for each medium.
   292   <p>This specification extends the rules for the contents of conditional
   293    group rules to allow other @-rules, which enables authors to combine CSS
   294    features involving @-rules with media specific style sheets within a
   295    single style sheet.
   297   <p>This specification also defines an additional type of conditional group
   298    rule, ‘<code class=css>@supports</code>’, to address author and user
   299    requirements.
   301   <p>The ‘<code class=css>@supports</code>’ rule allows CSS to be
   302    conditioned on implementation support for CSS properties and values. This
   303    rule makes it much easier for authors to use new CSS features and provide
   304    good fallback for implementations that do not support those features. This
   305    is particularly important for CSS features that provide new layout
   306    mechanisms, and for other cases where a set of related styles needs to be
   307    conditioned on property support.
   309   <h3 id=placement><span class=secno>1.2. </span>Module Interactions</h3>
   311   <p>This module replaces and extends the ‘<code class=css>@media</code>’
   312    rule feature defined in <a href="#CSS21"
   313    rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a> section <var>7.2.1</var> and
   314    incorporates the modifications previously made non-normatively by <a
   315    href="#MEDIAQ" rel=biblioentry>[MEDIAQ]<!--{{!MEDIAQ}}--></a> section
   316    <var>1</var>.
   318   <p>Its current definition depends on @-rules defined in <a
   319    href="#CSS3-FONTS" rel=biblioentry>[CSS3-FONTS]<!--{{!CSS3-FONTS}}--></a>
   320    and <a href="#CSS3-ANIMATIONS"
   321    rel=biblioentry>[CSS3-ANIMATIONS]<!--{{!CSS3-ANIMATIONS}}--></a>, but that
   322    dependency is only on the assumption that those modules will advance ahead
   323    of this one. If this module advances faster, then the dependency will be
   324    reversed.
   326   <h3 id=conventions><span class=secno>1.3. </span>Document Conventions</h3>
   328   <p>Conformance requirements are expressed with a combination of descriptive
   329    assertions and RFC 2119 terminology. The key words “MUST”, “MUST
   330    NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”,
   331    “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in the
   332    normative parts of this document are to be interpreted as described in RFC
   333    2119. However, for readability, these words do not appear in all uppercase
   334    letters in this specification.
   336   <p>All of the text of this specification is normative except sections
   337    explicitly marked as non-normative, examples, and notes. <a
   338    href="#RFC2119" rel=biblioentry>[RFC2119]<!--{{!RFC2119}}--></a>
   340   <p>Examples in this specification are introduced with the words “for
   341    example” or are set apart from the normative text with <code
   342    class=html>class="example"</code>, like this:
   344   <div class=example>
   345    <p>This is an example of an informative example.
   346   </div>
   348   <p>Informative notes begin with the word “Note” and are set apart from
   349    the normative text with <code class=html>class="note"</code>, like this:
   351   <p class=note>Note, this is an informative note.
   353   <h2 id=processing><span class=secno>2. </span>Processing of conditional
   354    group rules</h2>
   356   <p>This specification defines some CSS @-rules, called <dfn
   357    id=conditional-group-rules>conditional group rules</dfn>, that associate a
   358    condition with a group of other CSS rules. These different rules allow
   359    testing different types of conditions, but share common behavior for how
   360    their contents are used when the condition is true and when the condition
   361    is false.
   363   <div class=example>
   364    <p>For example, this rule:
   366    <pre>@media print {
   367   #navigation { display: none }
   368 }</pre>
   370    <p>causes a particular CSS rule (making elements with ID "navigation" be
   371     display:none) apply only when the style sheet is used for a print medium.
   372   </div>
   374   <p>Each conditional group rule has a condition, which at any time evaluates
   375    to true or false. When the condition is true, CSS processors
   376    <strong>must</strong> apply the rules inside the group rule as though they
   377    were at the group rule's location; when the condition is false, CSS
   378    processors <strong>must not</strong> apply any of rules inside the group
   379    rule. The current state of the condition does not affect the CSS object
   380    model, in which the contents of the group rule always remain within the
   381    group rule.
   383   <p>This means that when multiple conditional group rules are nested, a rule
   384    inside of both of them applies only when all of the rules' conditions are
   385    true.
   387   <div class=example>For example, with this set of nested rules:
   388    <pre>@media print { // rule (1)
   389   #navigation { display: none }
   390   @media (max-width: 12cm) { // rule (2)
   391     .note { float: none }
   392   }
   393 }</pre>
   394    the condition of the rule marked (1) is true for print media, and the
   395    condition of the rule marked (2) is true when the width of the display
   396    area (which for print media is the page box) is less than or equal to
   397    12cm. Thus the rule ‘<code class=css>#navigation { display: none
   398    }</code>’ applies whenever this style sheet is applied to print media,
   399    and the rule ‘<code class=css>.note { float: none }</code>’ is applied
   400    only when the style sheet is applied to print media <em>and</em> the width
   401    of the page box is less than or equal to 12 centimeters.</div>
   403   <p>When the condition for a conditional group rule changes, CSS processors
   404    <strong>must</strong> reflect that the rules now apply or no longer apply,
   405    except for properties whose definitions define effects of computed values
   406    that persist past the lifetime of that value (such as for some properties
   407    in <a href="#CSS3-TRANSITIONS"
   408    rel=biblioentry>[CSS3-TRANSITIONS]<!--{{CSS3-TRANSITIONS}}--></a> and <a
   409    href="#CSS3-ANIMATIONS"
   410    rel=biblioentry>[CSS3-ANIMATIONS]<!--{{!CSS3-ANIMATIONS}}--></a>).
   412   <h2 id=contents-of><span class=secno>3. </span>Contents of conditional
   413    group rules</h2>
   415   <p>The syntax of each conditional group rule consists of some syntax
   416    specific to the type of rule followed by a <dfn id=group-rule-body>group
   417    rule body</dfn>, which is a block (pair of braces) containing a sequence
   418    of rules.
   420   <p>A group rule body is allowed to contain rulesets and any @-rules that
   421    are allowed at the top level of a style sheet before and after a ruleset.
   422    This means that @-rules that must occur at the beginning of the style
   423    sheet (such as ‘<code class=css>@charset</code>’, ‘<code
   424    class=css>@import</code>’, and ‘<code class=css>@namespace</code>’
   425    rules) are not allowed inside of conditional group rules. Conditional
   426    group rules can be nested.
   428   <p>In terms of the grammar, this specification defines the following
   429    productions for use in the grammar of conditional group rules:
   431   <pre><dfn id="nested_statement">nested_statement</dfn>
   432   : ruleset | <a
   433    href="#media"><i>media</i></a> | page | font_face_rule | keyframes_rule |
   434     <a
   435    href="#supports_rule"><i>supports_rule</i></a>
   436   ;
   438 <dfn
   439    id="group_rule_body">group_rule_body</dfn>
   440   : '{' S* <a
   441    href="#nested_statement"><i>nested_statement</i></a>* '}' S*
   442   ;</pre>
   444   <p> in which all the productions are defined in that grammar with the
   445    exception of <code>font_face_rule</code> defined in <a href="#CSS3-FONTS"
   446    rel=biblioentry>[CSS3-FONTS]<!--{{!CSS3-FONTS}}--></a>,
   447    <code>keyframes_rule</code> defined in <a href="#CSS3-ANIMATIONS"
   448    rel=biblioentry>[CSS3-ANIMATIONS]<!--{{!CSS3-ANIMATIONS}}--></a>, and <a
   449    href="#media"><code>media</code></a> and <a
   450    href="#supports_rule"><code>supports_rule</code></a> defined in this
   451    specification.
   453   <p>In general, future CSS specifications that add new @-rules that are not
   454    forbidden to occur after some other types of rules should modify this <a
   455    href="#nested_statement"><code>nested_statement</code></a> production to
   456    keep the grammar accurate.
   458   <p>Style sheets <strong>must not</strong> use rules other than the allowed
   459    ones inside conditional group rules.
   461   <p>CSS processors <strong>must</strong> ignore rules that are not allowed
   462    within a group rule, and <strong>must</strong> handle invalid rules inside
   463    of group rules as described in <a
   464    href="http://www.w3.org/TR/CSS21/syndata.html#parsing-errors">section 4.2
   465    (Rules for handling parsing errors)</a>, <a
   466    href="http://www.w3.org/TR/CSS21/syndata.html#at-rules">section 4.1.5
   467    (At-rules)</a>, and <a
   468    href="http://www.w3.org/TR/CSS21/syndata.html#rule-sets">section 4.1.7
   469    (Rule sets, declaration blocks, and selectors)</a> of <a href="#CSS21"
   470    rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a>.
   472   <h2 id=use><span class=secno>4. </span>Placement of conditional group rules</h2>
   474   <p>Conditional group rules are allowed at the top-level of a style sheet,
   475    and inside other conditional group rules. CSS processors
   476    <strong>must</strong> process such rules as <a
   477    href="#processing">described above</a>.
   479   <p>Any rules that are not allowed after a ruleset (e.g., ‘<code
   480    class=css>@charset</code>’, ‘<code class=css>@import</code>’, or
   481    ‘<code class=css>@namespace</code>’ rules) are also not allowed after
   482    a conditional group rule. Therefore, style sheets <strong>must
   483    not</strong> place such rules after a conditional group rules, and CSS
   484    processors <strong>must</strong> ignore such rules.
   486   <h2 id=at-media><span class=secno>5. </span>Media-specific style sheets:
   487    the ‘<code class=css>@media</code>’ rule</h2>
   489   <p>The <dfn id=atmedia-rule>‘<code class=css>@media</code>’ rule</dfn>
   490    is a conditional group rule whose condition is a media query. It consists
   491    of the at-keyword ‘<code class=css>@media</code>’ followed by a
   492    (possibly empty) media query list (as defined in <a href="#MEDIAQ"
   493    rel=biblioentry>[MEDIAQ]<!--{{!MEDIAQ}}--></a>), followed by a group rule
   494    body. The condition of the rule is the result of the media query.
   496   <div class=example>
   497    <p>This ‘<code class=css>@media</code>’ rule:
   499    <pre>@media print, (max-width: 600px) {
   500   #extra_navigation { display: none }
   501 }</pre>
   503    <p>has the condition ‘<code class=css>print, (max-width:
   504     600px)</code>’, which is true for print media and for devices whose
   505     width is at most 600px. When either of these is true, the condition of
   506     the rule is true, and the rule ‘<code class=css>#extra_navigation {
   507     display: none }</code>’ is applied.
   508   </div>
   510   <p>In terms of the grammar, this specification extends the <a
   511    href="#media"><code>media</code></a> production in the <a
   512    href="http://www.w3.org/TR/CSS21/grammar.html">Grammar of CSS 2.1</a> (<a
   513    href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a>, Appendix G)
   514    into:
   516   <pre><dfn id=media>media</dfn>
   517   : MEDIA_SYM S* media_query_list <a
   518    href="#group_rule_body"><i>group_rule_body</i></a>
   519   ;</pre>
   521   <p>where the <a href="#group_rule_body"><code>group_rule_body</code></a>
   522    production is defined in this specification, the
   523    <code>media_query_list</code> production is defined in <a href="#MEDIAQ"
   524    rel=biblioentry>[MEDIAQ]<!--{{!MEDIAQ}}--></a>, and the others are defined
   525    in the <a href="http://www.w3.org/TR/CSS21/grammar.html">Grammar of CSS
   526    2.1</a> (<a href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a>,
   527    Appendix G).
   529   <h2 id=at-supports><span class=secno>6. </span>Feature queries: the
   530    ‘<code class=css>@supports</code>’ rule</h2>
   532   <p>The <dfn id=atsupports-rule>‘<code class=css>@supports</code>’
   533    rule</dfn> is a conditional group rule whose condition tests whether the
   534    user agent supports CSS property:value pairs. Authors can use it to write
   535    style sheets that use new features when available but degrade gracefully
   536    when those features are not supported. CSS has existing mechanisms for
   537    graceful degradation, such as ignoring unsupported properties or values,
   538    but these are not always sufficient when large groups of styles need to be
   539    tied to the support for certain features, as is the case for use of new
   540    layout system features.
   542   <p>The syntax of the condition in the ‘<code
   543    class=css>@supports</code>’ rule is slightly more complicated than for
   544    the other conditional group rules (though has some similarities to media
   545    queries) since:
   547   <ul>
   548    <li>negation is needed so that the new-feature styles and the fallback
   549     styles can be separated (within the forward-compatible grammar's rules
   550     for the syntax of @-rules), and not required to override each other
   552    <li>conjunction (and) is needed so that multiple required features can be
   553     tested
   555    <li>disjunction (or) is needed when there are multiple alternative
   556     features for a set of styles, particularly when some of those
   557     alternatives are vendor-prefixed properties or values
   558   </ul>
   560   <p>Therefore, the syntax of the ‘<code class=css>@supports</code>’ rule
   561    allows testing for property:value pairs, and arbitrary conjunctions (and),
   562    disjunctions (or), and negations (not) of them.
   564   <p>This extends the lexical scanner in the <a
   565    href="http://www.w3.org/TR/CSS21/grammar.html">Grammar of CSS 2.1</a> (<a
   566    href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a>, Appendix G) by
   567    adding:
   569   <pre>
   570 @{S}{U}{P}{P}{O}{R}{T}{S} {return SUPPORTS_SYM;}
   571 {O}{R}                    {return OR;}
   572 </pre>
   574   <p>and the grammar by adding
   576   <pre><dfn id="supports_rule">supports_rule</dfn>
   577   : SUPPORTS_SYM S* <a
   578    href="#supports_condition"><i>supports_condition</i></a> S* <a
   579    href="#group_rule_body"><i>group_rule_body</i></a>
   580   ;
   582 <dfn
   583    id="supports_condition">supports_condition</dfn>
   584   : <a
   585    href="#supports_negation"><i>supports_negation</i></a> | <a
   586    href="#supports_conjunction"><i>supports_conjunction</i></a> | <a
   587    href="#supports_disjunction"><i>supports_disjunction</i></a> |
   588     <a
   589    href="#supports_condition_in_parens"><i>supports_condition_in_parens</i></a>
   590   ;
   592 <dfn
   593    id="supports_condition_in_parens">supports_condition_in_parens</dfn>
   594   : ( '(' S* <a
   595    href="#supports_condition"><i>supports_condition</i></a> S* ')' ) | <a
   596    href="#supports_declaration_condition"><i>supports_declaration_condition</i></a> |
   597     <a
   598    href="#general_enclosed"><i>general_enclosed</i></a>
   599   ;
   601 <dfn
   602    id="supports_negation">supports_negation</dfn>
   603   : NOT S+ <a
   604    href="#supports_condition_in_parens"><i>supports_condition_in_parens</i></a>
   605   ;
   607 <dfn
   608    id="supports_conjunction">supports_conjunction</dfn>
   609   : <a
   610    href="#supports_condition_in_parens"><i>supports_condition_in_parens</i></a> ( S+ AND S+ <a
   611    href="#supports_condition_in_parens"><i>supports_condition_in_parens</i></a> )+
   612   ;
   614 <dfn
   615    id="supports_disjunction">supports_disjunction</dfn>
   616   : <a
   617    href="#supports_condition_in_parens"><i>supports_condition_in_parens</i></a> ( S+ OR S+ <a
   618    href="#supports_condition_in_parens"><i>supports_condition_in_parens</i></a> )+
   619   ;
   621 <dfn
   622    id="supports_declaration_condition">supports_declaration_condition</dfn>
   623   : '(' S* declaration ')'
   624   ;
   626 <dfn
   627    id="general_enclosed">general_enclosed</dfn>
   628   : ( FUNCTION | '(' ) ( any | unused )* ')'
   629   ;
   630 </pre>
   632   <p>in which <code>declaration</code>, <code>any</code>, and
   633    <code>unused</code> are the productions in the core syntax of CSS defined
   634    in <a href="http://www.w3.org/TR/CSS21/syndata.html#tokenization">section
   635    4.1.1 (Tokenization)</a> of <a href="#CSS21"
   636    rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a>, and the <code>AND</code> and
   637    <code>NOT</code> tokens are defined in the Media Queries specification <a
   638    href="#MEDIAQ" rel=biblioentry>[MEDIAQ]<!--{{!MEDIAQ}}--></a>.
   640   <p> Implementations <strong>must</strong> parse ‘<code
   641    class=css>@supports</code>’ rules based on the above grammar, and when
   642    interpreting the above grammar, <strong>must</strong> match the production
   643    before an <code>|</code> operator in preference to the one after it.
   645   <p> The above grammar is purposely very loose for forwards-compatibility
   646    reasons, since the <a
   647    href="#general_enclosed"><code>general_enclosed</code></a> production
   648    allows for substantial future extensibility. Any ‘<code
   649    class=css>@supports</code>’ rule that does not parse according to the
   650    grammar above (that is, a rule that does not match this loose grammar
   651    which includes the general_enclosed production) is invalid. Style sheets
   652    <strong>must not</strong> use such a rule and processors
   653    <strong>must</strong> ignore such a rule (including all of its contents).
   655   <p>Each of these grammar terms is associated with a boolean result, as
   656    follows:
   658   <dl>
   659    <dt>supports_condition
   661    <dd> The result is the result of the single child term.
   663    <dt>supports_condition_in_parens
   665    <dd> The result is the result of the single <a
   666     href="#supports_condition"><code>supports_condition</code></a> or <a
   667     href="#supports_declaration_condition"><code>supports_declaration_condition</code></a>
   668     child term.
   670    <dt>supports_negation
   672    <dd> The result is the <em>negation</em> of the result of the <a
   673     href="#supports_condition_in_parens"><code>supports_condition_in_parens</code></a>
   674     child term.
   676    <dt>supports_conjunction
   678    <dd> The result is true if the result of <em>all</em> of the <a
   679     href="#supports_condition_in_parens"><code>supports_condition_in_parens</code></a>
   680     child terms is true; otherwise it is false.
   682    <dt>supports_disjunction
   684    <dd> The result is true if the result of <em>any</em> of the <a
   685     href="#supports_condition_in_parens"><code>supports_condition_in_parens</code></a>
   686     child terms is true; otherwise it is false.
   688    <dt>supports_declaration_condition
   690    <dd> The result is whether the CSS processor <a
   691     href="#support-definition">supports</a> the declaration within the
   692     parentheses.
   694    <dt>general_enclosed
   696    <dd> The result is always false. Additionally, style sheets <strong>must
   697     not</strong> write ‘<code class=css>@supports</code>’ rules that
   698     match this grammar production. (In other words, this production exists
   699     only for future extensibility, and is not part of the description of a
   700     valid style sheet in this level of the specification.) <span
   701     class=note>Note that future levels may define functions or other
   702     parenthesized expressions that can evaluate to true.</span>
   703   </dl>
   705   <p>The condition of the ‘<code class=css>@supports</code>’ rule is the
   706    result of the <a
   707    href="#supports_condition"><code>supports_condition</code></a> term that
   708    is a child of the <a href="#supports_rule"><code>supports_rule</code></a>
   709    term.
   711   <div class=example>
   712    <p>For example, the following rule
   714    <pre>@supports ( display: flexbox ) {
   715   body, #navigation, #content { display: flexbox; }
   716   #navigation { background: blue; color: white; }
   717   #article { background: white; color: black; }
   718 }</pre>
   720    <p>applies the rules inside the ‘<code class=css>@supports</code>’
   721     rule only when ‘<code class=css>display: flexbox</code>’ is
   722     supported.
   723   </div>
   725   <div class=example>
   726    <p>The following example shows an additional ‘<code
   727     class=css>@supports</code>’ rule that can be used to provide an
   728     alternative for when ‘<code class=css>display: flexbox</code>’ is not
   729     supported:
   731    <pre>@supports not ( display: flexbox ) {
   732   body { width: 100%; height: 100%; background: white; color: black; }
   733   #navigation { width: 25%; }
   734   #article { width: 75%; }
   735 }</pre>
   737    <p>Note that the ‘<code class=property>width</code>’ declarations may
   738     be harmful to the flexbox-based layout, so it is important that they be
   739     present only in the non-flexbox styles.
   740   </div>
   742   <div class=example>
   743    <p>The following example checks for support for the ‘<code
   744     class=property>box-shadow</code>’ property, including checking for
   745     support for vendor-prefixed versions of it. When the support is present,
   746     it specifies both ‘<code class=property>box-shadow</code>’ (with the
   747     prefixed versions) and ‘<code class=property>color</code>’ in a way
   748     what would cause the text to become invisible were ‘<code
   749     class=property>box-shadow</code>’ not supported.
   751    <pre>@supports ( box-shadow: 2px 2px 2px black ) or
   752           ( -moz-box-shadow: 2px 2px 2px black ) or
   753           ( -webkit-box-shadow: 2px 2px 2px black ) or
   754           ( -o-box-shadow: 2px 2px 2px black ) {
   755   .outline {
   756     color: white;
   757     -moz-box-shadow: 2px 2px 2px black;
   758     -webkit-box-shadow: 2px 2px 2px black;
   759     -o-box-shadow: 2px 2px 2px black;
   760     box-shadow: 2px 2px 2px black; /* unprefixed last */
   761   }
   762 }</pre>
   763   </div>
   765   <p>To avoid confusion between ‘<code class=css>and</code>’ and ‘<code
   766    class=css>or</code>’, the syntax requires that both ‘<code
   767    class=css>and</code>’ and ‘<code class=css>or</code>’ be specified
   768    explicitly (rather than, say, using commas or spaces for one of them).
   769    Likewise, to avoid confusion caused by precedence rules, the syntax does
   770    not allow ‘<code class=css>and</code>’, ‘<code
   771    class=css>or</code>’, and ‘<code class=css>not</code>’ operators to
   772    be mixed without a layer of parentheses.
   774   <div class=example>
   775    <p>For example, the following rule is not valid:
   777    <pre class=illegal>@supports (transition-property: color) or
   778           (animation-name: foo) and
   779           (transform: rotate(10deg)) {
   780   // ...
   781 }</pre>
   783    <p>Instead, authors must write one of the following:
   785    <pre>@supports ((transition-property: color) or
   786            (animation-name: foo)) and
   787           (transform: rotate(10deg)) {
   788   // ...
   789 }</pre>
   791    <pre>@supports (transition-property: color) or
   792           ((animation-name: foo) and
   793            (transform: rotate(10deg))) {
   794   // ...
   795 }</pre>
   796   </div>
   798   <p>Furthermore, whitespace is required after a ‘<code
   799    class=css>not</code>’ and on both sides of an ‘<code
   800    class=css>and</code>’ or ‘<code class=css>or</code>’.
   802   <p>The declaration being tested must always occur within parentheses, when
   803    it is the only thing in the expression.
   805   <p>
   807   <div class=example>
   808    <p>For example, the following rule is not valid:
   810    <pre class=illegal>@supports display: flexbox {
   811   // ...
   812 }</pre>
   814    <p>Instead, authors must write:
   816    <pre>@supports (display: flexbox) {
   817   // ...
   818 }</pre>
   819   </div>
   821   <p>The syntax allows extra parentheses when they are not needed. This
   822    flexibility is sometimes useful for authors (for example, when commenting
   823    out parts of an expression) and may also be useful for authoring tools.
   825   <div class=example>
   826    <p>For example, authors may write:
   828    <pre>@supports ((display: flexbox)) {
   829   // ...
   830 }</pre>
   831   </div>
   833   <p>A trailing ‘<code class=css>!important</code>’ on a declaration
   834    being tested is allowed, though it won't change the validity of the
   835    declaration.
   837   <div class=example>
   838    <p>For example, the following rule is valid:
   840    <pre>@supports (display: flexbox !important) {
   841   // ...
   842 }</pre>
   843   </div>
   845   <h3 id=support-definition><span class=secno>6.1. </span>Definition of
   846    support</h3>
   848   <p>For forward-compatibility, <a
   849    href="http://www.w3.org/TR/CSS21/syndata.html#declaration">section 4.1.8
   850    (Declarations and properties)</a> of <a href="#CSS21"
   851    rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a> defines rules for handling
   852    invalid properties and values. CSS processors that do not implement or
   853    partially implement a specification <strong>must</strong> treat any part
   854    of a value that they do not implement, or do not have a usable level of
   855    support for, as invalid according to this rule for handling invalid
   856    properties and values, and therefore <strong>must</strong> discard the
   857    declaration as a parse error.
   859   <p>A CSS processor is considered to <dfn id=dfn-support>support</dfn> a
   860    declaration (consisting of a property and value) if it accepts that
   861    declaration (rather than discarding it as a parse error). If a processor
   862    does not implement, with a usable level of support, the value given, then
   863    it <strong>must not</strong> accept the declaration or claim support for
   864    it.
   866   <p>These rules (and the equivalence between them) allow authors to use
   867    fallback (either in the <a href="#CSS1"
   868    rel=biblioentry>[CSS1]<!--{{CSS1}}--></a> sense of declarations that are
   869    overridden by later declarations or with the new capabilities provided by
   870    the ‘<code class=css>@supports</code>’ rule in this specification)
   871    that works correctly for the features implemented. This applies especially
   872    to compound values; implementations must implement all parts of the value
   873    in order to consider the declaration supported, either inside a ruleset or
   874    in the declaration condition of an ‘<code class=css>@supports</code>’
   875    rule.</p>
   876   <!--
   877 <h2 id="at-document">Document queries: the '@document' rule</h2>
   879 <p>The <dfn>'@document' rule</dfn> is a conditional group
   880 rule whose condition depends on the
   881 <a href="#url-of-doc">URL of the document being styled</a>.
   882 This allows style sheets, particularly user style sheets, to have styles
   883 that only apply to a set of pages rather than to all pages using the
   884 style sheet.</p>
   886 <p class="issue">Given that this @-rule is intended primarily for user
   887 style sheets, what should this specification say about its use in author
   888 style sheets?  Should it be forbidden?  Should use instead be
   889 discouraged?  Or should this specification remain neutral on the
   890 topic, since there are valid uses in author style sheets?</p>
   892 <p id="url-of-doc">The <dfn>URL of the document being styled</dfn> is
   893 the URI at which the document is located, excluding any fragment
   894 identifiers.  (This means, for example, that HTTP redirects have been
   895 followed.)  If the styles are being applied inside a complete document
   896 embedded into the presentation of another (e.g., [[HTML5]]'s <code
   897 class="html">iframe</code>, <code class="html">object</code>, or <code
   898 class="html">img</code> elements), the relevant URI is that of the
   899 frame, not of its container.  However, if content from other documents
   900 is mixed in via mechanisms that mix content from one document into
   901 another (e.g., [[SVG11]]'s <code>use</code> element), then the
   902 address of the container document is used.</p>
   904 <p class="note">Note:  In [[HTML5]], this is the
   905 <a href="http://dev.w3.org/html5/spec/dom.html#documents">document's address</a>
   906 of a document in a
   907 <a href="http://dev.w3.org/html5/spec/browsers.html#browsing-context">browsing context</a>.</p>
   909 <div class="issue">What form of normalization is done on URLs and domains
   910 before matching?  In particular, this specification needs to describe:
   911 <ul>
   912 <li>what form is used for the <a href="#url-of-doc">URL of the document
   913 being styled</a> (and what has been normalized in that form)</li>
   914 <li>what normalization (if any) happens to the argument of each of the match
   915 functions before the comparison that they describe and</li>
   916 <li>whether the
   917 comparison algorithm used is string comparison or some other URL
   918 comparison algorithm.</li></ul></div>
   920 <p>The '@document' rule's condition is written as a
   921 comma-separated list of <dfn>URL matching functions</dfn>, and the
   922 condition evaluates to true whenever any one of those functions
   923 evaluates to true.  The following URL matching functions are
   924 permitted:</p>
   926 <dl>
   927   <dt><dfn id="url-exact" title="url()|URL matching functions::exact">&lt;url&gt;</dfn></dt>
   929   <dd>
   930     <p>The 'url()' function is the <dfn>exact url matching
   931     function</dfn>.  It evaluates to true whenever the <a
   932     href="#url-of-doc">URL of the document being styled</a> is exactly
   933     the URL given.</p>
   935     <p class="Note">The 'url()' function, since it is a core syntax
   936     element in CSS, is allowed (subject to different character
   937     limitations and thus escaping requirements) to contain an unquoted
   938     value (in addition to the string values that are allowed as
   939     arguments for all four functions).</p>
   941     <div class="example">
   942       <p>For example, this rule:</p>
   943 <pre>@document url("http://www.w3.org/Style/CSS/") {
   944   #summary { background: yellow; color: black}
   945 }</pre>
   946       <p>styles the <code class="html">summary</code> element on the page
   947       <code>http://www.w3.org/Style/CSS/</code>, but not on any other
   948       pages.</p>
   949     </div>
   950   </dd>
   952   <dt><dfn id="url-prefix" title="url-prefix()|URL matching functions::prefix">url-prefix(&lt;string&gt;)</dfn></dt>
   954   <dd>
   955     <p>The 'url-prefix()' function is the <dfn>url prefix
   956     matching function</dfn>.  It evaluates to true whenever the
   957     <a href="#url-of-doc">URL of the document being styled</a>
   958     has the argument to the function as an
   959     initial substring (which is true when the two strings are equal).
   960     When the argument is the empty string, it evaluates to true for all
   961     documents.</p>
   962     <div class="example">
   963       <p>For example, this rule:</p>
   964 <pre>@document url-prefix("http://www.w3.org/Style/CSS/") {
   965   #summary { background: yellow; color: black}
   966 }</pre>
   967       <p>styles the <code class="html">summary</code> element on the page
   968       <code>http://www.w3.org/Style/CSS/</code> and on the page
   969       <code>http://www.w3.org/Style/CSS/Test</code>, but it does not
   970       affect the page <code>http://www.w3.org/</code> or the page
   971       <code>http://www.example.com/Style/CSS/</code>.</p>
   972     </div>
   973   </dd>
   975   <dt><dfn id="url-domain" title="domain()|URL matching functions::domain">domain(&lt;string&gt;)</dfn></dt>
   977   <dd>
   978     <p>The 'domain()' function is the <dfn>domain
   979     matching function</dfn>.  It evaluates to true whenever
   980     the <a href="#url-of-doc">URL of the document being styled</a>
   981     has a host subcomponent (as defined in [[!URI]])
   982     and that host subcomponent is exactly the argument to the
   983     'domain()' function or a final substring of the host
   984     component is a period (U+002E) immediately followed by the argument
   985     to the 'domain()' function.</p>
   986     <div class="example">
   987       <p>For example, this rule:</p>
   988 <pre>@document domain("w3.org") {
   989   body { font-size: 16px ! important }
   990 }</pre>
   991       <p>changes the font size of the body element for pages such as
   992       <code>http://www.w3.org/Style/CSS/</code> and
   993       <code>http://w3.org/Style/CSS/</code> and
   994       <code>http://lists.w3.org/Archives/Public/www-style/</code>
   995       but it does not affect the page
   996       <code>http://www.example.com/Style/CSS/</code>.</p>
   997     </div>
   998   </dd>
  1000   <dt><dfn id="url-regexp" title="regexp()|URL matching functions::regular expression">regexp(&lt;string&gt;)</dfn></dt>
  1002   <dd>
  1003     <p>The contents of the &lt;string&gt; argument <strong>must</strong>
  1004     match the JavaScript <code>Pattern</code> production
  1005     ([[!ECMA-262-5.1]], section 15.10.1).  However,
  1006     failing to do so is not a CSS syntax error and does not trigger any
  1007     error handling for CSS syntax errors.</p>
  1009     <p>The ''regexp()'' function evaluates to true whenever the string
  1010     argument compiled as a JavaScript regular expression with the
  1011     <code>global</code>, <code>ignoreCase</code> and
  1012     <code>multiline</code> flags <em>disabled</em>
  1013     (see [[!ECMA-262-5.1]], sections 15.10.7.2 through 15.10.7.4)
  1014     compiles successfully and the resulting regular expression matches
  1015     the entirety of the
  1016     <a href="#url-of-doc">URL of the document being styled</a>.</p>
  1018     <p class="note">Note that regular expression must match the entire
  1019     URL, not just a part of it.</p>
  1021     <p class="note">Note that this definition intentionally matches the
  1022     behavior of the <a
  1023     href="http://dev.w3.org/html5/spec/common-input-element-attributes.html#attr-input-pattern"><code class="html">pattern</code>
  1024     attribute</a> on the <code class="html">input</code> element
  1025     in [[HTML5]].</p>
  1027     <div class="example">
  1028       <p>For example, this rule:</p>
  1029 <pre>@document regexp("http://www.w3.org/TR/\\d{4}/[^/]*-CSS2-\\d{8}/") {
  1030   body { font-size: 20px ! important }
  1031 }</pre>
  1032       <p>changes the font size of the body element for pages such as
  1033       <code>http://www.w3.org/TR/2011/PR-CSS2-20110412/</code>.</p>
  1034       <p class="note">Note that the backslashes in the regular
  1035       expression require CSS escaping as ''\\''.</p>
  1036     </div>
  1037   </dd>
  1039 </dl>
  1041 <p>Implementations <strong>must</strong> treat any unknown URL matching
  1042 functions as a syntax error, and thus ignore the '@document' rule.
  1043 <span class="issue">Should we instead have more complicated error
  1044 handling rules to make forward-compatibility work differently, or is
  1045 this rule the best solution for such future expansion anyway?</span></p>
  1047 <div class="issue">This syntax doesn't offer any ability to do negations,
  1048 which has been requested in <a
  1049 href="https://bugzilla.mozilla.org/show_bug.cgi?id=349813">Mozilla bug
  1050 349813</a>.  Use cases that people have wanted negations for
  1051 include:
  1052 <ul>
  1053   <li>User style sheets that want a particular rule in general, but know
  1054   that that rule does more harm than good on specific sites.</li>
  1055   <li>Authors who have a rule that they want to apply to most of their
  1056   pages, but wish to make a few exceptions for.</li>
  1057 </ul>
  1058 </div>
  1060 <p>This extends the lexical scanner in the
  1061 <a href="http://www.w3.org/TR/CSS21/grammar.html">Grammar of CSS 2.1</a>
  1062 ([[!CSS21]], Appendix G) by adding:
  1063 <pre>@{D}{O}{C}{U}{M}{E}{N}{T}	{return DOCUMENT_SYM;}</pre>
  1064 <p>and the grammar by adding</p>
  1065 <pre><dfn>document_rule</dfn>
  1066   : DOCUMENT_SYM S+ <i>url_match_fn</i> ( "," S* <i>url_match_fn</i> )* <i>group_rule_body</i>
  1069 <dfn>url_match_fn</dfn>
  1070   : (URI | FUNCTION S* STRING S* ')' ) S*
  1071   ;</pre>
  1072 -->
  1074   <h2 id=apis><span class=secno>7. </span>APIs</h2>
  1076   <h3 id=extentions-to-cssrule-interface><span class=secno>7.1. </span>
  1077    Extensions to the <code>CSSRule</code> interface</h3>
  1079   <p>The <code>CSSRule</code> interface is extended as follows:
  1081   <pre class=idl>partial interface CSSRule {
  1082     const unsigned short SUPPORTS_RULE = 12;
  1083     <!--
  1084     const unsigned short DOCUMENT_RULE = 13;
  1085     -->
  1086 }</pre>
  1088   <h3 id=the-cssgroupingrule-interface><span class=secno>7.2. </span> The <a
  1089    href="#cssgroupingrule"><code>CSSGroupingRule</code></a> interface</h3>
  1091   <p>The <dfn id=cssgroupingrule><code>CSSGroupingRule</code></dfn> interface
  1092    represents an at-rule that contains other rules nested inside itself.
  1094   <pre class=idl>interface CSSGroupingRule : CSSRule {
  1095     readonly attribute <a
  1096    href="http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList">CSSRuleList</a> cssRules;
  1097     unsigned long insertRule (DOMString rule, unsigned long index);
  1098     void deleteRule (unsigned long index);
  1099 }</pre>
  1101   <dl class=idl-attributes>
  1102    <dt><code>cssRules</code> of type <code><a
  1103     href="http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList">CSSRuleList</a></code>,
  1104     readonly
  1106    <dd>The <code>cssRules</code> attribute must return a
  1107     <code>CSSRuleList</code> object for the list of CSS rules nested inside
  1108     the grouping rule.
  1109   </dl>
  1111   <dl class=idl-methods>
  1112    <dt><code>insertRule(DOMString rule, unsigned long index)</code>, returns
  1113     <code>unsigned long</code>
  1115    <dd> The <code>insertRule</code> operation must insert a CSS rule
  1116     <var>rule</var> into the CSS rule list returned by <code>cssRules</code>,
  1117     such that the inserted rule will be at position <var>index</var>, and any
  1118     rules previously at <var>index</var> or higher will increase their index
  1119     by one. It must throw INDEX_SIZE_ERR if index is greater than
  1120     <code>cssRules.length</code>. It must throw SYNTAX_ERR if the rule has a
  1121     syntax error and is unparseable; this does not include syntax errors
  1122     handled by error handling rules for constructs inside of the rule. It
  1123     must throw HIERARCHY_REQUEST_ERR if the rule cannot be inserted at the
  1124     location specified, for example, if an ‘<code
  1125     class=css>@import</code>’ rule is inserted inside a group rule. <span
  1126     class=issue>This needs to specify what to do if <code>rule</code> is the
  1127     empty string, if it contains more than one CSS rule, or if it contains
  1128     garbage after a valid rule.</span>
  1130    <dt><code>deleteRule (unsigned long index)</code>, return
  1131     <code>void</code>
  1133    <dd> The <code>deleteRule</code> operation must remove a CSS rule from the
  1134     CSS rule list returned by <code>cssRules</code> at <var>index</var>. It
  1135     must throw INDEX_SIZE_ERR if index is greater than or equal to
  1136     <code>cssRules.length</code>.
  1137   </dl>
  1139   <h3 id=the-cssconditionrule-interface><span class=secno>7.3. </span> The <a
  1140    href="#cssconditionrule"><code>CSSConditionRule</code></a> interface</h3>
  1142   <p>The <dfn id=cssconditionrule><code>CSSConditionRule</code></dfn>
  1143    interface represents all the "conditional" at-rules, which consist of a
  1144    condition and a statement block.
  1146   <pre class=idl>interface CSSConditionRule : CSSGroupingRule {
  1147     attribute DOMString conditionText;
  1148 }</pre>
  1150   <dl class=idl-attributes>
  1151    <dt><code>conditionText</code> of type <code>DOMString</code>
  1153    <dd>
  1154     <p>The <code>conditionText</code> attribute represents the condition of
  1155      the rule. Since what this condition does varies between the derived
  1156      interfaces of <a
  1157      href="#cssconditionrule"><code>CSSConditionRule</code></a>, those
  1158      derived interfaces may specify different behavior for this attribute
  1159      (see, for example, <a href="#cssmediarule"><code>CSSMediaRule</code></a>
  1160      below). In the absence of such rule-specific behavior, the following
  1161      rules apply:
  1163     <p>The <code>conditionText</code> attribute, on getting, must return the
  1164      result of serializing the associated condition.
  1166     <p>On setting the <code>conditionText</code> attribute these steps must
  1167      be run:
  1169     <ol>
  1170      <li>Trim the given value of white space.
  1172      <li>If the given value matches the grammar of the appropriate condition
  1173       production for the given rule, replace the associated CSS condition
  1174       with the given value.
  1176      <li>Otherwise, do nothing.
  1177     </ol>
  1178   </dl>
  1180   <h3 id=the-cssmediarule-interface><span class=secno>7.4. </span> The <a
  1181    href="#cssmediarule"><code>CSSMediaRule</code></a> interface</h3>
  1183   <p>The <dfn id=cssmediarule><code>CSSMediaRule</code></dfn> interface
  1184    represents a ‘<code class=css>@media</code>’ rule:
  1186   <pre class=idl>interface CSSMediaRule : CSSConditionRule {
  1187     readonly attribute <a
  1188    href="http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList">MediaList</a> media;
  1189 }</pre>
  1191   <dl class=idl-attributes>
  1192    <dt><a href="#media"><code>media</code></a> of type <code><a
  1193     href="http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList">MediaList</a></code>,
  1194     readonly
  1196    <dd>The <a href="#media"><code>media</code></a> attribute must return a
  1197     <code>MediaList</code> object for the list of media queries specified
  1198     with the ‘<code class=css>@media</code>’ rule.
  1200    <dt><code>conditionText</code> of type <code>DOMString</code>
  1202    <dd>The <code>conditionText</code> attribute (defined on the <a
  1203     href="#cssconditionrule"><code>CSSConditionRule</code></a> parent rule),
  1204     on getting, must return the value of <code>media.mediaText</code> on the
  1205     rule.
  1206     <p>Setting the <code>conditionText</code> attribute must set the
  1207      <code>media.mediaText</code> attribute on the rule.
  1208   </dl>
  1210   <h3 id=the-csssupportsrule-interface><span class=secno>7.5. </span> The <a
  1211    href="#csssupportsrule"><code>CSSSupportsRule</code></a> interface</h3>
  1213   <p>The <dfn id=csssupportsrule><code>CSSSupportsRule</code></dfn> interface
  1214    represents a ‘<code class=css>@supports</code>’ rule.
  1216   <pre class=idl>interface CSSSupportsRule : CSSConditionRule {
  1217 }</pre>
  1218   <!--
  1219 <h3 id="the-cssdocumentrule-interface">
  1220 The <code>CSSDocumentRule</code> interface</h3>
  1222 <p>The <dfn><code>CSSDocumentRule</code></dfn> interface represents a ''@document'' rule.</p>
  1224 <pre class='idl'>interface CSSDocumentRule : CSSConditionRule {
  1225 }</pre>
  1226 -->
  1228   <h3 id=the-css-interface><span class=secno>7.6. </span> The <a
  1229    href="#CSS-interface"><code>CSS</code></a> interface, and the <code
  1230    title="">supports()</code> function</h3>
  1232   <p>The <dfn id=CSS-interface><code>CSS</code></dfn> interface holds useful
  1233    CSS-related functions that do not belong elsewhere.
  1235   <pre class=idl>interface CSS {
  1236   static boolean supports(DOMString property, DOMString value);
  1237   static boolean supports(DOMString conditionText);
  1238 }</pre>
  1240   <dl class=idl-methods>
  1241    <dt><code>supports(DOMString property, DOMString value)</code>, returns
  1242     <code>boolean</code>
  1244    <dt><code>supports(DOMString conditionText)</code>, returns
  1245     <code>boolean</code>
  1247    <dd> When the <code title="">supports()</code> method is invoked with two
  1248     arguments <var>property</var> and <var>value</var>, it must return
  1249     <code>true</code> if <var>property</var> is a literal match for the name
  1250     of a CSS property that the UA supports, and <var>value</var> would be
  1251     successfully parsed as a supported value for that property. Otherwise, it
  1252     must return <code>false</code>.
  1253     <p> When invoked with a single <var>conditionText</var> argument, it must
  1254      return <code>true</code> if <var>conditionText</var>, when parsed and
  1255      evaluated as a <a
  1256      href="#supports_condition"><code>supports_condition</code></a>, would
  1257      return true. Otherwise, it must return <code>false</code>.
  1258   </dl>
  1260   <h2 class=no-num id=grammar>Grammar</h2>
  1262   <p>In order to allow these new @-rules in CSS style sheets, this
  1263    specification modifies the <code>stylesheet</code> production in the <a
  1264    href="http://www.w3.org/TR/CSS21/grammar.html">Appendix G</a> grammar of
  1265    <a href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a> by replacing
  1266    the <a href="#media"><code>media</code></a> production defined in <a
  1267    href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a> with the <a
  1268    href="#media"><code>media</code></a> production defined in this one, and
  1269    additionally inserting <code>| supports_rule</code> alongside
  1270    <code>ruleset | media | page</code>.
  1272   <h2 id=conformance><span class=secno>8. </span>Conformance</h2>
  1274   <h3 id=base-modules><span class=secno>8.1. </span>Base Modules</h3>
  1276   <p>This specification defines conformance in terms of base modules, which
  1277    are modules that this specification builds on top of. The base modules of
  1278    this module are:
  1280   <ul>
  1281    <li><a href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a>
  1282   </ul>
  1284   <p>All of the conformance requirements of all base modules are incorporated
  1285    as conformance requirements of this module, except where overridden by
  1286    this module.
  1288   <p>Additionally, all conformance requirements related to validity of syntax
  1289    in this module and all of its base modules are to be interpreted as though
  1290    all syntax in all of those modules is valid.
  1292   <div class=example>
  1293    <p>For example, this means that grammar presented in modules other than <a
  1294     href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a> must obey the
  1295     requirements that <a href="#CSS21"
  1296     rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a> defines for the parsing of
  1297     properties, and that requirements for handling invalid syntax in <a
  1298     href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a> do not treat
  1299     syntax added by other modules as invalid.
  1300   </div>
  1302   <p>Additionally, the set of valid syntax can be increased by the
  1303    conformance of a style sheet or processor to additional modules; use of
  1304    such syntax does not make a style sheet nonconformant and failure to treat
  1305    such syntax as invalid does not make a processor nonconformant.
  1307   <h3 id=conformance-classes><span class=secno>8.2. </span>Conformance
  1308    Classes</h3>
  1310   <p>Conformance to the CSS Conditional Rules Module is defined for three
  1311    conformance classes:
  1313   <dl>
  1314    <dt><dfn id=conform-style-sheet title="conformance::style sheet">style
  1315     sheet</dfn>
  1317    <dd>A <a href="http://www.w3.org/TR/CSS21/conform.html#style-sheet">CSS
  1318     style sheet</a>.
  1320    <dt><dfn id=conform-processor
  1321     title="conformance::processor">processor</dfn>
  1323    <dd>A tool that reads CSS style sheets: it may be a renderer or <a
  1324     href="http://www.w3.org/TR/CSS21/conform.html#user-agent">user-agent</a>
  1325     that interprets the semantics of a style sheet and renders documents that
  1326     use style sheets, or it may be a validator that checks style sheets.
  1328    <dt><dfn id=conform-authoring-tool
  1329     title="conformance::authoring tool">authoring tool</dfn>
  1331    <dd>A tool that writes a style sheet.
  1332   </dl>
  1334   <p>A style sheet is conformant to the CSS Conditional Rules Module if it
  1335    meets all of the conformance requirements in the module that are described
  1336    as requirements of style sheets.
  1338   <p>A processor is conformant to the CSS Conditional Rules Module if it
  1339    meets all applicable conformance requirements in the module that are
  1340    described as requirements of processors. In general, all requirements are
  1341    applicable to renderers. Requirements concerning a part of CSS not
  1342    performed by a processor are not applicable, e.g., requirements related to
  1343    rendering are not applicable to a validator. The inability of a processor
  1344    to correctly render a document due to limitations of the device does not
  1345    make it non-conformant. (For example, a renderer is not required to render
  1346    color on a monochrome monitor.)
  1348   <p>An authoring tool is conformant to the CSS Conditional Rules Module if
  1349    it writes style sheets that conform to the module and (if it reads CSS) it
  1350    is a conformant processor.
  1352   <h3 id=partial><span class=secno>8.3. </span> Partial Implementations</h3>
  1354   <p>So that authors can exploit the forward-compatible parsing rules to
  1355    assign fallback values, CSS renderers <strong>must</strong> treat as
  1356    invalid (and <a
  1357    href="http://www.w3.org/TR/CSS21/conform.html#ignore">ignore as
  1358    appropriate</a>) any at-rules, properties, property values, keywords, and
  1359    other syntactic constructs for which they have no usable level of support.
  1360    In particular, user agents <strong>must not</strong> selectively ignore
  1361    unsupported component values and honor supported values in a single
  1362    multi-value property declaration: if any value is considered invalid (as
  1363    unsupported values must be), CSS requires that the entire declaration be
  1364    ignored.
  1366   <h3 id=experimental><span class=secno>8.4. </span>Experimental
  1367    Implementations</h3>
  1369   <p>To avoid clashes with future CSS features, the CSS specifications
  1370    reserve a <a
  1371    href="http://www.w3.org/TR/CSS21/syndata.html#vendor-keywords">prefixed
  1372    syntax</a> for proprietary property and value extensions to CSS. The CSS
  1373    Working Group recommends that experimental implementations of features in
  1374    CSS Working Drafts also use vendor-prefixed property or value names. This
  1375    avoids any incompatibilities with future changes in the draft. Once a
  1376    specification reaches the Candidate Recommendation stage, implementors
  1377    should implement the non-prefixed syntax for any feature they consider to
  1378    be correctly implemented according to spec.
  1380   <h3 id=cr-exit-criteria><span class=secno>8.5. </span>CR Exit Criteria</h3>
  1382   <p>For this specification to be advanced to Proposed Recommendation, there
  1383    must be at least two independent, interoperable implementations of each
  1384    feature. Each feature may be implemented by a different set of products,
  1385    there is no requirement that all features be implemented by a single
  1386    product. For the purposes of this criterion, we define the following
  1387    terms:
  1389   <dl>
  1390    <dt>independent
  1392    <dd>each implementation must be developed by a different party and cannot
  1393     share, reuse, or derive from code used by another qualifying
  1394     implementation. Sections of code that have no bearing on the
  1395     implementation of this specification are exempt from this requirement.
  1397    <dt>interoperable
  1399    <dd>passing the respective test case(s) in the official CSS test suite,
  1400     or, if the implementation is not a Web browser, an equivalent test. Every
  1401     relevant test in the test suite should have an equivalent test created if
  1402     such a user agent (UA) is to be used to claim interoperability. In
  1403     addition if such a UA is to be used to claim interoperability, then there
  1404     must one or more additional UAs which can also pass those equivalent
  1405     tests in the same way for the purpose of interoperability. The equivalent
  1406     tests must be made publicly available for the purposes of peer review.
  1408    <dt>implementation
  1410    <dd>a user agent which:
  1411     <ol class=inline>
  1412      <li>implements the specification.
  1414      <li>is available to the general public. The implementation may be a
  1415       shipping product or other publicly available version (i.e., beta
  1416       version, preview release, or “nightly build”). Non-shipping product
  1417       releases must have implemented the feature(s) for a period of at least
  1418       one month in order to demonstrate stability.
  1420      <li>is not experimental (i.e., a version specifically designed to pass
  1421       the test suite and is not intended for normal usage going forward).
  1422     </ol>
  1423   </dl>
  1425   <p>The specification will remain Candidate Recommendation for at least six
  1426    months.
  1428   <h2 id=changes><span class=secno>9. </span> Changes</h2>
  1430   <p>The following (non-editorial) changes were made to this specification
  1431    since the <a
  1432    href="http://www.w3.org/TR/2012/WD-css3-conditional-20120911/">11
  1433    September 2012 Working Draft</a>:
  1435   <ul>
  1436    <li>Removed ‘<code class=css>@document</code>’ rule; it has been
  1437     deferred to Level 4.
  1439    <li>Allow functional notation in ‘<code class=css>@supports</code>’
  1440     queries to be valid (to allow for future extensions), but treat such
  1441     notations as always being false.
  1443    <li>Corrected the grammar as follows:
  1444     <pre>
  1445 -  : SUPPORTS_SYM S+ supports_condition group_rule_body
  1446 +  : SUPPORTS_SYM S* supports_condition group_rule_body
  1447 </pre>
  1449     <pre>
  1450 -  : (URI | FUNCTION) S*
  1451 +  : (URI | FUNCTION S* STRING S* ')' ) S*
  1452 </pre>
  1454    <li>Switched "and", "or", and "not" keywords to use appropriate
  1455     productions rather than literals.
  1457    <li>Clarified definition of support used for interpreting ‘<code
  1458     class=css>@support</code>’ rules and its relationship to CSS
  1459     forwards-compatible parsing rules.
  1460   </ul>
  1462   <h2 class=no-num id=acknowledgments>Acknowledgments</h2>
  1464   <p> Thanks to the ideas and feedback from Tab Atkins, <span lang=tr>Tantek
  1465    Çelik</span>, Alex Danilo, Elika Etemad, Pascal Germroth, <span
  1466    lang=de>Björn Höhrmann</span>, Paul Irish, <span lang=nl>Anne van
  1467    Kesteren</span>, Vitor Menezes, Alex Mogilevsky, Chris Moschini, Simon
  1468    Sapin, Ben Ward, Zack Weinberg, Estelle Weyl, Boris Zbarsky, and all the
  1469    rest of the <a
  1470    href="http://lists.w3.org/Archives/Public/www-style/">www-style</a>
  1471    community.
  1473   <h2 class=no-num id=references>References</h2>
  1475   <h3 class=no-num id=normative-references>Normative references</h3>
  1476   <!--begin-normative-->
  1477   <!-- Sorted by label -->
  1479   <dl class=bibliography>
  1480    <dt style="display: none"><!-- keeps the doc valid if the DL is empty -->
  1481     <!---->
  1483    <dt id=CSS21>[CSS21]
  1485    <dd>Bert Bos; et al. <a
  1486     href="http://www.w3.org/TR/2011/REC-CSS2-20110607/"><cite>Cascading Style
  1487     Sheets Level 2 Revision 1 (CSS 2.1) Specification.</cite></a> 7 June
  1488     2011. W3C Recommendation. URL: <a
  1489     href="http://www.w3.org/TR/2011/REC-CSS2-20110607/">http://www.w3.org/TR/2011/REC-CSS2-20110607/</a>
  1490    </dd>
  1491    <!---->
  1493    <dt id=CSS3-ANIMATIONS>[CSS3-ANIMATIONS]
  1495    <dd>Dean Jackson; et al. <a
  1496     href="http://www.w3.org/TR/2012/WD-css3-animations-20120403/"><cite>CSS
  1497     Animations.</cite></a> 3 April 2012. W3C Working Draft. (Work in
  1498     progress.) URL: <a
  1499     href="http://www.w3.org/TR/2012/WD-css3-animations-20120403/">http://www.w3.org/TR/2012/WD-css3-animations-20120403/</a>
  1500    </dd>
  1501    <!---->
  1503    <dt id=CSS3-FONTS>[CSS3-FONTS]
  1505    <dd>John Daggett. <a
  1506     href="http://www.w3.org/TR/2012/WD-css3-fonts-20121211/"><cite>CSS Fonts
  1507     Module Level 3.</cite></a> 11 December 2012. W3C Working Draft. (Work in
  1508     progress.) URL: <a
  1509     href="http://www.w3.org/TR/2012/WD-css3-fonts-20121211/">http://www.w3.org/TR/2012/WD-css3-fonts-20121211/</a>
  1510    </dd>
  1511    <!---->
  1513    <dt id=MEDIAQ>[MEDIAQ]
  1515    <dd>Florian Rivoal. <a
  1516     href="http://www.w3.org/TR/2012/REC-css3-mediaqueries-20120619/"><cite>Media
  1517     Queries.</cite></a> 19 June 2012. W3C Recommendation. URL: <a
  1518     href="http://www.w3.org/TR/2012/REC-css3-mediaqueries-20120619/">http://www.w3.org/TR/2012/REC-css3-mediaqueries-20120619/</a>
  1519    </dd>
  1520    <!---->
  1522    <dt id=RFC2119>[RFC2119]
  1524    <dd>S. Bradner. <a href="http://www.ietf.org/rfc/rfc2119.txt"><cite>Key
  1525     words for use in RFCs to Indicate Requirement Levels.</cite></a> Internet
  1526     RFC 2119. URL: <a
  1527     href="http://www.ietf.org/rfc/rfc2119.txt">http://www.ietf.org/rfc/rfc2119.txt</a>
  1528    </dd>
  1529    <!---->
  1530   </dl>
  1531   <!--end-normative-->
  1533   <h3 class=no-num id=other-references>Other references</h3>
  1534   <!--begin-informative-->
  1535   <!-- Sorted by label -->
  1537   <dl class=bibliography>
  1538    <dt style="display: none"><!-- keeps the doc valid if the DL is empty -->
  1539     <!---->
  1541    <dt id=CSS1>[CSS1]
  1543    <dd>Håkon Wium Lie; Bert Bos. <a
  1544     href="http://www.w3.org/TR/2008/REC-CSS1-20080411"><cite>Cascading Style
  1545     Sheets (CSS1) Level 1 Specification.</cite></a> 11 April 2008. W3C
  1546     Recommendation. URL: <a
  1547     href="http://www.w3.org/TR/2008/REC-CSS1-20080411">http://www.w3.org/TR/2008/REC-CSS1-20080411</a>
  1548    </dd>
  1549    <!---->
  1551    <dt id=CSS3-TRANSITIONS>[CSS3-TRANSITIONS]
  1553    <dd>Dean Jackson; et al. <a
  1554     href="http://www.w3.org/TR/2012/WD-css3-transitions-20120403/"><cite>CSS
  1555     Transitions.</cite></a> 3 April 2012. W3C Working Draft. (Work in
  1556     progress.) URL: <a
  1557     href="http://www.w3.org/TR/2012/WD-css3-transitions-20120403/">http://www.w3.org/TR/2012/WD-css3-transitions-20120403/</a>
  1558    </dd>
  1559    <!---->
  1560   </dl>
  1561   <!--end-informative-->
  1563   <h2 class=no-num id=index>Index</h2>
  1564   <!--begin-index-->
  1566   <ul class=indexlist>
  1567    <li>conditional group rules, <a href="#conditional-group-rules"
  1568     title="section 2."><strong>2.</strong></a>
  1570    <li>conformance
  1571     <ul>
  1572      <li>authoring tool, <a href="#conform-authoring-tool"
  1573       title="section 8.2."><strong>8.2.</strong></a>
  1575      <li>processor, <a href="#conform-processor"
  1576       title="section 8.2."><strong>8.2.</strong></a>
  1578      <li>style sheet, <a href="#conform-style-sheet"
  1579       title="section 8.2."><strong>8.2.</strong></a>
  1580     </ul>
  1582    <li><a href="#CSS-interface"><code>CSS</code></a>, <a
  1583     href="#CSS-interface" title="section 7.6."><strong>7.6.</strong></a>
  1585    <li><a href="#cssconditionrule"><code>CSSConditionRule</code></a>, <a
  1586     href="#cssconditionrule" title="section 7.3."><strong>7.3.</strong></a>
  1588    <li><a href="#cssgroupingrule"><code>CSSGroupingRule</code></a>, <a
  1589     href="#cssgroupingrule" title="section 7.2."><strong>7.2.</strong></a>
  1591    <li><a href="#cssmediarule"><code>CSSMediaRule</code></a>, <a
  1592     href="#cssmediarule" title="section 7.4."><strong>7.4.</strong></a>
  1594    <li><a href="#csssupportsrule"><code>CSSSupportsRule</code></a>, <a
  1595     href="#csssupportsrule" title="section 7.5."><strong>7.5.</strong></a>
  1597    <li>general_enclosed, <a href="#general_enclosed"
  1598     title="section 6."><strong>6.</strong></a>
  1600    <li>group rule body, <a href="#group-rule-body"
  1601     title="section 3."><strong>3.</strong></a>
  1603    <li>group_rule_body, <a href="#group_rule_body"
  1604     title="section 3."><strong>3.</strong></a>
  1606    <li>media, <a href="#media" title="section 5."><strong>5.</strong></a>
  1608    <li>‘<code class=css>@media</code>’ rule, <a href="#atmedia-rule"
  1609     title="section 5."><strong>5.</strong></a>
  1611    <li>nested_statement, <a href="#nested_statement"
  1612     title="section 3."><strong>3.</strong></a>
  1614    <li>support, <a href="#dfn-support"
  1615     title="section 6.1."><strong>6.1.</strong></a>
  1617    <li>supports_condition, <a href="#supports_condition"
  1618     title="section 6."><strong>6.</strong></a>
  1620    <li>supports_condition_in_parens, <a href="#supports_condition_in_parens"
  1621     title="section 6."><strong>6.</strong></a>
  1623    <li>supports_conjunction, <a href="#supports_conjunction"
  1624     title="section 6."><strong>6.</strong></a>
  1626    <li>supports_declaration_condition, <a
  1627     href="#supports_declaration_condition"
  1628     title="section 6."><strong>6.</strong></a>
  1630    <li>supports_disjunction, <a href="#supports_disjunction"
  1631     title="section 6."><strong>6.</strong></a>
  1633    <li>supports_negation, <a href="#supports_negation"
  1634     title="section 6."><strong>6.</strong></a>
  1636    <li>‘<code class=css>@supports</code>’ rule, <a
  1637     href="#atsupports-rule" title="section 6."><strong>6.</strong></a>
  1639    <li>supports_rule, <a href="#supports_rule"
  1640     title="section 6."><strong>6.</strong></a>
  1641   </ul>
  1642   <!--end-index-->
  1643 </html>
  1644 <!-- Keep this comment at the end of the file
  1645 Local variables:
  1646 mode: sgml
  1647 sgml-declaration:"~/SGML/HTML4.decl"
  1648 sgml-default-doctype-name:"html"
  1649 sgml-minimize-attributes:t
  1650 sgml-nofill-elements:("pre" "style" "br")
  1651 sgml-live-element-indicator:t
  1652 sgml-omittag:nil
  1653 sgml-shorttag:nil
  1654 sgml-namecase-general:t
  1655 sgml-general-insert-case:lower
  1656 sgml-always-quote-attributes:t
  1657 sgml-indent-step:nil
  1658 sgml-indent-data:t
  1659 sgml-parent-document:nil
  1660 sgml-exposed-tags:nil
  1661 sgml-local-catalogs:nil
  1662 sgml-local-ecat-files:nil
  1663 End:
  1664 -->

mercurial