Testcase BlackBerry 5.0.0.624 on BlackBerry 9630 BB 5.0.0.624 Firefox 3.0.19 Fx 3.0.19 Firefox 3.6.8 Fx 3.6.8 Internet Explorer 6 2900.5512 IE 6 Internet Explorer 8.0 7600.16385 IE 8.0 Opera 10.00 Op 10.00 Android 2.0 A 2.0 Chrome 6.0.458.1 Ch 6.0.458.1 Mobile Safari 528.16 MSaf 528.16 Konqueror 4.3 K 4.3 NetFront 3.5 NF 3.5
CSS Style Element @charset 'charset';
@import 'styles.css';
Ignores @charset And Allows @import On Next Line
y y y y y y n y n n y
@import @import 'inapplicable.css' inapplicableMediaType;@import 'styles.css'; @import After Non-Applicable @import Rule y y y y y y y y y y y
@import 'styles.css' all,all; Comma-Separated Supported Media Types y y y The browser does not load a stylesheet it should load n y y y y y y y
@import 'styles.css' unknown,unknown; Comma-Separated Unsupported Media Types y y y y y y y y y y y
@import 'styles.css' all,all; Comma-Separated, Supported Media Type First y y y The browser does not load a stylesheet it should load n y y y y y y y
@import 'styles.css' unknown,all; Comma-Separated, Supported Media Type Last y y y The browser does not load a stylesheet it should load n y y y y y y y
@import "styles.css"/**/; Comment After URL y y y y y y y y y y y
@import url(/**/"styles.css"/**/); Comment Before And After URL y The browser loads a stylesheet it should not load n y The browser loads a stylesheet it should not load n y The next rule in the stylesheet is ignored n y y y y y
@import url(/**/"styles.css"); Comment Before URL y The browser loads a stylesheet it should not load n y The browser loads a stylesheet it should not load n y The next rule in the stylesheet is ignored n y y y y y
@import/**/"styles.css"; Comment Instead Of Space y y y y y y y y y y y
@import "styles.css"; Double Quotes With Space y y y y y y y y y y y
@import"styles.css"; Double Quotes, No Space y y y y y y y y y y y
@import url(styles.css); HTML Entity In URL y y y y y y y y y y y
@media all {
import 'styles.css';
}
Inside @media Rule
y y y The browser loads a stylesheet it should not load n y y y y y y y
@import 'styles1.css';
@import 'styles2.css';
Multiple Applicable @import Rules
y y y y y y y y y y y
@import 'styles.css'; Single Quotes With Space y y y y y y y y y y y
@import'styles.css'; Single Quotes, No Space y y y y y y y y y y y
@import "null?\"\{";
@import "styles.css";
@import "null?\"\}";
Tantek Çelik's High-Pass Filter
y y y y y y y y y y y
@import url("styles.css"); URL, Double Quotes y y y y y y y y y y y
@import url(styles.css) All; URL, Media Type Capitalized y y y The browser does not load a stylesheet it should load n y y y y y y y
@import url(styles.css) all; URL, Media Type Lowercase y y y The browser does not load a stylesheet it should load n y y y y y y y
@import url(styles.css) not all; URL, Negated Media Type y y y y y y y y y y y
@import url(styles.css); URL, No Quotes y y y y y y y y y y y
@import url('styles.css'); URL, Single Quotes y y y y y y y y y y y
@import url(styles.css); Using @import y The next rule in the stylesheet is ignored n The next rule in the stylesheet is ignored n The next rule in the stylesheet is ignored n The next rule in the stylesheet is ignored n The next rule in the stylesheet is ignored n The next rule in the stylesheet is ignored n The next rule in the stylesheet is ignored n The next rule in the stylesheet is ignored n The next rule in the stylesheet is ignored n The next rule in the stylesheet is ignored n
@import url(styles.%63ss); hex-escaped character in URL y y y y y y y y y y y
@media @media all,all { rules } Comma-Separated Supported Media Types y y y y y y y y y y y
@media unknown,unknown { rules } Comma-Separated Unsupported Media Types y y y y y y y y y y y
@media all,unknown { rules } Comma-Separated, Supported Media Type First y y y y y y y y y y y
@media unknown,all { rules } Comma-Separated, Supported Media Type Last y y y y y y y y y y y
@media all and (min-width:0px) { styles } Media Query The rule skips a block it should parse n The rule skips a block it should parse n y The rule skips a block it should parse n The rule skips a block it should parse n y y y y y The rule skips a block it should parse n
@media all and (min-width:0px), not all and (min-width:0px) { styles } Media Query, Conflicting Clauses The rule skips a block it should parse n The rule skips a block it should parse n y The rule skips a block it should parse n The rule skips a block it should parse n y y y y y The rule skips a block it should parse n
@media all and (-unknown-test:0), not all and (-unknown-test:0) { styles } Media Query, Conflicting Unknown Vendor-Specific Clauses The rule skips a block it should parse n The rule skips a block it should parse n The rule skips a block it should parse n The rule skips a block it should parse n The rule skips a block it should parse n y y y y y The rule skips a block it should parse n
@media all and (min-width:100000px), all and (min-width:100000px) { styles } Media Query, Duplicate Impossible Clause y y y y y y y y y y y
@media all and (-unknown-test:0), all and (-unknown-test:0) { styles } Media Query, Duplicate Unknown Vendor-Specific Clause y y y y y y y y y y y
@media all and (min-width:100000px) { styles } Media Query, Impossible Clause y y y y y y y y y y y
@media all and (min-width:0px), all and (min-width:0px) { styles } Media Query, Multiple Clauses The rule skips a block it should parse n The rule skips a block it should parse n y The rule skips a block it should parse n The rule skips a block it should parse n y y y y y The rule skips a block it should parse n
@media all and (-unknown-test:0) { styles } Media Query, Unknown Vendor-Specific Clause y y y y y y y y y y y
@media all { rules } Media Type 'all' y y y y y y y y y y y
@media not all { rules } Media Type 'all', Negated y y y y y y y y y y y
@media braille { rules } Media Type 'braille' n n n n n n n n n n n
@media BRAILLE { rules } Media Type 'braille', Uppercased n n n n n n n n n n n
@media embossed { rules } Media Type 'embossed' n n n n n n n n n n n
@media EMBOSSED { rules } Media Type 'embossed', Uppercased n n n n n n n n n n n
@media handheld { rules } Media Type 'handheld' n n n n n n n n n n n
@media HANDHELD { rules } Media Type 'handheld', Uppercased n n n n n n n n n n n
@media print { rules } Media Type 'print' n n n n n n n n n n n
@media PRINT { rules } Media Type 'print', Uppercased n n n n n n n n n n n
@media projection { rules } Media Type 'projection' n n n n n n n n n n n
@media PROJECTION { rules } Media Type 'projection', Uppercased n n n n n n n n n n n
@media screen { rules } Media Type 'screen' y y y y y y y y y y y
@media SCREEN { rules } Media Type 'screen', Uppercased y y y y y y y y y y y
@media speech { rules } Media Type 'speech' n n n n n n n n n n n
@media SPEECH { rules } Media Type 'speech', Uppercased n n n n n n n n n n n
@media tty { rules } Media Type 'tty' n n n n n n n n n n n
@media TTY { rules } Media Type 'tty', Uppercased n n n n n n n n n n n
@media tv { rules } Media Type 'tv' n n n n n n n n n n n
@media TV { rules } Media Type 'tv', Uppercased n n n n n n n n n n n
@media all {
parsed rules
@media all { ignored rules }
parsed rules
}
Nested @media Rules
y y y The rule parses a block it should skip n y y y y y y The rule parses a block it should skip n
@media { rules } No Media Type y y The rule parses a block it should skip n The rule parses a block it should skip n y y y y y The rule parses a block it should skip n y
@media unknown { rules } Unknown Media Type y y y y y y y y y y y
Combinators a + b Adjacent Sibling y y y n y y y y y y y
a + b + c Adjacent Sibling, Chained y y y n y y y y y y y
* + tag

