UNPKG

smoothscroll

Version:

A teeny tiny smooth scroll script with ease-in-out effect and no jQuery.

1,395 lines (991 loc) 131 kB
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang=en> <head> <title>Selectors Level 3</title> <link href=default.css rel=stylesheet type="text/css"> <link href="http://www.w3.org/StyleSheets/TR/W3C-REC.css" rel=stylesheet type="text/css"> <style type="text/css"> body { padding-left: 400px; } h2 + ul.toc { position: fixed; width: 300px; height: 100%; left: 0px; top: 0px; overflow: scroll; } :target { background-color: yellow; } </style> <body> <script src="smoothscroll.js" type="text/javascript" charset="utf-8"></script> <!-- From here, this is just a copy paste of w3.org page --> <div class=head> <!--begin-logo--> <p><a href="http://www.w3.org/"><img alt=W3C height=48 src="http://www.w3.org/Icons/w3c_home" width=72></a> <!--end-logo--> <h1 id=title>Selectors Level 3</h1> <h2 class="no-num no-toc" id=longstatus-date>W3C Recommendation 29 September 2011</h2> <dl> <dt>This version: <dd> <a href="http://www.w3.org/TR/2011/REC-css3-selectors-20110929/"> http://www.w3.org/TR/2011/REC-css3-selectors-20110929/</a> <!-- <a href="http://dev.w3.org/csswg/selectors3"> http://dev.w3.org/csswg/selectors3</a> --> <dt>Latest version: <dd><a href="http://www.w3.org/TR/css3-selectors/"> http://www.w3.org/TR/css3-selectors/</a> <dt>Latest Selectors specification: <dd><a href="http://www.w3.org/TR/selectors/"> http://www.w3.org/TR/selectors/</a> <dt>Previous version: <dd> <a href="http://www.w3.org/TR/2009/PR-css3-selectors-20091215/"> http://www.w3.org/TR/2009/PR-css3-selectors-20091215/</a> <dt><a name=editors-list></a>Editors: <dd class=vcard><a class="url fn" href="http://www.tantek.com/" lang=tr>Tantek &Ccedil;elik</a> (Invited Expert) <dd class=vcard><a class="url fn" href="http://fantasai.inkedblade.net/contact">Elika J. Etemad</a> (Invited Expert) <dd class=vcard><span class=fn>Daniel Glazman</span> (Disruptive Innovations SARL) <dd class=vcard><a class="url fn" href="mailto:ian@hixie.ch">Ian Hickson</a> (<span class=company><a href="http://www.google.com/">Google</a></span>) <dd class=vcard><span class=fn>Peter Linss</span> (former editor, <span class=company><a href="http://www.netscape.com/">Netscape/AOL</a></span>) <dd class=vcard><span class=fn>John Williams</span> (former editor, <span class=company><a href="http://www.quark.com/">Quark, Inc.</a></span>) </dl> <p>Please refer to the <a href="http://www.w3.org/Style/2011/REC-css3-selectors-20110929-errata.html"><strong>errata</strong></a> for this document, which may include some normative corrections.</p> <p>See also <a href="http://www.w3.org/2003/03/Translations/byTechnology?technology=css3-selectors"> <strong>translations</strong></a>.</p> <!--begin-copyright--> <p class="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> &copy; 2011 <a href="http://www.w3.org/"><acronym title="World Wide Web Consortium">W3C</acronym></a><sup>&reg;</sup> (<a href="http://www.csail.mit.edu/"><acronym title="Massachusetts Institute of Technology">MIT</acronym></a>, <a href="http://www.ercim.eu/"><acronym title="European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>, <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.</p> <!--end-copyright--> <hr title="Separator for header"> </div> <h2 class="no-num no-toc" id=abstract>Abstract</h2> <p><em>Selectors</em> are patterns that match against elements in a tree, and as such form one of several technologies that can be used to select nodes in an XML document. Selectors have been optimized for use with HTML and XML, and are designed to be usable in performance-critical code. <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading Style Sheets) is a language for describing the rendering of <acronym title="Hypertext Markup Language">HTML</acronym> and <acronym title="Extensible Markup Language">XML</acronym> documents on screen, on paper, in speech, etc. CSS uses Selectors for binding style properties to elements in the document. <p>This document describes the selectors that already exist in <abbr title="CSS level 1">CSS1</abbr> <a href="#CSS1" rel=biblioentry>[CSS1]<!--{{CSS1}}--></a> and <abbr title="CSS level 2">CSS2</abbr> <a href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a>, and further introduces new selectors for <abbr title="CSS level 3">CSS3</abbr> and other languages that may need them. <p>Selectors define the following function: <pre>expression &#x2217; element &rarr; boolean</pre> <p>That is, given an element and a selector, this specification defines whether that element matches the selector. <p>These expressions can also be used, for instance, to select a set of elements, or a single element from a set of elements, by evaluating the expression across all the elements in a subtree. <acronym title="Simple Tree Transformation Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a language for transforming XML trees, uses this mechanism. <a href="#STTS3" rel=biblioentry>[STTS3]<!--{{STTS3}}--></a> <h2 class="no-num no-toc" id=status>Status of this document</h2> <!--begin-status--> <p><em>This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the <a href="http://www.w3.org/TR/">W3C technical reports index at http://www.w3.org/TR/.</a></em> <p>This document was produced by the <a href="http://www.w3.org/Style/CSS/members">CSS Working Group</a> as a <a href="http://www.w3.org/Consortium/Process/tr#RecsPR">Proposed Recommendation.</a> <p>A W3C Recommendation is a mature document that has been widely reviewed and has been shown to be implementable. W3C encourages everybody to implement this specification. Comments may be sent to the (<a href="http://lists.w3.org/Archives/Public/www-style/">archived</a>) public mailing list <a href="mailto:www-style@w3.org?Subject=%5Bcss3-selectors%5D%20PUT%20SUBJECT%20HERE">www-style@w3.org</a> (see <a href="http://www.w3.org/Mail/Request">instructions</a>). When sending e-mail, please put the text &#8220;css3-selectors&#8221; in the subject, preferably like this: &#8220;[<!---->css3-selectors<!---->] <em>&hellip;summary of comment&hellip;</em>&#8221; <p>This document has been reviewed by W3C Members, by software developers, and by other W3C groups and interested parties, and is endorsed by the Director as a W3C Recommendation. It is a stable document and may be used as reference material or cited from another document. W3C's role in making the Recommendation is to draw attention to the specification and to promote its widespread deployment. This enhances the functionality and interoperability of the Web.</p> <p>This document was produced by a group operating under the <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5&nbsp;February 2004 W3C Patent Policy</a>. W3C maintains a <a href="http://www.w3.org/2004/01/pp-impl/32061/status" rel=disclosure>public list of any patent disclosures</a> made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure"> section&nbsp;6 of the W3C Patent Policy</a>.</p> <!--end-status--> <p>A separate <a href="/Style/CSS/Test/CSS3/Selectors/20091025/reports/CR-ImpReport.html"> implementation report</a> contains a test suite and shows several implementations of the specification. <p id=changes>This document is the same as the previous, Proposed Recommendation version, except for editorial changes to the front matter, and updating of references. <h2 class="no-num no-toc" id=contents>Table of Contents</h2> <!--begin-toc--> <ul class=toc> <li><a href="#context"><span class=secno>1. </span>Introduction</a> <ul class=toc> <li><a href="#dependencies"><span class=secno>1.1. </span>Dependencies</a> <li><a href="#terminology"><span class=secno>1.2. </span>Terminology</a> <li><a href="#changesFromCSS2"><span class=secno>1.3. </span>Changes from CSS2</a> </ul> <li><a href="#selectors"><span class=secno>2. </span>Selectors</a> <li><a href="#casesens"><span class=secno>3. </span>Case sensitivity</a> <li><a href="#selector-syntax"><span class=secno>4. </span>Selector syntax</a> <li><a href="#grouping"><span class=secno>5. </span>Groups of selectors</a> <li><a href="#simple-selectors"><span class=secno>6. </span>Simple selectors</a> <ul class=toc> <li><a href="#type-selectors"><span class=secno>6.1. </span>Type selector</a> <ul class=toc> <li><a href="#typenmsp"><span class=secno>6.1.1. </span>Type selectors and namespaces</a> </ul> <li><a href="#universal-selector"><span class=secno>6.2. </span>Universal selector </a> <ul class=toc> <li><a href="#univnmsp"><span class=secno>6.2.1. </span>Universal selector and namespaces</a> </ul> <li><a href="#attribute-selectors"><span class=secno>6.3. </span>Attribute selectors</a> <ul class=toc> <li><a href="#attribute-representation"><span class=secno>6.3.1. </span>Attribute presence and value selectors</a> <li><a href="#attribute-substrings"><span class=secno>6.3.2. </span>Substring matching attribute selectors</a> <li><a href="#attrnmsp"><span class=secno>6.3.3. </span>Attribute selectors and namespaces</a> <li><a href="#def-values"><span class=secno>6.3.4. </span>Default attribute values in DTDs</a> </ul> <li><a href="#class-html"><span class=secno>6.4. </span>Class selectors</a> <li><a href="#id-selectors"><span class=secno>6.5. </span>ID selectors</a> <li><a href="#pseudo-classes"><span class=secno>6.6. </span>Pseudo-classes</a> <ul class=toc> <li><a href="#dynamic-pseudos"><span class=secno>6.6.1. </span>Dynamic pseudo-classes</a> <ul class=toc> <li><a href="#the-link-pseudo-classes-link-and-visited"><span class=secno>6.6.1.1. </span>The link pseudo-classes: :link and :visited</a> <li><a href="#the-user-action-pseudo-classes-hover-act"><span class=secno>6.6.1.2. </span>The user action pseudo-classes :hover, :active, and :focus</a> </ul> <li><a href="#target-pseudo"><span class=secno>6.6.2. </span>The target pseudo-class :target</a> <li><a href="#lang-pseudo"><span class=secno>6.6.3. </span>The language pseudo-class :lang</a> <li><a href="#UIstates"><span class=secno>6.6.4. </span>The UI element states pseudo-classes</a> <ul class=toc> <li><a href="#enableddisabled"><span class=secno>6.6.4.1. </span>The :enabled and :disabled pseudo-classes</a> <li><a href="#checked"><span class=secno>6.6.4.2. </span>The :checked pseudo-class</a> <li><a href="#indeterminate"><span class=secno>6.6.4.3. </span>The :indeterminate pseudo-class</a> </ul> <li><a href="#structural-pseudos"><span class=secno>6.6.5. </span>Structural pseudo-classes</a> <ul class=toc> <li><a href="#root-pseudo"><span class=secno>6.6.5.1. </span>:root pseudo-class</a> <li><a href="#nth-child-pseudo"><span class=secno>6.6.5.2. </span>:nth-child() pseudo-class</a> <li><a href="#nth-last-child-pseudo"><span class=secno>6.6.5.3. </span>:nth-last-child() pseudo-class</a> <li><a href="#nth-of-type-pseudo"><span class=secno>6.6.5.4. </span>:nth-of-type() pseudo-class</a> <li><a href="#nth-last-of-type-pseudo"><span class=secno>6.6.5.5. </span>:nth-last-of-type() pseudo-class</a> <li><a href="#first-child-pseudo"><span class=secno>6.6.5.6. </span>:first-child pseudo-class</a> <li><a href="#last-child-pseudo"><span class=secno>6.6.5.7. </span>:last-child pseudo-class</a> <li><a href="#first-of-type-pseudo"><span class=secno>6.6.5.8. </span>:first-of-type pseudo-class</a> <li><a href="#last-of-type-pseudo"><span class=secno>6.6.5.9. </span>:last-of-type pseudo-class</a> <li><a href="#only-child-pseudo"><span class=secno>6.6.5.10. </span>:only-child pseudo-class</a> <li><a href="#only-of-type-pseudo"><span class=secno>6.6.5.11. </span>:only-of-type pseudo-class</a> <li><a href="#empty-pseudo"><span class=secno>6.6.5.12. </span>:empty pseudo-class</a> </ul> <li><a href="#content-selectors"><span class=secno>6.6.6. </span>Blank</a> <li><a href="#negation"><span class=secno>6.6.7. </span>The negation pseudo-class</a> </ul> </ul> <li><a href="#pseudo-elements"><span class=secno>7. </span>Pseudo-elements</a> <ul class=toc> <li><a href="#first-line"><span class=secno>7.1. </span>The ::first-line pseudo-element</a> <ul class=toc> <li><a href="#first-formatted-line"><span class=secno>7.1.1. </span>First formatted line definition in CSS</a> </ul> <li><a href="#first-letter"><span class=secno>7.2. </span>The ::first-letter pseudo-element</a> <ul class=toc> <li><a href="#application-in-css"><span class=secno>7.2.1. </span>Application in CSS</a> </ul> <li><a href="#selection"><span class=secno>7.3. </span>Blank</a> <li><a href="#gen-content"><span class=secno>7.4. </span>The ::before and ::after pseudo-elements</a> </ul> <li><a href="#combinators"><span class=secno>8. </span>Combinators</a> <ul class=toc> <li><a href="#descendant-combinators"><span class=secno>8.1. </span>Descendant combinator</a> <li><a href="#child-combinators"><span class=secno>8.2. </span>Child combinators</a> <li><a href="#sibling-combinators"><span class=secno>8.3. </span>Sibling combinators</a> <ul class=toc> <li><a href="#adjacent-sibling-combinators"><span class=secno>8.3.1. </span>Adjacent sibling combinator</a> <li><a href="#general-sibling-combinators"><span class=secno>8.3.2. </span>General sibling combinator</a> </ul> </ul> <li><a href="#specificity"><span class=secno>9. </span>Calculating a selector's specificity</a> <li><a href="#w3cselgrammar"><span class=secno>10. </span>The grammar of Selectors</a> <ul class=toc> <li><a href="#grammar"><span class=secno>10.1. </span>Grammar</a> <li><a href="#lex"><span class=secno>10.2. </span>Lexical scanner</a> </ul> <li><a href="#profiling"><span class=secno>11. </span>Profiles</a> <li><a href="#Conformance"><span class=secno>12. </span>Conformance and requirements</a> <li><a href="#Tests"><span class=secno>13. </span>Tests</a> <li><a href="#ACKS"><span class=secno>14. </span>Acknowledgements</a> <li><a href="#references"><span class=secno>15. </span>References</a> <ul class=toc> <li><a href="#normative-references"><span class=secno>15.1. </span>Normative References</a> <li><a href="#informative-references"><span class=secno>15.2. </span>Informative References</a> </ul> </ul> <!--end-toc--> <h2 id=context><span class=secno>1. </span>Introduction</h2> <p>Selectors Level 1 and Selectors Level 2 are defined as the subsets of selector functionality defined in the <a href="http://www.w3.org/TR/REC-CSS1">CSS1</a> and <a href="http://www.w3.org/TR/CSS21/">CSS2.1</a> specifications, respectively. <h3 id=dependencies><span class=secno>1.1. </span>Dependencies</h3> <p>Some features of this specification are specific to CSS, or have particular limitations or rules specific to CSS. In this specification, these have been described in terms of CSS2.1. <a href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a> <h3 id=terminology><span class=secno>1.2. </span>Terminology</h3> <p>All of the text of this specification is normative except examples, notes, and sections explicitly marked as non-normative. <p>Additional terminology is defined in the <a href="http://www.w3.org/TR/CSS21/conform.html#defs">Definitions</a> section of <a href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a>. Examples of document source code and fragments are given in XML [[XML10] or HTML [[HTML40]] syntax. <h3 id=changesFromCSS2><span class=secno>1.3. </span>Changes from CSS2</h3> <p><em>This section is non-normative.</em> <p>The main differences between the selectors in CSS2 and those in Selectors are: <ul> <li>the list of basic definitions (selector, group of selectors, simple selector, etc.) has been changed; in particular, what was referred to in CSS2 as a simple selector is now called a sequence of simple selectors, and the term "simple selector" is now used for the components of this sequence <li>an optional namespace component is now allowed in element type selectors, the universal selector and attribute selectors <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced <li>new simple selectors including substring matching attribute selectors, and new pseudo-classes <li>new pseudo-elements, and introduction of the "::" convention for pseudo-elements <li>the grammar has been rewritten <li>profiles to be added to specifications integrating Selectors and defining the set of selectors which is actually supported by each specification <li>Selectors are now a CSS3 Module and an independent specification; other specifications can now refer to this document independently of CSS <li>the specification now has its own test suite </ul> <h2 id=selectors><span class=secno>2. </span>Selectors</h2> <p><em>This section is non-normative, as it merely summarizes the following sections.</em> <p>A Selector represents a structure. This structure can be used as a condition (e.g. in a CSS rule) that determines which elements a selector matches in the document tree, or as a flat description of the HTML or XML fragment corresponding to that structure. <p>Selectors may range from simple element names to rich contextual representations. <p>The following table summarizes the Selector syntax: <table class=selectorsReview> <thead> <tr> <th class=pattern>Pattern <th class=meaning>Meaning <th class=described>Described in section <th class=origin>First defined in CSS level <tbody> <tr> <td class=pattern>* <td class=meaning>any element <td class=described><a href="#universal-selector">Universal selector</a> <td class=origin>2 <tr> <td class=pattern>E <td class=meaning>an element of type E <td class=described><a href="#type-selectors">Type selector</a> <td class=origin>1 <tr> <td class=pattern>E[foo] <td class=meaning>an E element with a "foo" attribute <td class=described><a href="#attribute-selectors">Attribute selectors</a> <td class=origin>2 <tr> <td class=pattern>E[foo="bar"] <td class=meaning>an E element whose "foo" attribute value is exactly equal to "bar" <td class=described><a href="#attribute-selectors">Attribute selectors</a> <td class=origin>2 <tr> <td class=pattern>E[foo~="bar"] <td class=meaning>an E element whose "foo" attribute value is a list of whitespace-separated values, one of which is exactly equal to "bar" <td class=described><a href="#attribute-selectors">Attribute selectors</a> <td class=origin>2 <tr> <td class=pattern>E[foo^="bar"] <td class=meaning>an E element whose "foo" attribute value begins exactly with the string "bar" <td class=described><a href="#attribute-selectors">Attribute selectors</a> <td class=origin>3 <tr> <td class=pattern>E[foo$="bar"] <td class=meaning>an E element whose "foo" attribute value ends exactly with the string "bar" <td class=described><a href="#attribute-selectors">Attribute selectors</a> <td class=origin>3 <tr> <td class=pattern>E[foo*="bar"] <td class=meaning>an E element whose "foo" attribute value contains the substring "bar" <td class=described><a href="#attribute-selectors">Attribute selectors</a> <td class=origin>3 <tr> <td class=pattern>E[foo|="en"] <td class=meaning>an E element whose "foo" attribute has a hyphen-separated list of values beginning (from the left) with "en" <td class=described><a href="#attribute-selectors">Attribute selectors</a> <td class=origin>2 <tr> <td class=pattern>E:root <td class=meaning>an E element, root of the document <td class=described><a href="#structural-pseudos">Structural pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E:nth-child(n) <td class=meaning>an E element, the n-th child of its parent <td class=described><a href="#structural-pseudos">Structural pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E:nth-last-child(n) <td class=meaning>an E element, the n-th child of its parent, counting from the last one <td class=described><a href="#structural-pseudos">Structural pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E:nth-of-type(n) <td class=meaning>an E element, the n-th sibling of its type <td class=described><a href="#structural-pseudos">Structural pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E:nth-last-of-type(n) <td class=meaning>an E element, the n-th sibling of its type, counting from the last one <td class=described><a href="#structural-pseudos">Structural pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E:first-child <td class=meaning>an E element, first child of its parent <td class=described><a href="#structural-pseudos">Structural pseudo-classes</a> <td class=origin>2 <tr> <td class=pattern>E:last-child <td class=meaning>an E element, last child of its parent <td class=described><a href="#structural-pseudos">Structural pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E:first-of-type <td class=meaning>an E element, first sibling of its type <td class=described><a href="#structural-pseudos">Structural pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E:last-of-type <td class=meaning>an E element, last sibling of its type <td class=described><a href="#structural-pseudos">Structural pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E:only-child <td class=meaning>an E element, only child of its parent <td class=described><a href="#structural-pseudos">Structural pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E:only-of-type <td class=meaning>an E element, only sibling of its type <td class=described><a href="#structural-pseudos">Structural pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E:empty <td class=meaning>an E element that has no children (including text nodes) <td class=described><a href="#structural-pseudos">Structural pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E:link<br> E:visited <td class=meaning>an E element being the source anchor of a hyperlink of which the target is not yet visited (:link) or already visited (:visited) <td class=described><a href="#link">The link pseudo-classes</a> <td class=origin>1 <tr> <td class=pattern>E:active<br> E:hover<br> E:focus <td class=meaning>an E element during certain user actions <td class=described><a href="#useraction-pseudos">The user action pseudo-classes</a> <td class=origin>1 and 2 <tr> <td class=pattern>E:target <td class=meaning>an E element being the target of the referring URI <td class=described><a href="#target-pseudo">The target pseudo-class</a> <td class=origin>3 <tr> <td class=pattern>E:lang(fr) <td class=meaning>an element of type E in language "fr" (the document language specifies how language is determined) <td class=described><a href="#lang-pseudo">The :lang() pseudo-class</a> <td class=origin>2 <tr> <td class=pattern>E:enabled<br> E:disabled <td class=meaning>a user interface element E which is enabled or disabled <td class=described><a href="#UIstates">The UI element states pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E:checked<!--<br>E:indeterminate--> <td class=meaning>a user interface element E which is checked<!-- or in an indeterminate state--> (for instance a radio-button or checkbox) <td class=described><a href="#UIstates">The UI element states pseudo-classes</a> <td class=origin>3 <tr> <td class=pattern>E::first-line <td class=meaning>the first formatted line of an E element <td class=described><a href="#first-line">The ::first-line pseudo-element</a> <td class=origin>1 <tr> <td class=pattern>E::first-letter <td class=meaning>the first formatted letter of an E element <td class=described><a href="#first-letter">The ::first-letter pseudo-element</a> <td class=origin>1 <tr> <td class=pattern>E::before <td class=meaning>generated content before an E element <td class=described><a href="#gen-content">The ::before pseudo-element</a> <td class=origin>2 <tr> <td class=pattern>E::after <td class=meaning>generated content after an E element <td class=described><a href="#gen-content">The ::after pseudo-element</a> <td class=origin>2 <tr> <td class=pattern>E.warning <td class=meaning>an E element whose class is "warning" (the document language specifies how class is determined). <td class=described><a href="#class-html">Class selectors</a> <td class=origin>1 <tr> <td class=pattern>E#myid <td class=meaning>an E element with ID equal to "myid". <td class=described><a href="#id-selectors">ID selectors</a> <td class=origin>1 <tr> <td class=pattern>E:not(s) <td class=meaning>an E element that does not match simple selector s <td class=described><a href="#negation">Negation pseudo-class</a> <td class=origin>3 <tr> <td class=pattern>E F <td class=meaning>an F element descendant of an E element <td class=described><a href="#descendant-combinators">Descendant combinator</a> <td class=origin>1 <tr> <td class=pattern>E &gt; F <td class=meaning>an F element child of an E element <td class=described><a href="#child-combinators">Child combinator</a> <td class=origin>2 <tr> <td class=pattern>E + F <td class=meaning>an F element immediately preceded by an E element <td class=described><a href="#adjacent-sibling-combinators">Adjacent sibling combinator</a> <td class=origin>2 <tr> <td class=pattern>E ~ F <td class=meaning>an F element preceded by an E element <td class=described><a href="#general-sibling-combinators">General sibling combinator</a> <td class=origin>3 </table> <p>The meaning of each selector is derived from the table above by prepending "matches" to the contents of each cell in the "Meaning" column. <h2 id=casesens><span class=secno>3. </span>Case sensitivity</h2> <p>All Selectors syntax is case-insensitive within the ASCII range (i.e. [a-z] and [A-Z] are equivalent), except for parts that are not under the control of Selectors. The case sensitivity of document language element names, attribute names, and attribute values in selectors depends on the document language. For example, in HTML, element names are case-insensitive, but in XML, they are case-sensitive. Case sensitivity of namespace prefixes is defined in <a href="#CSS3NAMESPACE" rel=biblioentry>[CSS3NAMESPACE]<!--{{!CSS3NAMESPACE}}--></a>. <h2 id=selector-syntax><span class=secno>4. </span>Selector syntax</h2> <p>A <dfn id=selector>selector</dfn> is a chain of one or more <a href="#sequence">sequences of simple selectors</a> separated by <a href="#combinators">combinators</a>. One <a href="#pseudo-elements">pseudo-element</a> may be appended to the last sequence of simple selectors in a selector. <p>A <dfn id=sequence-of-simple-selectors><a name=sequence>sequence of simple selectors</a></dfn> is a chain of <a href="#simple-selectors-dfn">simple selectors</a> that are not separated by a <a href="#combinators">combinator</a>. It always begins with a <a href="#type-selectors">type selector</a> or a <a href="#universal-selector">universal selector</a>. No other type selector or universal selector is allowed in the sequence. <p>A <dfn id=simple-selector><a name=simple-selectors-dfn></a><a href="#simple-selectors">simple selector</a></dfn> is either a <a href="#type-selectors">type selector</a>, <a href="#universal-selector">universal selector</a>, <a href="#attribute-selectors">attribute selector</a>, <a href="#class-html">class selector</a>, <a href="#id-selectors">ID selector</a>, or <a href="#pseudo-classes">pseudo-class</a>. <p><dfn id=combinators0>Combinators</dfn> are: whitespace, &quot;greater-than sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B, <code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White space may appear between a combinator and the simple selectors around it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab" (U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form feed" (U+000C) can occur in whitespace. Other space-like characters, such as "em-space" (U+2003) and "ideographic space" (U+3000), are never part of whitespace. <p>The elements of a document tree that are represented by a selector are the <dfn id=subjects-of-the-selector><a name=subject></a>subjects of the selector</dfn>. A selector consisting of a single sequence of simple selectors represents any element satisfying its requirements. Prepending another sequence of simple selectors and a combinator to a sequence imposes additional matching constraints, so the subjects of a selector are always a subset of the elements represented by the last sequence of simple selectors. <p>An empty selector, containing no sequence of simple selectors and no pseudo-element, is an <a href="#Conformance">invalid selector</a>. <p>Characters in Selectors can be escaped with a backslash according to the same <a href="http://www.w3.org/TR/CSS21/syndata.html#characters">escaping rules</a> as CSS. <a href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a>. <p id=nsdecl>Certain selectors support namespace prefixes. The mechanism by which namespace prefixes are <dfn id=declared>declared</dfn> should be specified by the language that uses Selectors. If the language does not specify a namespace prefix declaration mechanism, then no prefixes are declared. In CSS, namespace prefixes are declared with the <a href="http://www.w3.org/TR/css3-namespace/#declaration"><code>@namespace</code></a> rule. <a href="#CSS3NAMESPACE" rel=biblioentry>[CSS3NAMESPACE]<!--{{!CSS3NAMESPACE}}--></a> <h2 id=grouping><span class=secno>5. </span>Groups of selectors</h2> <p>A comma-separated list of selectors represents the union of all elements selected by each of the individual selectors in the list. (A comma is U+002C.) For example, in CSS when several selectors share the same declarations, they may be grouped into a comma-separated list. White space may appear before and/or after the comma. <div class=example> <p>CSS example:</p> <p>In this example, we condense three rules with identical declarations into one. Thus,</p> <pre>h1 { font-family: sans-serif } h2 { font-family: sans-serif } h3 { font-family: sans-serif }</pre> <p>is equivalent to:</p> <pre>h1, h2, h3 { font-family: sans-serif }</pre> </div> <p><strong>Warning</strong>: the equivalence is true in this example because all the selectors are valid selectors. If just one of these selectors were invalid, the entire group of selectors would be invalid. This would invalidate the rule for all three heading elements, whereas in the former case only one of the three individual heading rules would be invalidated. <div class=example> <p>Invalid CSS example:</p> <pre>h1 { font-family: sans-serif } h2..foo { font-family: sans-serif } h3 { font-family: sans-serif }</pre> <p>is not equivalent to:</p> <pre>h1, h2..foo, h3 { font-family: sans-serif }</pre> <p>because the above selector (<code>h1, h2..foo, h3</code>) is entirely invalid and the entire style rule is dropped. (When the selectors are not grouped, only the rule for <code>h2..foo</code> is dropped.)</p> </div> <h2 id=simple-selectors><span class=secno>6. </span>Simple selectors</h2> <h3 id=type-selectors><span class=secno>6.1. </span>Type selector</h3> <p>A <dfn id=type-selector>type selector</dfn> is the name of a document language element type written using the syntax of <a href="http://www.w3.org/TR/css3-namespace/#css-qnames">CSS qualified names</a> <a href="#CSS3NAMESPACE" rel=biblioentry>[CSS3NAMESPACE]<!--{{!CSS3NAMESPACE}}--></a>. A type selector represents an instance of the element type in the document tree. <div class=example> <p>Example:</p> <p>The following selector represents an <code>h1</code> element in the document tree:</p> <pre>h1</pre> </div> <h4 id=typenmsp><span class=secno>6.1.1. </span>Type selectors and namespaces</h4> <p>Type selectors allow an optional namespace component: a namespace prefix that has been previously <a href="#nsdecl">declared</a> may be prepended to the element name separated by the namespace separator &quot;vertical bar&quot; (U+007C, <code>|</code>). (See, e.g., <a href="#XML-NAMES" rel=biblioentry>[XML-NAMES]<!--{{XML-NAMES}}--></a> for the use of namespaces in XML.) <p>The namespace component may be left empty (no prefix before the namespace separator) to indicate that the selector is only to represent elements with no namespace. <p>An asterisk may be used for the namespace prefix, indicating that the selector represents elements in any namespace (including elements with no namespace). <p>Element type selectors that have no namespace component (no namespace separator) represent elements without regard to the element's namespace (equivalent to "<code>*|</code>") unless a default namespace has been <a href="#nsdecl">declared</a> for namespaced selectors (e.g. in CSS, in the style sheet). If a default namespace has been declared, such selectors will represent only elements in the default namespace. <p>A type selector containing a namespace prefix that has not been previously <a href="#nsdecl">declared</a> for namespaced selectors is an <a href="#Conformance">invalid</a> selector. <p>In a namespace-aware client, the name part of element type selectors (the part after the namespace separator, if it is present) will only match against the <a href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a> of the element's <a href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified name</a>. <p>In summary: <dl> <dt><code>ns|E</code> <dd>elements with name E in namespace ns <dt><code>*|E</code> <dd>elements with name E in any namespace, including those without a namespace <dt><code>|E</code> <dd>elements with name E without a namespace <dt><code>E</code> <dd>if no default namespace has been <a href="#nsdecl">declared</a> for selectors, this is equivalent to *|E. Otherwise it is equivalent to ns|E where ns is the default namespace. </dl> <div class=example> <p>CSS examples:</p> <pre>@namespace foo url(http://www.example.com); foo|h1 { color: blue } /* first rule */ foo|* { color: yellow } /* second rule */ |h1 { color: red } /* ...*/ *|h1 { color: green } h1 { color: green }</pre> <p>The first rule (not counting the <code>@namespace</code> at-rule) will match only <code>h1</code> elements in the "http://www.example.com" namespace.</p> <p>The second rule will match all elements in the "http://www.example.com" namespace.</p> <p>The third rule will match only <code>h1</code> elements with no namespace.</p> <p>The fourth rule will match <code>h1</code> elements in any namespace (including those without any namespace).</p> <p>The last rule is equivalent to the fourth rule because no default namespace has been defined.</p> </div> <h3 id=universal-selector><span class=secno>6.2. </span>Universal selector</h3> <p>The <dfn id=universal-selector0>universal selector</dfn>, written as a <a href="http://www.w3.org/TR/css3-namespace/#css-qnames">CSS qualified name</a> <a href="#CSS3NAMESPACE" rel=biblioentry>[CSS3NAMESPACE]<!--{{!CSS3NAMESPACE}}--></a> with an asterisk (<code>*</code> U+002A) as the local name, represents the qualified name of any element type. It represents any single element in the document tree in any namespace (including those without a namespace) if no default namespace has been specified for selectors. If a default namespace has been specified, see <a href="#univnmsp">Universal selector and Namespaces</a> below. <p>If a universal selector represented by <code>*</code> (i.e. without a namespace prefix) is not the only component of a <a href="#sequence">sequence of simple selectors</a> selectors or is immediately followed by a <a href="#pseudo-elements">pseudo-element</a>, then the <code>*</code> may be omitted and the universal selector's presence implied. <div class=example> <p>Examples:</p> <ul> <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent, <li><code>*.warning</code> and <code>.warning</code> are equivalent, <li><code>*#myid</code> and <code>#myid</code> are equivalent. </ul> </div> <p class=note><strong>Note:</strong> it is recommended that the <code>*</code> not be omitted, because it decreases the potential confusion between, for example, <code style="white-space: nowrap">div :first-child</code> and <code style="white-space: nowrap">div:first-child</code>. Here, <code style="white-space: nowrap">div *:first-child</code> is more readable. <h4 id=univnmsp><span class=secno>6.2.1. </span>Universal selector and namespaces</h4> <p>The universal selector allows an optional namespace component. It is used as follows: <dl> <dt><code>ns|*</code> <dd>all elements in namespace ns <dt><code>*|*</code> <dd>all elements <dt><code>|*</code> <dd>all elements without a namespace <dt><code>*</code> <dd>if no default namespace has been specified, this is equivalent to *|*. Otherwise it is equivalent to ns|* where ns is the default namespace. </dl> <p>A universal selector containing a namespace prefix that has not been previously <a href="#nsdecl">declared</a> is an <a href="#Conformance">invalid</a> selector. <h3 id=attribute-selectors><span class=secno>6.3. </span>Attribute selectors</h3> <p>Selectors allow the representation of an element's attributes. When a selector is used as an expression to match against an element, attribute selectors must be considered to match an element if that element has an attribute that matches the attribute represented by the attribute selector. <h4 id=attribute-representation><span class=secno>6.3.1. </span>Attribute presence and value selectors</h4> <p>CSS2 introduced four attribute selectors: <dl> <dt><code>[att]</code> <dd>Represents an element with the <code>att</code> attribute, whatever the value of the attribute. <dt><code>[att=val]</code> <dd>Represents an element with the <code>att</code> attribute whose value is exactly "val". <dt><code>[att~=val]</code> <dd>Represents an element with the <code>att</code> attribute whose value is a <a href="#whitespace">whitespace</a>-separated list of words, one of which is exactly "val". If "val" contains whitespace, it will never represent anything (since the words are <em>separated</em> by spaces). Also if "val" is the empty string, it will never represent anything. <dt><code>[att|=val]</code> <dd>Represents an element with the <code>att</code> attribute, its value either being exactly "val" or beginning with "val" immediately followed by "-" (U+002D). This is primarily intended to allow language subcode matches (e.g., the <code>hreflang</code> attribute on the <code>a</code> element in HTML) as described in BCP 47 (<a href="#BCP47" rel=biblioentry>[BCP47]<!--{{BCP47}}--></a>) or its successor. For <code>lang</code> (or <code>xml:lang</code>) language subcode matching, please see <a href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>. </dl> <p>Attribute values must be CSS <a href="http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier">identifiers</a> or <a href="http://www.w3.org/TR/CSS21/syndata.html#strings">strings</a>. <a href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a> The case-sensitivity of attribute names and values in selectors depends on the document language. <div class=example> <p>Examples:</p> <p>The following attribute selector represents an <code>h1</code> element that carries the <code>title</code> attribute, whatever its value:</p> <pre>h1[title]</pre> <p>In the following example, the selector represents a <code>span</code> element whose <code>class</code> attribute has exactly the value "example":</p> <pre>span[class="example"]</pre> <p>Multiple attribute selectors can be used to represent several attributes of an element, or several conditions on the same attribute. Here, the selector represents a <code>span</code> element whose <code>hello</code> attribute has exactly the value "Cleveland" and whose <code>goodbye</code> attribute has exactly the value "Columbus":</p> <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre> <p>The following CSS rules illustrate the differences between "=" and "~=". The first selector would match, for example, an <code>a</code> element with the value "copyright copyleft copyeditor" on a <code>rel</code> attribute. The second selector would only match an <code>a</code> element with an <code>href</code> attribute having the exact value "http://www.w3.org/".</p> <pre>a[rel~="copyright"] { ... } a[href="http://www.w3.org/"] { ... }</pre> <p>The following selector represents an <code>a</code> element whose <code>hreflang</code> attribute is exactly "fr".</p> <pre>a[hreflang=fr]</pre> <p>The following selector represents an <code>a</code> element for which the value of the <code>hreflang</code> attribute begins with "en", including "en", "en-US", and "en-scouse":</p> <pre>a[hreflang|="en"]</pre> <p>The following selectors represent a <code>DIALOGUE</code> element whenever it has one of two different values for an attribute <code>character</code>:</p> <pre>DIALOGUE[character=romeo] DIALOGUE[character=juliet]</pre> </div> <h4 id=attribute-substrings><span class=secno>6.3.2. </span>Substring matching attribute selectors</h4> <p>Three additional attribute selectors are provided for matching substrings in the value of an attribute: <dl> <dt><code>[att^=val]</code> <dd>Represents an element with the <code>att</code> attribute whose value begins with the prefix "val". If "val" is the empty string then the selector does not represent anything. <dt><code>[att$=val]</code> <dd>Represents an element with the <code>att</code> attribute whose value ends with the suffix "val". If "val" is the empty string then the selector does not represent anything. <dt><code>[att*=val]</code> <dd>Represents an element with the <code>att</code> attribute whose value contains at least one instance of the substring "val". If "val" is the empty string then the selector does not represent anything. </dl> <p>Attribute values must be CSS <a href="http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier">identifiers</a> or <a href="http://www.w3.org/TR/CSS21/syndata.html#strings">strings</a>. <a href="#CSS21" rel=biblioentry>[CSS21]<!--{{!CSS21}}--></a> The case-sensitivity of attribute names in selectors depends on the document language. <div class=example> <p>Examples:</p> <p>The following selector represents an HTML <code>object</code>, referencing an image:</p> <pre>object[type^="image/"]</pre> <p>The following selector represents an HTML anchor <code>a</code> with an <code>href</code> attribute whose value ends with ".html".</p> <pre>a[href$=".html"]</pre> <p>The following selector represents an HTML paragraph with a <code>title</code> attribute whose value contains the substring "hello"</p> <pre>p[title*="hello"]</pre> </div> <h4 id=attrnmsp><span class=secno>6.3.3. </span>Attribute selectors and namespaces</h4> <p>The attribute name in an attribute selector is given as a <a href="http://www.w3.org/TR/css3-namespace/#css-qnames">CSS qualified name</a>: a namespace prefix that has been previously <a href="#nsdecl">declared</a> may be prepended to the attribute name separated by the namespace separator &quot;vertical bar&quot; (<code>|</code>). In keeping with the Namespaces in the XML recommendation, default namespaces do not apply to attributes, therefore attribute selectors without a namespace component apply only to attributes that have no namespace (equivalent to "<code>|attr</code>"; these attributes are said to be in the "per-element-type namespace partition"). An asterisk may be used for the namespace prefix indicating that the selector is to match all attribute names without regard to the attribute's namespace. <p>An attribute selector with an attribute name containing a namespace prefix that has not been previously <a href="#nsdecl">declared</a> is an <a href="#Conformance">invalid</a> selector. <div class=example> <p>CSS examples:</p> <pre>@namespace foo "http://www.example.com"; [foo|att=val] { color: blue } [*|att] { color: yellow } [|att] { color: green } [att] { color: green }</pre> <p>The first rule will match only elements with the attribute <code>att</code> in the "http://www.example.com" namespace with the value "val".</p> <p>The second rule will match only elements with the attribute <code>att</code> regardless of the namespace of the attribute (including no namespace).</p> <p>The last two rules are equivalent and will match only elements with the attribute <code>att</code> where the attribute is not in a namespace.</p> </div> <h4 id=def-values><span class=secno>6.3.4. </span>Default attribute values in DTDs</h4> <p>Attribute selectors represent attribute values in the document tree. How that document tree is constructed is outside the scope of Selectors. In some document formats default attribute values can be defined in a DTD or elsewhere, but these can only be selected by attribute selectors if they appear in the document tree. Selectors should be designed so that they work whether or not the default values are included in the document tree. <p>For example, a XML UA may, but is <em>not</em> required to read an "external subset" of the DTD but <em>is</em> required to look for default attribute values in the document's "internal subset." (See, e.g., <a href="#XML10" rel=biblioentry>[XML10]<!--{{XML10}}--></a> for definitions