Note: This article is about CSS selectors. I also have a post on All CSS2.1 Properties and Values, and Broswer Support (huge file, but worth the download time)
Update 6/30/09: Firefox 3.5 was released today. Like Safari 3.1 and newer (including Safari 4 beta), Opera 9.64 and newer and Google Chrome all support ALL CSS2.1 and CSS3 selectors. Here is a breakdown of all the browsers I’ve tested:
- Green / √ means current support.
- Orange / Δ means that the browsers have some support for the selector.
- Red / Χ means that the browser is non-compliant.
CSS Selectors and Browser Support
See also: CSS Properties & Values
| Browsers | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Pattern | Meaning | IE6 | IE7 | IE8 | FireFox | Safari | Opera | NetSc | CHROME |
| E:active
E:hover E:focus |
Dynamic pseudo-classes
Matches E during certain user actions. |
Δ | Δ | √ | √ | √ | √ | √ | √ |
| Δ | Δ | √ | √ | √ | √ | √ | √ | ||
| Χ | Χ | √ | √ | √ | √ | √ | √ | ||
| E:before
E:after |
Static pseudo-classes See generated content |
Χ | Χ | √ | √ | √ | √ | √ | √ |
| Χ | Χ | √ | √ | √ | √ | √ | √ | ||
| iPhn | Windows XP | Mac OSX | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Selector | Saf 3.2 | Saf 3.0 | goog chrm | FF 3.5 | FF 3.0 | FF 2.0 | FF 1.5 | Op
9.0 |
Saf
3.0 |
IE8 |
IE7 in IE8 |
IE7 | IE6 | Saf 4 beta | Saf 3.2 | Saf 3.1 | Saf 1.3 | Op 9.64 | FF 3 | FF 2 | NS 7.1 |
| * | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
| E | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
| .class | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | Δ | √ | √ | √ | √ | √ | √ | √ | √ |
| #id | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
| E F | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
| E > F | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ | √ | √ | √ | √ | √ | √ | √ | √ |
| E + F | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ | √ | √ | √ | √ | √ | √ | √ | √ |
| E[attr] | √ | √ | √ | √ | √ | √ | √ | √ | √ | Δ | Δ | Δ | Χ | √ | √ | √ | √ | √ | √ | √ | Δ |
| E[attr=val] | √ | Δ | √ | √ | √ | Δ | Δ | Δ | Δ | √ | √ | √ | Χ | √ | √ | √ | Δ | √ | √ | Δ | Δ |
| E[attr~=val] | √ | Δ | √ | √ | √ | Δ | Δ | √ | Δ | √ | Δ | Δ | Χ | √ | √ | √ | Δ | √ | √ | Δ | Δ |
| E[attr|=val] | √ | Δ | √ | √ | √ | Δ | Δ | √ | Δ | √ | Δ | Δ | Χ | √ | √ | √ | Δ | √ | √ | Δ | Δ |
| :first-child | √ | Δ | √ | √ | √ | Δ | Δ | Δ | Δ | √ | Δ | Δ | Χ | √ | √ | √ | Δ | √ | √ | Δ | √ |
| :link | √ | √ | √ | √ | √ | √ | √ | Χ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
| :visited | √ | √ | √ | √ | √ | √ | √ | Χ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
| :lang() | √ | √ | √ | √ | √ | √ | √ | Δ | √ | √ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | √ | √ | √ |
| :before | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ | Χ | Χ | √ | √ | √ | √ | √ | √ | √ | Χ |
| ::before | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ | Χ | Χ | Χ | √ | √ | √ | √ | √ | √ | √ | Χ |
| :after | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ | Χ | Χ | √ | √ | √ | √ | √ | √ | √ | Χ |
| ::after | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ | Χ | Χ | Χ | √ | √ | √ | √ | √ | √ | √ | Χ |
| :first-letter | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ |
| ::first-letter | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ | Χ | Χ | √ | √ | √ | √ | √ | √ | √ | √ | Χ |
| :first-line | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ |
| ::first-line | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ | Χ | Χ | √ | √ | √ | √ | √ | √ | √ | √ | Χ |
| The following selectors are new to CSS3 (above were in previous versions) | |||||||||||||||||||||
| E[attr^=val] | √ | Δ | √ | √ | √ | Δ | Δ | Χ | Δ | √ | Χ | Χ | Χ | √ | √ | √ | Δ | √ | √ | Δ | Δ |
| E[attr$=val] | √ | Δ | √ | √ | √ | Δ | Δ | Χ | Δ | √ | Χ | Χ | Χ | √ | √ | √ | Δ | √ | √ | Δ | Δ |
| E[attr*=val] | √ | Δ | √ | √ | √ | Δ | Δ | √ | Δ | √ | Χ | Χ | Χ | √ | √ | √ | Δ | √ | √ | Δ | Δ |
| E ~ F | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ | √ | √ | √ | Χ | √ | √ | √ | Χ |
| :root | √ | √ | √ | √ | √ | √ | √ | Χ | √ | Χ | Χ | Χ | Χ | √ | √ | √ | √ | √ | √ | √ | √ |
| :last-child | √ | Χ | √ | √ | √ | Δ | Δ | Χ | Χ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | √ | Δ | Δ |
| :only-child | √ | Χ | √ | √ | √ | Δ | Δ | Χ | Χ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | √ | Δ | Χ |
| :nth-child() | √ | Χ | √ | √ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | Χ | Χ | Χ |
| :nth-last-child() | √ | Χ | √ | √ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | Χ | Χ | Χ |
| :first-of-type | √ | Δ | √ | √ | Χ | Χ | Χ | Χ | Δ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | Χ | Χ | Χ |
| :last-of-type | √ | Χ | √ | √ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | Χ | Χ | Χ |
| :only-of-type | √ | Χ | √ | √ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | Χ | Χ | Χ |
| :nth-of-type() | √ | Χ | √ | √ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | Χ | Χ | Χ |
| :nth-last-of-type() | √ | Χ | √ | √ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | Χ | Χ | Χ |
| :empty | √ | Χ | √ | √ | √ | Δ | Δ | Χ | Χ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | √ | Δ | Δ |
| :not() | √ | √ | √ | √ | √ | √ | √ | Χ | √ | Χ | Χ | Χ | Χ | √ | √ | √ | √ | √ | √ | √ | √ |
| :target | √ | √ | √ | √ | √ | √ | √ | Χ | √ | Χ | Χ | Χ | Χ | √ | √ | √ | √ | √ | √ | √ | √ |
| :enabled | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | √ | √ | Χ |
| :disabled | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | √ | √ | Χ |
| :checked | √ | √ | √ | √ | √ | √ | √ | √ | √ | Χ | Χ | Χ | Χ | √ | √ | √ | Χ | √ | √ | √ | √ |
IE8 CSS Selector Support
IE8 Supports the CSS2.1 selectors, including pseudoclasses but not pseudo elements. (See Double Colon Notation). IE8 has support for has support for Accessible Rich Internet Applications (ARIA)
To force IE8 to render your page in IE8 compliance mode, include the following meta tag:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
IE7 within IE8 CSS Selector Support
The CSS selector support of IE7 within IE8 (when IE8 displayes a page in IE7 compatibility mode) is identical to IE7 as a standalone. However, the CSS properties do render differently. I will have to blog about that in a seperate entry when I get around to garnering all the differences.
IE7 within IE8 understands the IE7 star hack. Because the CSS renders differently even though the selector support is the same, it may take a bit before I figure out the best filter.
iPhone
The original version of the iPhone came with a Safari browser that did not support all CSS3 selectors. The currently active version of Safari on the iPhone does support all CSS3 selectors. The grid below has been updated to reflect that. I have kept the old version of the iPhone CSS3 support just in case you want to support "unlocked" version of the iPhone, that do not get updated as often. Personally, I assume all iphones hitting my apps support all CSS3. For more information on iPhones, see iPhone CSS Support
Safari 4 Beta CSS Selector Support
Safari 4.0 Beta was released Feb. 24, 2008. Since Safari 3.2 supported all CSS selectors, this Safari 4 part of the post may be a bit mute. Safari 4 beta also supports ARIA and for CSS effects, animation and canvas. It also seems to have many more native debugging tools native to the application (or maybe what I see is a carry over from the tools I installed in my previous version of Safari). Safari 4 is Acid 3 compliant!
IE8 Notes:
- E[attr]Does not match the attribute when the attribute value is empty or not written correctly.
IE7 within IE8 Notes:
- E[attr] Same as IE8, does not match the attribute when the attribute value is empty or not written correctly.
- E[attr~=val]Only issue is that for this selector to work, the value of the attribute is case sensitive
- E[attr|=val]IE7 has some case sensitivity issues, but generally works.
- :first-child IE7 considers a comment or a text node as a first-child, when it shouldn’t: only elements should be considered children. So, IE7 matches the first comment instead of the first child. If it sees text or a comment as the first child, it will not consider the first element as the first child.
Pingback: mixed's me2DAY
Pingback: コトãƒãƒŽã‚ªãƒˆ
E+F does not work in IE7 nor IE8
Try
<style type="text/css">
ul {list-style: none;}
li {background: orange; margin: 10px;}
input[type=checkbox] + label {color: #FABADA; }
input[type=checkbox]:focus + label {color: #0FFFFF; }
input[type=checkbox]:checked + label {color: #FF0FFF; }
input[type=checkbox]:checked:focus + label {color: #FFFF0F; }
</style>
<ul>
<li><input type="checkbox" id="cb1" /><label for="cb1">Opción 1</label></li>
<li><input type="checkbox" id="cb2" /><label for="cb2">Opción 2</label></li>
<li><input type="checkbox" id="cb3" /><label for="cb3">Opción 3</label></li>
<li><input type="checkbox" id="cb4" /><label for="cb4">Opción 4</label></li>
<li><input type="checkbox" id="cb5" /><label for="cb5">Opción 5</label></li>
</ul>
To make IE6 and IE7 accept CSS3 selectors, Chris Patterson wrote a very cool extension for jQuery called SuperSelectors: “It goes through your site’s stylesheets, dynamically adding classes to elements so that even IE6 can bask in the glow of properly supporting CSS selectors like ul li:first-child li:nth-child(odd) a:hover.” Check out http://skulljackpot.com/2009/04/19/super-css-selector-support-with-jquery/
Rodrigo, it does work. What doesn’t work is pseudoclasses. That’s why your css isn’t working in IE
I like your post but i looking the JavaScript to bootstrap CSS support in IE6.
Thanks for the showing browser supports in css.
Hi Chandan-
I am working on a presentation on using JS to backward enhance IE6 (and all IEs), to enable the IEs to mimick support for CSS3. I hope to present at SXSW in March 2010. Either way, sign up for the RSS feed so you can be alerted when I finally post what i have been working on.
Cheers.