<parent>
<!-- comment -->
<tag>should not match</tag>
</parent>
Adjacent Sibling, Comment Nodes Should Be Ignored
y y y y y y y y y y y
* + tag

<parent>
<br/>
<tag>should match</tag>
</parent>
Adjacent Sibling, Empty Nodes Should Not Be Ignored
y y y n y y y y y y y
head + body selector Adjacent Sibling, Head Precedes Body y y y n y y y y y y y
* + tag

<parent>
<x></x>
<tag>should match</tag>
</parent>
Adjacent Sibling, Non-HTML Elements Should Not Be Ignored
n y y n y y y y y y y
* + html Adjacent Sibling, Nothing Precedes HTML y y y y y y y y y y y
* + tag

<parent>
Extra text
<tag>should not match</tag>
</parent>
Adjacent Sibling, Text Nodes Should Be Ignored
y y y y y y y y y y y
a > b Child y y y y y y y y y y y
a > b > c Child, Chained y y y n y y y y y y y
* > html Child, HTML Has No Ancestors y y y y y y y y y y y
html > body Child, HTML Is Body's Parent y y y n y y y y y y y
a > b > c Child, Non-HTML Elements Should Not Be Ignored n y y n n y y y y y y
a b Descendant y y y y y y y y y y y
body selector Descendant, Body Matches y y y y y y y y y y y
a b c Descendant, Chained y y y y y y y y y y y
* html Descendant, HTML Has No Ancestors y y y n y y y y y y y
html * body Descendant, HTML Is Body's Parent y y y y y y y y y y y
html selector Descendant, HTML Matches y y y y y y y y y y y
a b c Descendant, Non-HTML Elements Should Not Be Ignored n y y n n y y y y y y
a ~ b General Sibling n y y n y y y y y y n
a ~ b ~ c General Sibling, Chained n y y n y y y y y y n
* ~ tag

<parent>
<br/>
<tag>should match</tag>
</parent>
General Sibling, Empty Nodes Should Not Be Ignored
n y y n y y y y y y n
head ~ body selector General Sibling, Head Precedes Body n y y n y y y y y y n
* ~ tag

<parent>
<x></x>
<tag>should match</tag>
</parent>
General Sibling, Non-HTML Elements Should Not Be Ignored
n y y n y y y y y y n
* ~ html General Sibling, Nothing Precedes HTML y y y y y n y y y y y
a ~ b General Sibling, Preceding Adjacent Sibling n y y n y y y y y y n
* ~ tag

<parent>
<!-- comment -->
<tag>should not match</tag>
</parent>
General Sibling, SGML Comment Nodes Should Be Ignored
y y y y y y y y y y y
* ~ tag

<parent>
Extra text
<tag>should not match</tag>
</parent>
General Sibling, Text Nodes Should Be Ignored
y y y y y y y y y y y
Comments #test { text-decoration:/**/underline; } After Colon y y y y y y y y y y y
#dummy,/**/#test { text-decoration:underline; } After Comma y y y y y y y y y y y
#test {/**/text-decoration:underline; } After Opening Brace y y y y y y y y y y y
#test {/**/text-decoration:underline; } After Opening Bracket y y y n y y y y y y y
#test { text-decoration:underline; /**/} Before Closing Brace y y y y y y y y y y y
#test { text-decoration/**/:underline; } Before Colon y y y y y y y y y y y
#test/**/,#dummy { text-decoration:underline; } Before Comma y y y y y y y y y y y
#test/**/[id] { text-decoration:underline; } Before Opening Bracket y y y n The rule applies to the wrong element(s) n y y y y y y
/**/#test { text-decoration:underline; } Before Selector y y y y y y y y y y y
#test { text-decoration:underline /**/ ; } Before Semicolon y y y y y y y y y y y
#test/**/{ text-decoration:underline; } Between Selector And Opening Brace y y y y y y y y y y y
#id/**/.test { text-decoration:underline; } Between Selectors, No Space y y y The rule applies to the wrong element(s) n The rule applies to the wrong element(s) n y y y y y y
body/**/ #test { text-decoration:underline; } Between Selectors, Space After y y y y y y y y y y y
body /**/#test { text-decoration:underline; } Between Selectors, Space Before y y y y y y y y y y y
body /**/ #test { text-decoration:underline; } Between Selectors, Space Before And After y y y y y y y y y y y
/*/*/
rules
/**/
Caio Hack
y y y y y y y y y y y
/*/#id {rules}/**/ Exotic Comment #1 y y y y y y y y y y y
head/*/+body/**/ selector {rules}/**/ Exotic Comment #2 y y y y y y y y y y y
html/*\*//*/* /**/ body selector {rules}/**/ Exotic Comment #3 y y y y y y y y y y y
html/*/* /**/ selector {rules}/**/ Exotic Comment #4 y y y y y y y y y y y
*+html/*/* /**/ body selector {rules}/**/ Exotic Comment #5 y y y y y y y y y y y
/*/*//*/
rules
/**/
Fabrice Inversion
y y y y y y y y y y y
/*\*/
rules
/**/
Hide From Internet Explorer 5 For MacOS
y y y y y y y y y y y
/*\*//*/
rules
/**/
Show Only To Internet Explorer 5 For MacOS
y y y y y y y y y y y
Conditional Comment <!--[if !IE]><style> rules </style><![endif]--> Anti-Internet Explorer variant, Downlevel Hidden y y y y y y y y y y y
<!--[if !IE]><!--><style> rules </style><!--<![endif]--> Anti-Internet Explorer variant, Downlevel Revealed y y y n n y y y y y y
<!--[if IE]><style> rules </style><![endif]--> Internet Explorer variant y y y n n y y y y y y
<!--[if (IE)&(!IE)]><style> rules </style><![endif]--> Internet Explorer variant, IE And Not IE y y y y y y y y y y y
<!--&{true}; <style> rules </style>--> Netscape 4 variant y y y y y y y y y y y
Important selector {
property:value ! /**/ important;
property:ignore;
}
Comment And Space Between Exclamation And Phrase
n y y n y n n n n n n
selector {
property:value !/**/important;
property:ignore;
}
Comment Between Exclamation And Phrase
n y y n y n n n n n n
selector {
property:value !important;
property:ignore;
}
Should Use Important Value And Not Later Unimportant Value
n y y n y y y y y y y
selector {
property:ignore !important;
property:value !important;
}
Should Use Last Important Value
y y y y y y y y y y y
selector {
property:value !important;
property:ignore;
}
Space Between Exclamation And Phrase
n y y n y y y y y y y
Link Element <link rel="stylesheet" media="a\ll" href="styles.css" /> All Media Type, Escaped n n y n n y y y y y n
<link rel="style&#x7f;sheet" href="styles.css" /> Correct Rel, Backspace Escaped y y y y y y y y y y y
<link rel="Stylesheet" href="styles.css" /> Correct Rel, Capitalized y y y y y y y y y y y
<link rel="&#x73;tylesheet" href="styles.css" /> Correct Rel, Hex Escaped y y y y y y y y y y n
<link rel="style&#x00;sheet" href="styles.css" /> Correct Rel, Null Escaped y y y y y y y y y y y
<link rel="stylesheet" … href="data:text/css,stylesheetURLencoded" /> Data URI n y y n n y y y y y n
<link rel="stylesheet" … href="data:text/css,@import 'style.css';)" /> Data URI With @import n n n n n y y n y n n
<link rel="stylesheet" … href="data:text/css;base64,base64encoded(@import 'style.css';)" /> Data URI With @import, Base64 Encoded n n n n n y y n y n n
<link rel="stylesheet" … href="data:text/css,URLencoded(@import 'style.css';)" /> Data URI With @import, URL Encoded n n n n n y y n y n n
<link rel="stylesheet" … href="data:text/css,@import 'FQDN/style.css';)" /> Data URI With FQDN @import y y y n y y y y y y y
<link rel="stylesheet" … href="data:text/css;base64,base64encoded(@import 'FQDN/style.css';)" /> Data URI With FQDN @import, Base64 Encoded y y y n y y y y y y y
<link rel="stylesheet" … href="data:text/css,URLencoded(@import 'FQDN/style.css';)" /> Data URI With FQDN @import, URL Encoded y y y n y y y y y y y
<link rel="stylesheet" … href="data:text/css;base64,stylesheetBase64encoded" /> Data URI, Base64 Encoded y y y n y y y y y y y
<link rel="stylesheet" … href="data:text/css,stylesheetURLencoded" /> Data URI, URL Encoded y y y n y y y y y y y
<link rel="stylesheet" type="" href="styles.css" /> Empty Type n y y n n n y y y y y
<link rel="stylesheet" type="&116;ext/css" /> HTML Entity Within Type y y y y y y y y y y n
<link rel='stylesheet' media='all' href='styles.css' /> Media Type 'all' y y y y y y y y y y y
<link rel='stylesheet' media='ALL' href='styles.css' /> Media Type 'all', Uppercased y y y y y y y y y y y
<link rel='stylesheet' media='braille' href='styles.css' /> Media Type 'braille' n n n n n n n n n n n
<link rel='stylesheet' media='BRAILLE' href='styles.css' /> Media Type 'braille', Uppercased n n n n n n n n n n n
<link rel='stylesheet' media='embossed' href='styles.css' /> Media Type 'embossed' n n n n n n n n n n n
<link rel='stylesheet' media='EMBOSSED' href='styles.css' /> Media Type 'embossed', Uppercased n n n n n n n n n n n
<link rel='stylesheet' media='handheld' href='styles.css' /> Media Type 'handheld' n n n n n n n n n n n
<link rel='stylesheet' media='HANDHELD' href='styles.css' /> Media Type 'handheld', Uppercased n n n n n n n n n n n
<link rel='stylesheet' media='print' href='styles.css' /> Media Type 'print' n n n n n n n n n n n
<link rel='stylesheet' media='PRINT' href='styles.css' /> Media Type 'print', Uppercased n n n n n n n n n n n
<link rel='stylesheet' media='projection' href='styles.css' /> Media Type 'projection' n n n n n n n n n n n
<link rel='stylesheet' media='PROJECTION' href='styles.css' /> Media Type 'projection', Uppercased n n n n n n n n n n n
<link rel='stylesheet' media='screen' href='styles.css' /> Media Type 'screen' y y y y y y y y y y y
<link rel='stylesheet' media='SCREEN' href='styles.css' /> Media Type 'screen', Uppercased y y y y y y y y y y y
<link rel='stylesheet' media='speech' href='styles.css' /> Media Type 'speech' n n n n n n n n n n n
<link rel='stylesheet' media='SPEECH' href='styles.css' /> Media Type 'speech', Uppercased n n n n n n n n n n n
<link rel='stylesheet' media='tty' href='styles.css' /> Media Type 'tty' n n n n n n n n n n n
<link rel='stylesheet' media='TTY' href='styles.css' /> Media Type 'tty', Uppercased n n n n n n n n n n n
<link rel='stylesheet' media='tv' href='styles.css' /> Media Type 'tv' n n n n n n n n n n n
<link rel='stylesheet' media='TV' href='styles.css' /> Media Type 'tv', Uppercased n n n n n n n n n n n
<link rel="stylesheet" media="unknown all" href="styles.css" /> Media Type 'unknown all' y y y y y y y y y y y
<link rel="stylesheet" media="unknown, all" href="styles.css" /> Media Type 'unknown, all' y y y y y y y y y y y
<link rel="stylesheet" media="inapplicable&#44;all" href="styles.css" /> Multiple Media Type, HTML Entity Comma Separated y y y y y y y y y y n
<link rel="stylesheet" media="inapplicable%2dall" href="styles.css" /> Multiple Media Type, Hex Comma Separated y y y y y y y y y y y
<link rel="foo&#x7f;stylesheet" href="styles.css" /> Multiple Rels, Backspace Separated y y y y y y y y y n y
<link rel="foo,stylesheet" href="styles.css" /> Multiple Rels, Comma Separated y y y y y y y y y n y
<link rel="foo&#32;stylesheet" href="styles.css" /> Multiple Rels, Hex Space Separated y y y n y y y y y y n
<link rel="foo&#x00;stylesheet" href="styles.css" /> Multiple Rels, Null Separated y y y y y y y y y n y
<link rel="foo stylesheet" href="styles.css" /> Multiple Rels, Space Separated y y y n y y y y y y y
<link rel="stylesheet" … href="styles1.css" />
<link rel="stylesheet" … href="styles2.css" />
Multiple Stylesheets
y y y y y y y y y y y
<link rel="stylesheet" media="not all" href="styles.css" /> Not All Media Type y y y y y y y y y y y
<link rel="alternate stylesheet" … href="styles1.css" />
<link rel="alternate stylesheet" … href="styles2.css" />
Only Alternate Stylesheets
y y y y y y y y y The browser loads a stylesheet it should not load n y
<link rel="stylesheet" target="_blank" href="styles.css" /> Targets Blank y y y y y y y y y y y
<link rel="stylesheet" target="_self" href="styles.css" /> Targets Self y y y y y y y y y y y
<link rel="stylesheet" target="unknown" href="styles.css" /> Targets Unknown Frame y y y y y y y y y y y
<link rel="stylesheet" type="text/css; charset=charset" href="styles.css" /> Type Including Charset n y y n n y y y y y y
<link rel="stylesheet" type="text/css; charset=incorrect" href="styles.css" /> Type Including Incorrect Charset n y y n n y y y y y y
<link rel="stylesheet" type="application/css" href="styles.css" /> Type application/css n n n n n n y y y y n
<link rel="stylesheet" type="foo" href="styles.css" /> Type foo y y y y y y n n n n y
<link rel="stylesheet" type="text/css" href="styles.css" /> Type text/css y y y y y y y y y y y
<link rel="stylesheet" type="text/css; charset=incorrect" href="styles.css" /> Type text/css Including Incorrect Charset n y y n n y y y y y y
<link rel="stylesheet" type="text/c&#x7f;ss" href="styles.css" /> Type text/css, Backspace Escaped y y y y y y n n n n y
<link rel="stylesheet" type="text/&#63;ss" href="styles.css" /> Type text/css, Hex Escaped y y y y y y y y y y n
<link rel="stylesheet" type="text/c&#x00;ss" href="styles.css" /> Type text/css, Null Escaped y y y y y y n n n n y
<link rel="stylesheet" type="TEXT/CSS" href="styles.css" /> Type text/css, Uppercased y y y y y y y y y y y
<link rel="stylesheet" type="text/nonsense" href="styles.css" /> Type text/nonsense y y y y y y n n n n y
<link rel="stylesheet" type="text/stylesheet" href="styles.css" /> Type text/stylesheet n n n n n n y y y y n
<link media="all" href="styles.css" /> Without Rel y y y y y y y y y y y
<link rel="stylesheet" hreflang="la" href="styles.css" /> hreflang y y y y y y y y y y y
<link rel="stylesheet" hreflang="LA" href="styles.css" /> hreflang, Capitalized y y y y y y y y y y y
<link rel="stylesheet" hreflang="l" href="styles.css" /> hreflang, Truncated y y y y y y y y y y y
<link rel="stylesheet" hreflang="L" href="styles.css" /> hreflang, Truncated And Capitalized y y y y y y y y y y y
<link rel="stylesheet" hreflang="?" href="styles.css" /> hreflang, Unknown y y y y y y y y y y y
<link rel="stylesheet" lang="la" href="styles.css" /> lang y y y y y y y y y y y
<link rel="stylesheet" lang="LA" href="styles.css" /> lang, Capitalized y y y y y y y y y y y
<link rel="stylesheet" lang="l" href="styles.css" /> lang, Truncated y y y y y y y y y y y
<link rel="stylesheet" lang="L" href="styles.css" /> lang, Truncated And Capitalized y y y y y y y y y y y
<link rel="stylesheet" lang="?" href="styles.css" /> lang, Unknown y y y y y y y y y y y
Parsing <style>@import 'styles.css</style> Incomplete @import The browser does not load a stylesheet it should load n The browser does not load a stylesheet it should load n y The browser does not load a stylesheet it should load n y y The browser does not load a stylesheet it should load n The browser does not load a stylesheet it should load n The browser does not load a stylesheet it should load n The browser does not load a stylesheet it should load n The browser does not load a stylesheet it should load n
i {content: "\"/*" }
rules
/**/
Inline Highpass
y y y y y y y y y y y
@media tty {
i{content:"\";/*" "*/}}; @import 'styles.css'; {;}/*";}
}/**/
Internet Explorer 5.0x Windows Mid Pass
y y y y y y y y y y y
@media tty {
i{content:"\";/*" "*/}}@m; @import 'styles.css'; /*";}
}/**/
Internet Explorer 5.5x Windows Mid Pass
y y y y y y y y y y y
@media tty {
i{content:"\";/*" "*/}} @import 'styles.css'; /*";}
}/**/
Internet Explorer 5.x Windows Mid Pass
y y y y y y y y y y y
selector {
causta:'}' + ({7} * '\'');
more rules
}
Parentheses Inside Blocks
n y y y y y n y n y n
#test { text-decoration:underline; \} Slash Escape Before Closing Brace n y y y y y y y y y n
#test \{ text-decoration:underline; } Slash Escape Before Opening Brace n y y n y y y y y y y
\ #test { text-decoration:underline; } Slash Escape Before Selector y y y y y y y y y y y
.one\.two { text-decoration:underline; } Slash Escape Escaping Period n n n n n n n n n n n
\#test { text-decoration:underline; } Slash Escape Escaping Pound Sign y y y y y y y y y y y
#test { t\ext-decoration:underline; } Slash Escape In Property Name Escaping Hex Character y y y y y y y y y y y
#test { \text-decoration:underline; } Slash Escape In Property Name Escaping Non-Hex Character n y y y y y y y y y y
#t\est { text-decoration:underline; } Slash Escape In Selector Escaping Hex Character y y y y y y y y y y y
#\test { text-decoration:underline; } Slash Escape In Selector Escaping Non-Hex Character y y y y y y y y y y y
selector {
voice-family: "\"}\"";
voice-family:inherit;
properties
}
Tantek Çelik's Box Model Hack
y y y y y y y y y y y
selector\u000dselector Whitespace, Carriage Return y y y y y y y y y y y
selector\u000cselector Whitespace, Form Feed y y y y y y y y y y y
selector\u3000selector Whitespace, Invalid Unicode Whitespace Character y y y y y y y y y y y
selector\u000aselector Whitespace, Line Feed y y y y y y y y y y y
selector\u0020selector Whitespace, Tab y y y y y y y y y y y
Preferred Stylesheets <link rel="stylesheet" … title="first" href="stylesheet_to_avoid.css" />
<link rel="stylesheet" … title="second" href="stylesheet_to_use.css" />
Default-Style HTTP header
The browser loads a stylesheet it should not load

The browser does not load a stylesheet it should load
n
y y The browser loads a stylesheet it should not load n y The browser loads a stylesheet it should not load

The browser does not load a stylesheet it should load
n
The browser loads a stylesheet it should not load

The browser does not load a stylesheet it should load
n
The browser loads a stylesheet it should not load

The browser does not load a stylesheet it should load
n
The browser loads a stylesheet it should not load

The browser does not load a stylesheet it should load
n
The browser loads a stylesheet it should not load

The browser does not load a stylesheet it should load
n
The browser loads a stylesheet it should not load

The browser does not load a stylesheet it should load
n
<meta http-equiv="Default-Style" content="second">
<link rel="stylesheet" … title="first" href="stylesheet_to_avoid.css" />
<link rel="stylesheet" … title="second" href="stylesheet_to_use.css" />
Default-Style META tag
The browser loads a stylesheet it should not load

The browser does not load a stylesheet it should load
n
y y The browser loads a stylesheet it should not load n y The browser loads a stylesheet it should not load

The browser does not load a stylesheet it should load
n
y y y y The browser loads a stylesheet it should not load

The browser does not load a stylesheet it should load
n
<link rel="alternate stylesheet" … href="stylesheet_to_avoid.css" />
<link rel="stylesheet" … href="stylesheet_to_use.css" />
Link With Alternate Rel
y y y y y y y y The browser loads a stylesheet it should not load n The browser loads a stylesheet it should not load n y
Pseudo-Classes html:active selector Active, HTML The rule is not applied dynamically

The rule is permanently NOT applied
n
y y The rule is not applied dynamically

The rule is permanently NOT applied
n
The rule is not applied dynamically

The rule is permanently NOT applied
n
y The rule is not applied dynamically

The rule is permanently NOT applied
n
y The rule is not applied dynamically

The rule is permanently NOT applied
n
y The rule is not applied dynamically

The rule is permanently NOT applied
n
:empty Empty y y y y y y y y y y y
tag:empty

<tag><br/></tag>
Empty Does Not Ignore Empty Elements
y y y y y y y y y y y
tag:empty

<tag><x></x></tag>
Empty Does Not Ignore Non-HTML Elements
n y y y y y y y y y y
tag:empty

<tag><br/></tag>
Empty Does Not Ignore Self-Closing Elements
y y y y y y y y y y y
tag:empty

<tag>Text</tag>
Empty Does Not Ignore Text Nodes
n y y y y y y y y y y
tag:empty

<tag><[![CDATA[[]]></tag>
Empty Ignores Empty CDATA Nodes
y y y n n y y y y y y
tag:empty

<tag><?PI?></tag>
Empty Ignores Processing Instruction Nodes
y y y n n y y y y y y
tag:empty

<tag><!-- comment --></tag>
Empty Ignores SGML Comments
y y y n n y y y y y y
tag:empty

<tag />
Empty Matches Self-Closing Element
y y y n n y y y y y y
:not(:empty) Empty, Negated n y y n n y y y y y n
:first-child First Child y y y n y y y y y y y
<parent>
<br/>
<tag>should not be first child</tag>
</parent>
First Child Does Not Ignore Empty Nodes
y y y y y y y y y y y
<parent>
<x></x>
<tag>should not be first child</tag>
</parent>
First Child Does Not Ignore Non-HTML Elements
n y y y y y y y y y y
<parent>
<!-- comment -->
<tag>should still be first child</tag>
</parent>
First Child Ignores Comment Nodes
y y y n y y y y y y y
<parent>
Extra text
<tag>should still be first child</tag>
</parent>
First Child Ignores Text Nodes
y y y n y y y y y y y
body:first-child selector First Child, Body Is Not First Child y y y y y y y y y y y
:first-child + html selector First Child, Doctype Is Not First Child y y y y y y y y y y y
:first-child ~ html selector First Child, Doctype Is Not First Child #2 y y y y y y y y y y y
html:first-child selector First Child, HTML Is Not First Child y y y y y y y y y y y
head:first-child + body selector First Child, Head Is First Child y y y n y y y y y y y
head:first-child ~ body selector First Child, Head Is First Child #2 n y y n y y y y y y n
:not(:first-child) First Child, Negated n y y n n y y y y y n
:not(:first-child):not(:first-child) First Child, Negated Twice n y y n n y y y y y n
:first-child:first-child First Child, Twice y y y n y y y y y y y
:not(:first-child:first-child) First Child, Twice Negated y y y y y y y y n y y
:lang(lc) Lang n y y n y y y y y y y
:lang(LC) Lang, Capitalized n y y n y y y y y y y
:not(:lang(lc)) Lang, Negated n y y n n y y y y y n
:not(:lang(lc)):not(:lang(lc)) Lang, Negated Twice n n n n n n n n n n n
:lang(l) Lang, Truncated n n n n n n n n n n n
:lang(L) Lang, Truncated And Capitalized n n n n n n n n n n n
:lang(lc):lang(lc) Lang, Twice n y y n n y y y y y y
:not(:lang(lc):lang(lc)) Lang, Twice Negated y y y y y y y y y y y
:lang(?) Lang, Unknown n n n n n n n n n n n
:last-child Last Child y y y n n y y y y y y
<parent>
<tag>should not be last child</tag>
<br/>
</parent>
Last Child Does Not Ignore Empty Nodes
y y y y y y y y y y y
<parent>
<tag>should not be last child</tag>
<x></x>
</parent>
Last Child Does Not Ignore Non-HTML Elements
n y y y y y y y y y y
<parent>
<tag>should still be last child</tag>
<!-- comment -->
</parent>
Last Child Ignores Comment Nodes
y y y n n y y y y y y
<parent>
<tag>should still be last child</tag>
Extra text
</parent>
Last Child Ignores Text Nodes
y y y n n y y y y y y
body:last-child selector Last Child, Body Is Last Child n y y n n y y y y y y
html:last-child selector Last Child, HTML Is Not Last Child y y y y y y y y y y y
head:last-child + body selector Last Child, Head Is Not Last Child y y y y y y y y y y y
head:last-child ~ body selector Last Child, Head Is Not Last Child #2 y y y y y y y y y y y
:not(:last-child) Last Child, Negated n y y n n y y y y y n
:not(:last-child):not(:last-child) Last Child, Negated Twice n y y n n y y y y y n
:last-child:last-child Last Child, Twice y y y n n y y y y y y
:not(:last-child:last-child) Last Child, Twice Negated y y y y y y y y n y y
:not(:not((selector)) Negation, Cannot Negate Negations y y y y y y y y y y y
:nth-child(+1n+0) Nth Child, All Children Using (+1n+0) n n y n n y n y n n n
:nth-child(+1n-0) Nth Child, All Children Using (+1n-0) n n y n n y n y n n n
:nth-child(+1n-1) Nth Child, All Children Using (+1n-1) n n y n n y n y n n n
:nth-child(+n) Nth Child, All Children Using (+n) n n n n n y n n n n n
:nth-child(+n+0) Nth Child, All Children Using (+n+0) n n n n n y n n n n n
:nth-child(+n-0) Nth Child, All Children Using (+n-0) n n n n n y n n n n n
:nth-child(+n-1) Nth Child, All Children Using (+n-1) n n n n n y n n n n n
:nth-child(1n+0) Nth Child, All Children Using (1n+0) n n y n n y y y y y n
:nth-child(1n-1) Nth Child, All Children Using (1n-1) n n y n n y y y y y n
:nth-child(n) Nth Child, All Children Using (n) n n y n n y y y y y n
:nth-child(n+0) Nth Child, All Children Using (n+0) n n y n n y y y y y n
:nth-child(n-1) Nth Child, All Children Using (n-1) n n y n n y y y y y n
:nth-child(+0n+1) Nth Child, First Child Using (+0n+1) n n y n n y n y n n n
:nth-child(+1) Nth Child, First Child Using (+1) n n y n n y n y n n n
:nth-child(-0n+1) Nth Child, First Child Using (-0n+1) n n y n n y y y y y n
:nth-child(0n+1) Nth Child, First Child Using (0n+1) n n y n n y y y y y n
:nth-child(1) Nth Child, First Child Using (1) n n y n n y y y y y n
:nth-child(+0) Nth Child, Impossible Child Using (+0) y y y y y y y y y y y
:nth-child(+0n+0) Nth Child, Impossible Child Using (+0n+0) y y y y y y y y y y y
:nth-child(+0n-0) Nth Child, Impossible Child Using (+0n-0) y y y y y y y y y y y
:nth-child(+0n-1) Nth Child, Impossible Child Using (+0n-1) y y y y y y y y y y y
:nth-child(-0) Nth Child, Impossible Child Using (-0) y y y y y y y y y y y
:nth-child(-0n+0) Nth Child, Impossible Child Using (-0n+0) y y y y y y y y y y y
:nth-child(-0n-0) Nth Child, Impossible Child Using (-0n-0) y y y y y y y y y y y
:nth-child(-0n-1) Nth Child, Impossible Child Using (-0n-1) y y y y y y y y y y y
:nth-child(-1) Nth Child, Impossible Child Using (-1) y y y y y y y y y y y
:nth-child(-1n+0) Nth Child, Impossible Child Using (-1n+0) y y y y y y y y y y y
:nth-child(-1n-0) Nth Child, Impossible Child Using (-1n-0) y y y y y y y y y y y
:nth-child(-1n-1) Nth Child, Impossible Child Using (-1n-1) y y y y y y y y y y y
:nth-child(-n) Nth Child, Impossible Child Using (-n) y y y y y y y y y y y
:nth-child(-n+0) Nth Child, Impossible Child Using (-n+0) y y y y y y y y y y y
:nth-child(-n-0) Nth Child, Impossible Child Using (-n-0) y y y y y y y y y y y
:nth-child(-n-1) Nth Child, Impossible Child Using (-n-1) y y y y y y y y y y y
:nth-child(0) Nth Child, Impossible Child Using (0) y y y y y y y y y y y
:nth-child(0n+0) Nth Child, Impossible Child Using (0n+0) y y y y y y y y y y y
:not(:nth-child(+1n+0)) Nth Child, No Children Using (+1n+0) y y y y y y y y y y y
:not(:nth-child(+1n-0)) Nth Child, No Children Using (+1n-0) y y y y y y y y y y y
:not(:nth-child(+1n-1)) Nth Child, No Children Using (+1n-1) y y y y y y y y y y y
:not(:nth-child(+n)) Nth Child, No Children Using (+n) y y y y y y y n y y y
:not(:nth-child(+n+0)) Nth Child, No Children Using (+n+0) y y y y y y y n y y y
:not(:nth-child(+n-0)) Nth Child, No Children Using (+n-0) y y y y y y y n y y y
:not(:nth-child(+n-1)) Nth Child, No Children Using (+n-1) y y y y y y y n y y y
:not(:nth-child(1n+0)) Nth Child, No Children Using (1n+0) y y y y y y y y y y y
:not(:nth-child(1n-1)) Nth Child, No Children Using (1n-1) y y y y y y y y y y y
:not(:nth-child(n)) Nth Child, No Children Using (n) y y y y y y y y y y y
:not(:nth-child(n+0)) Nth Child, No Children Using (n+0) y y y y y y y y y y y
:not(:nth-child(n-1)) Nth Child, No Children Using (n-1) y y y y y y y y y y y
:not(:nth-child(+0n+1)) Nth Child, Not First Child Using (+0n+1) n n y n n y n y n n n
:not(:nth-child(+1)) Nth Child, Not First Child Using (+1) n n y n n y n y n n n
:not(:nth-child(-0n+1)) Nth Child, Not First Child Using (-0n+1) n n y n n y y y y y n
:not(:nth-child(0n+1)) Nth Child, Not First Child Using (0n+1) n n y n n y y y y y n
:not(:nth-child(1)) Nth Child, Not First Child Using (1) n n y n n y y y y y n
:not(:nth-child(+0)) Nth Child, Not Impossible Child Using (+0) n n y n n n n y n n n
:not(:nth-child(+0n+0)) Nth Child, Not Impossible Child Using (+0n+0) n n y n n n n y n n n
:not(:nth-child(+0n-0)) Nth Child, Not Impossible Child Using (+0n-0) n n y n n n n y n n n
:not(:nth-child(+0n-1)) Nth Child, Not Impossible Child Using (+0n-1) n n y n n y n y n n n
:not(:nth-child(-0)) Nth Child, Not Impossible Child Using (-0) n n y n n n n y n n n
:not(:nth-child(-0n+0)) Nth Child, Not Impossible Child Using (-0n+0) n n y n n n y y y y n
:not(:nth-child(-0n-0)) Nth Child, Not Impossible Child Using (-0n-0) n n y n n n y y y y n
:not(:nth-child(-0n-1)) Nth Child, Not Impossible Child Using (-0n-1) n n y n n y y y y y n
:not(:nth-child(-1)) Nth Child, Not Impossible Child Using (-1) n n y n n y n y n n n
:not(:nth-child(-1n+0)) Nth Child, Not Impossible Child Using (-1n+0) n n y n n y y y y y n
:not(:nth-child(-1n-0)) Nth Child, Not Impossible Child Using (-1n-0) n n y n n y y y y y n
:not(:nth-child(-1n-1)) Nth Child, Not Impossible Child Using (-1n-1) n n y n n y y y y y n
:not(:nth-child(-n)) Nth Child, Not Impossible Child Using (-n) n n y n n y y y y y n
:not(:nth-child(-n+0)) Nth Child, Not Impossible Child Using (-n+0) n n y n n y y y y y n
:not(:nth-child(-n-0)) Nth Child, Not Impossible Child Using (-n-0) n n y n n y y y y y n
:not(:nth-child(-n-1)) Nth Child, Not Impossible Child Using (-n-1) n n y n n y y y y y n
:not(:nth-child(0)) Nth Child, Not Impossible Child Using (0) n n y n n n y y y y n
:not(:nth-child(0n+0)) Nth Child, Not Impossible Child Using (0n+0) n n y n n n y y y y n
:nth-child(2n) Nth Child: First Child Using (2n) n n y n n y y y y y n
:nth-child(2n+0) Nth Child: First Child Using (2n+0) n n y n n y y y y y n
:nth-child(2n-0) Nth Child: First Child Using (2n-0) n n y n n y y y y y n
:nth-child(even) Nth Child: First Child Using (even) n n y n n y y y y y n
:not(:nth-child(2n)) Nth Child: Not First Child Using (2n) n n y n n y y y y y n
:not(:nth-child(2n+0)) Nth Child: Not First Child Using (2n+0) n n y n n y y y y y n
:not(:nth-child(2n-0)) Nth Child: Not First Child Using (2n-0) n n y n n y y y y y n
:not(:nth-child(even)) Nth Child: Not First Child Using (even) n n y n n y y y y y n
:only-child Only Child y y y n n y y y y y y
<parent>
<tag>should not be only child</tag>
<br/>
</parent>
Only Child Does Not Ignore Empty Nodes
y y y y y y y y y y y
<parent>
<tag>should not be only child</tag>
<x></x>
</parent>
Only Child Does Not Ignore Non-HTML Elements
n y y y y y y y y y y
<parent>
<tag>should still be only child</tag>
<!-- comment -->
</parent>
Only Child Ignores Comment Nodes
y y y n n y y y y y y
<parent>
<tag>should still be only child</tag>
Extra text
</parent>
Only Child Ignores Text Nodes
y y y n n y y y y y y
body:only-child selector Only Child, Body Is Not Only Child y y y y y y y y y y y
html:only-child selector Only Child, HTML Is Not Only Child y y y y y y y y y y y
head:only-child + body selector Only Child, Head Is Not Only Child y y y y y y y y y y y
head:only-child ~ body selector Only Child, Head Is Not Only Child #2 y y y y y y y y y y y
:not(:only-child) Only Child, Negated n y y n n y y y y y n
:not(:only-child):not(:only-child) Only Child, Negated Twice n y y n n y y y y y n
:only-child:only-child Only Child, Twice y y y n n y y y y y y
:not(:only-child:only-child) Only Child, Twice Negated y y y y y y y y n y y
:root Root n y y n n y y y y y y
body:root Root, Body Is Not Root y y y y y y y y y y y
html:root Root, HTML Is Root n y y n n y y y y y y
:not(:root) Root, Negated n y y n n y y y y y n
:not(:root):not(:root) Root, Negated Twice n y y n n y y y y y n
* ~ :root Root, Nothing Adjacent To Root #1 y y y y y n y y y y y
* + :root Root, Nothing Adjacent To Root #2 y y y y y y y y y y y
* :root Root, Nothing Precedes Root #1 y y y y y y y y y y y
* > :root Root, Nothing Precedes Root #2 y y y y y y y y y y y
:root :root Root, Only One Root y y y y y y y y y y y
:root:root Root, Twice n y y n n y y y y y y
:not(:root:root) Root, Twice Negated y y y y y y y y n y y
Selectors [attr^=""] Attribute Begins With Empty String n y n n y y n n n n y
[attr^="full value"] Attribute Begins With Full Value n y y n y y y y y y y
[attr|=""] Attribute Begins With Hyphenated Empty String n n n n n n n n n The browser crashes when attempting this test ? n
[attr|="Full Value"] Attribute Begins With Hyphenated Full Value y y y n y y y y y y y
[attr|="-"]

<tag attr="-one-two" />
Attribute Begins With Hyphenated Hyphen
n n n n n n n n n n n
[attr|="one"]

<tag attr="one-two" />
Attribute Begins With Hyphenated Substring
y y y n y y y y y y y
[attr|="one-"]

<tag attr="one-two" />
Attribute Begins With Hyphenated Substring Including Hyphen
n n n n n n n n n n n
[attr|="one "]

<tag attr="one -two" />
Attribute Begins With Hyphenated Substring Including Space
y y y n y y y y y y y
[attr^="partial value"] Attribute Begins With Partial Value n y y n y y y y y y y
[attr|="two-three"]

<tag attr="one-two-three-four" />
Attribute Begins With Recursively Hyphenated Value
n n n n n n n n n n n
[attr~="two three"]

<tag attr="one two three four" />
Attribute Contains Recursively Space Separated Value
y y y y y y y y y y y
[attr~=""] Attribute Contains Space Separated Empty String n n n n n n n n n n n
[attr~="full value"] Attribute Contains Space Separated Full Value n n n n n n n n n n n
[attr~=" "] Attribute Contains Space Separated Space n n n n n n n n n n n
[attr~="two"]

<tag attr="one two" />
Attribute Contains Space Separated Substring
y y y n y y y y y y y
[attr*="substring"] Attribute Contains Substring n y y n y y y y y y n
[attr*=""] Attribute Contains Substring Empty String n n n n y y n n n n n
[attr*="full value"] Attribute Contains Substring Full Value n y y n y y y y y y n
:not([attr^=""]) Attribute Does Not Begin With Empty String n n y n n n y y y y n
:not([attr^="full value"]) Attribute Does Not Begin With Full Value y y y y y y y y y y y
:not([attr|=""]) Attribute Does Not Begin With Hyphenated Empty String n y y n n y y y y The browser crashes when attempting this test ? n
:not([attr|="Full Value"]) Attribute Does Not Begin With Hyphenated Full Value y y y y y y y y y y y
[attr|="-"]

<tag attr="-one-two" />
Attribute Does Not Begin With Hyphenated Hyphen
n y y n n y y y y y n
:not([attr|="one"])

<tag attr="one-two" />
Attribute Does Not Begin With Hyphenated Substring
y y y y y y y y y y y
:not([attr|="one-"])

<tag attr="one-two" />
Attribute Does Not Begin With Hyphenated Substring Including Hyphen
n y y n n y y y y y n
:not([attr|="one "])

<tag attr="one -two" />
Attribute Does Not Begin With Hyphenated Substring Including Space
n n n n n n n n n n n
:not([attr^="partial value"]) Attribute Does Not Begin With Partial Value y y y y y y y y y y y
:not([attr|="two-three"])

<tag attr="one-two-three-four" />
Attribute Does Not Begin With Recursively Hyphenated Value
n y y n n y y y y y n
:not([attr~="two three"])

<tag attr="one two three four" />
Attribute Does Not Contain Recursively Space Separated Value
y n n y y n n n n n y
:not([attr~=""]) Attribute Does Not Contain Space Separated Empty String n y y n n y y y y y n
:not([attr~="full value"]) Attribute Does Not Contain Space Separated Full Value y n n y y n n n n n y
:not([attr~=" "]) Attribute Does Not Contain Space Separated Space n y y n n y y y y y n
:not([attr~="two"])

<tag attr="one two" />
Attribute Does Not Contain Space Separated Substring
y y y y y y y y y y y
:not([attr*="substring"]) Attribute Does Not Contain Substring y y y y y y y y y y y
:not([attr*=""]) Attribute Does Not Contain Substring Empty String n y y n n n y y y y n
:not([attr*="full value"]) Attribute Does Not Contain Substring Full Value y y y y y y y y y y y
:not([attr$=""]) Attribute Does Not End With Empty String n n y n n n y y y y n
:not([attr$="full value"]) Attribute Does Not End With Full Value y y y y y y y y y y y
:not([attr$="partial value"]) Attribute Does Not End With Partial Value y y y y y y y y y y y
[attr=""]

<tag attr=""></tag>
Attribute Empty Values Are Matchable
y y y n y y y y y y y
[attr$=""] Attribute Ends With Empty String n y n n y y n n n n y
[attr$="full value"] Attribute Ends With Full Value n y y n y y y y y y y
[attr$="partial value"] Attribute Ends With Partial Value n y y n y y y y y y y
tag[attr]

<tag attr="value">should match</tag>
Attribute Presence
y y y n y y y y y y y
tag[attr]

<tag>should not match</tag>
Attribute Presence, Attribute Is Not Present
y y y y y y y y y y y
tag:not([attr])

<tag>should match</tag>
Attribute Presence, Attribute Is Not Present, Negated
n y y n n y y y y y n
tag:not([attr])

<tag attr="value">should not match</tag>
Attribute Presence, Negated
y y y y y y y y y y y
[unknown] Attribute Presence, Non-HTML Attribute y y y n y y y y y y y
[attr="value"]

<tag attr="value">should match</tag>
Attribute Value Is Correct Value
y y y n y y y y y y y
:not([attr="value"])

<tag attr="value">should not match</tag>
Attribute Value Is Correct Value, Negated
y y y y y y y y y y y
[attr="incorrect"]

<tag attr="value">should not match</tag>
Attribute Value Is Incorrect Value
y y y y y y y y y y y
:not([attr="incorrect"])

<tag attr="value">should match</tag>
Attribute Value Is Incorrect Value, Negated
n y y n n y y y y y n
[attr=""]

<tag></tag>
Attribute Value Of Empty String Does Not Match Missing Attributes
n y y y y y y y y y y
[attr=" value with spaces "]

<tag attr=" values with spaces "></tag>
Attribute Value With Spaces Is Matchable
y n y n y y y y y y y
<style>[class="\5test"] { properties }</style>

<span class="5test"></span>
Attribute Value, Class With Hex-Escaped Number As First Character
y y y y y y y y y y y
<style>[class=".5test"] { properties }</style>

<span class="5test"></span>
Attribute Value, Class With Number As First Character
n n n y n n n n n n n
<style>[class="a.b"] { properties }</style>

<span class="a.b"></span>
Attribute Value, Class With Period In Name
y y y n y y y y y y y
<style>[id="a#b"] { properties }</style>

<span id="a#b"></span>
Attribute Value, ID With Hash In Name
y y y The rule doesn't apply to all expected elements n y y y y y y y
<style>[id="\5test"] { properties }</style>

<span id="5test"></span>
Attribute Value, ID With Hex-Escaped Number As First Character
y y y y y y y y y y y
<style>[id="5test"] { properties }</style>

<span id="5test"></span>
Attribute Value, ID With Number As First Character
The rule applies to the wrong element(s) n The rule applies to the wrong element(s) n The rule applies to the wrong element(s) n y The rule applies to the wrong element(s) n The rule applies to the wrong element(s) n The rule applies to the wrong element(s) n The rule applies to the wrong element(s) n The rule applies to the wrong element(s) n The rule applies to the wrong element(s) n The rule applies to the wrong element(s) n
<style>[id="a#b"] { properties }</style>

<span id="a#b"></span>
Attribute Value, ID With Space In Name
y y y The rule doesn't apply to all expected elements n y y y y y y y
[unknown="value"] Attribute Value, Non-HTML Attribute y y y n y y y y y y y
[className="class"] Attribute Value, className Attribute From Internet Explorer y y y y y y y y y y y
tag[*]

<tag attr="value">should match</tag>
Attribute, Any Attribute
y y y y y y y y y y y
tag:not([*])

<tag attr="value">should match</tag>
Attribute, No Attribute
n n n n n n n n n n n
.actualClass Class Is Correct Value y y y y y y y y y y y
.wrongClass Class Is Incorrect Value y y y y y y y y y y y
<style>.\5test { properties }</style>

<span class="5test"></span>
Class With Hex-Escaped Number As First Character
y y y y y y y y y y y
<style>.5test { properties }</style>

<span class="5test"></span>
Class With Number As First Character
y y y y y y y y y y y
<style>.a.b { properties }</style>

<span class="a.b"></span>
Class With Period In Name
y y y y y y y y y y y
.actualClass1.actualClass2 Class, Chained With Correct Class Names y y y y y y y y y y y
.unusedClass1.actualClass2 Class, Chained With Incorrect Class Name First y y y y y y y y y y y
.actualClass1.unusedClass2 Class, Chained With Incorrect Class Name Last y y y n y y y y y y y
selector,selector Group y y y y y y y y y y y
#id, dummy Group With Dummy And Valid Selectors y y y y y y y y y y y
validselector, invalidselector Group With Invalid Selector Should Be Ignored y y y n y y y y y y y
validselector, invalidselector Group With Missing Selector Should Be Ignored y y y n y y y y y y y
dummy, #id Group With Valid And Dummy Selectors y y y y y y y y y y y
#actualID ID Is Correct Value y y y y y y y y y y y
#wrongID ID Is Incorrect Value y y y y y y y y y y y
<style>#a#b { properties }</style>

<span id="a#b"></span>
ID With Hash In Name
y y y y y y y y y y y
<style>#5test { properties }</style>

<span id="5test"></span>
ID With Number As First Character
The rule applies to the wrong element(s) n y y y y y y y y y y
<style>#\5test { properties }</style>

<span id="5test"></span>
ID With Number As First Character
y y y y y y y y y y y
#id1#id2 ID, Chained y y y y y y y y y y y
span Type y y y y y y y y y y y
SPAN Type, Element Name Uppercased y y y y y y y y y y y
Specificity specificity(.c) > specificity(i i i i i i i i i i i i i) Attributes And Pseudo-Classes Beat Types And Pseudo-Elements y y y y y y y y y y y
specificity(a b) > specificity(a, b) Grouped Selectors Retain Their Own Specificities y y y y y y y y y y y
specificity(#i) = specificity([id=i]) ID attribute has same specificity as ID selector n n n n n n n n n n n
specificity(#i) > specificity(.c.c.c.c.c.c.c.c.c.c.c.c) IDs Beat Other Attributes y y y y y y y y y y y
specificity(inlineStyle) > specificity(stylesheetStyle) In-Document Styles Beat Imported Styles n n n n n n n n n n n
a { rules }
a b { rules that overide the ones above }
Increased By Adding Clauses
y y y n n y y y y y y
a { rules }
a b { rules that overide the ones above }
Increased By Adding Combinators
y y y y y y y y y y y
specificity(inlineStyle) > specificity(stylesheetStyle) Inline Styles Beat Styles From Rules y y y y y y y y y y y
a { rules }
a b { rules that overide the ones above }
Latest Rule Of Equal Specificity Is Chosen
y y y y y y y y y y y
specificity(:not(a b c)) = specificity(a b c) Negation Pseudoclass Is Ignored, But Its Contents Are Considered n n n n n n n n n n n
specificity(*) = 0 Universal Selector has no specificity y y y y y y y y y y y
Style Element <style type="text/css" media="a\ll"> rules </style> All Media Type, Escaped n n y n n y y y y y n
<style type=""> rules </style> Empty Type n y y n n n y y y y y
<style type="&116;ext/css"> rules </style> HTML Entity Within Type y y y y y y y y y y n
other rule(s)
@import 'ignored.css';
Ignores @import If Other Non-Ignored/Non-Import Rules Above It
y y y y y y y y y y y
<style type='text/css' media='all'> rules </style> Media Type 'all' y y y y y y y y y y y
<style type='text/css' media='ALL'> rules </style> Media Type 'all', Uppercased y y y y y y y y y y y
<style type='text/css' media='braille'> rules </style> Media Type 'braille' n n n n n n n n n n n
<style type='text/css' media='BRAILLE'> rules </style> Media Type 'braille', Uppercased n n n n n n n n n n n
<style type='text/css' media='embossed'> rules </style> Media Type 'embossed' n n n n n n n n n n n
<style type='text/css' media='EMBOSSED'> rules </style> Media Type 'embossed', Uppercased n n n n n n n n n n n
<style type='text/css' media='handheld'> rules </style> Media Type 'handheld' n n n n n n n n n n n
<style type='text/css' media='HANDHELD'> rules </style> Media Type 'handheld', Uppercased n n n n n n n n n n n
<style type='text/css' media='print'> rules </style> Media Type 'print' n n n n n n n n n n n
<style type='text/css' media='PRINT'> rules </style> Media Type 'print', Uppercased n n n n n n n n n n n
<style type='text/css' media='projection'> rules </style> Media Type 'projection' n n n n n n n n n n n
<style type='text/css' media='PROJECTION'> rules </style> Media Type 'projection', Uppercased n n n n n n n n n n n
<style type='text/css' media='screen'> rules </style> Media Type 'screen' y y y y y y y y y y y
<style type='text/css' media='SCREEN'> rules </style> Media Type 'screen', Uppercased y y y y y y y y y y y
<style type='text/css' media='speech'> rules </style> Media Type 'speech' n n n n n n n n n n n
<style type='text/css' media='SPEECH'> rules </style> Media Type 'speech', Uppercased n n n n n n n n n n n
<style type='text/css' media='tty'> rules </style> Media Type 'tty' n n n n n n n n n n n
<style type='text/css' media='TTY'> rules </style> Media Type 'tty', Uppercased n n n n n n n n n n n
<style type='text/css' media='tv'> rules </style> Media Type 'tv' n n n n n n n n n n n
<style type='text/css' media='TV'> rules </style> Media Type 'tv', Uppercased n n n n n n n n n n n
<style type="text/css" media="unknown all"> rules </style> Media Type 'unknown all' y y y y y y y y y y y
<style type="text/css" media="unknown, all"> rules </style> Media Type 'unknown, all' y y y y y y y y y y y
<style type="text/css" media="inapplicable&#44;all"> rules </style> Multiple Media Types, HTML Entity Comma Separated y y y y y y y y y y n
<style type="text/css" media="inapplicable%2dall"> rules </style> Multiple Media Types, Hex Comma Separated y y y y y y y y y y y
<style type="text/css" media="not all"> rules </style> Not All y y y y y y y y y y y
<style><!-- styles --></style> SGML comment around stylesheet y y y y y y y y y y y
<style><!----> styles</script> SGML comment before stylesheet y y y n y y y y y y y
<style type="text/css; charset=charset"> rules </style> Type Including Charset n y y n n y n n n n y
<style type="text/css; charset=unknown"> rules </style> Type Including Unknown Charset n y y n n y n n n n y
<style type="application/css"> rules </style> Type application/css n n n n n n n n n n n
<style type="foo"> rules </style> Type foo y y y y y y y y y y y
<style type="text/css"> rules </style> Type text/css y y y y y y y y y y y
<style type="text/css; charset=unknown"> rules </style> Type text/css Including Unknown Charset n y y n n y n n n n y
<style type="text/c&#x7f;ss"> rules </style> Type text/css, Backspace Escaped y y y y y y y y y y y
<style type="text/&#63;ss"> rules </style> Type text/css, Hex Escaped y y y y y y y y y y n
<style type="text/c&#x00;ss"> rules </style> Type text/css, Null Escaped y y y y y y y y y y y
<style type="TEXT/CSS"> rules </style> Type text/css, Uppercased y y y y y y y y y y y
<style type="text/nonsense"> rules </style> Type text/nonsense y y y y y y y y y y y
<style type="text/stylesheet"> rules </style> Type text/stylesheet n n n n n n n n n n n
<style type="text/css" lang="la"> rules </style> lang y y y y y y y y y y y
<style type="text/css" lang="LA"> rules </style> lang, Captialized y y y y y y y y y y y
<style type="text/css" lang="l"> rules </style> lang, Truncated y y y y y y y y y y y
<style type="text/css" lang="L"> rules </style> lang, Truncated And Capitalized y y y y y y y y y y y
<style type="text/css" lang="?"> rules </style> lang, Unknown y y y y y y y y y y y
XML Stylesheets <?xml-stylesheet href="styles.css" ?> (in an application/xml page) Served To application/xml y y y Browser displays error page (XML page cannot be displayed) ? Browser displays error page (XML page cannot be displayed) ? y y y y y y
<?xml-stylesheet href="styles.css" ?> (in an application/xml+xhtml page) Served To application/xml+xhtml n y y Browser offers to download the page instead of loading it ? Browser offers to download the page instead of loading it ? y y y y n y
<?xml-stylesheet href="styles.css" ?> (in a text/html page) Served To text/html y y y y y n y y y y y