See the CSS Selector Test for tests of and information about CSS3 selectors.
An earlier version of this page has been translated into Brazilian Portuguese.
The contents of my CSS pages and browser compatibility.
| Quirks and Strict mode | How to trigger them, what the differences are. Contains compatibility table. |
| CSS Hacks | Be very, very careful. |
| Conditional comments | A generally reliable method for separating IE from all other browsers. |
CSS 2 selectors |
||||||||||||||
| Selector | IE 5.5 | IE 6 | IE 7 | IE8b2 | FF 2 | FF 3 | Saf 3.0 Win | Saf 3.1 Win | iPhone 3G | Opera 9.51 | Konqueror 3.5.7 | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Selects all elements | Yes | Yes | Yes | Yes | Yes | |||||||||
| Selects an element that is a child of another element | No | Yes | Yes | Yes | Yes | Yes | ||||||||
| Selects an element that is a next sibling of another element | No | Static | Almost | Static | Yes | Static | Yes | Yes | ||||||
|
IE 7, Firefox 2 and Safari don’t correctly update styles after elements have been added dynamically. IE8b2 does, but only after you remove the focus from the test link. |
||||||||||||||
| Selects an element with a certain attribute | No | Yes | Yes | Yes | Yes | Yes | ||||||||
| Whether an element can support two or more class names | Buggy | Yes | Yes | Yes | Yes | Yes | ||||||||
| Selector | IE 5.5 | IE 6 | IE 7 | IE8b2 | FF 2 | FF 3 | Saf 3.0 Win | Saf 3.1 Win | iPhone 3G | Opera 9.51 | Konqueror 3.5.7 | |||
| To generate content before and after an element | No | Yes | Yes | Yes | Yes | Yes | ||||||||
| An element in a hovered (mouseover) or active (mousedown) state. | Minimal | Incom |
Yes | Yes | Incom |
Yes | Almost | |||||||
|
||||||||||||||
| An element that is the first child of its parent | No | Static | Almost | Static | Yes | Static | Yes | Static | Yes | Yes | ||||
|
IE7, Firefox 2 and Safari don’t update the styles when elements are added dynamically. IE8b1 does, but only after you remove the focus from the test link. |
||||||||||||||
| Form fields that receive user focus | No | Yes | Yes | Yes | Buggy | Yes | Yes | |||||||
|
||||||||||||||
CSS 2 declarations |
||||||||||||||
| Selector | IE 5.5 | IE 6 | IE 7 | IE8b2 | FF 2 | FF 3 | Saf 3.0 Win | Saf 3.1 Win | iPhone 3G | Opera 9.51 | Konqueror 3.5.7 | |||
for :before/:after
|
No | Almost | Incom |
Almost | Incom |
Almost | Almost | |||||||
| No | Yes | Yes | Yes | Yes | Yes | |||||||||
To assign counters to headings or other elements. |
||||||||||||||
| Change cursor style | Yes | Yes | Yes | Untest |
Yes | Yes | ||||||||
Microsoft values don’t count for overall browser compatibility.
|
||||||||||||||
| Incom |
Almost | Yes | Incom |
Yes | Yes | Yes | Yes | |||||||
Compatibility depends only on the values block, inline, none, inline-block, and list-item. |
||||||||||||||
| Types, image, position | Incom |
Yes | Yes | Yes | Yes | Yes | ||||||||
IE7- doesn’t support a few types. The test page also contains CSS 3 values. |
||||||||||||||
| No | Minimal | Yes | Yes | Yes | Yes | Yes | ||||||||
IE 6 supports |
||||||||||||||
| Selector | IE 5.5 | IE 6 | IE 7 | IE8b2 | FF 2 | FF 3 | Saf 3.0 Win | Saf 3.1 Win | iPhone 3G | Opera 9.51 | Konqueror 3.5.7 | |||
| A sort of border, but different | No | Yes | Yes | Yes | Yes | Yes | ||||||||
| Incor |
Yes | Yes | Yes | Yes | Yes | |||||||||
|
||||||||||||||
| Incom |
Yes | Buggy | Yes | Yes | Incom |
Yes | Yes | |||||||
IE 5/6 and Safari iPhone don’t support position: fixed
|
||||||||||||||
| Incom |
Yes | Yes | Incom |
Incom |
Incom |
|||||||||
| See page for detailed compatibility. | ||||||||||||||
empty-cells,
border-collapse,
border-spacing,
table-layout,
caption-side
|
Incom |
Yes | Yes | Yes | Yes | Yes | ||||||||
See page for detailed compatibility. |
||||||||||||||
| To remove text wrapping or to make an element behave like a pre | No | Incom |
Yes | Incom |
Almost | Yes | Yes | Yes | ||||||
| Selector | IE 5.5 | IE 6 | IE 7 | IE8b2 | FF 2 | FF 3 | Saf 3.0 Win | Saf 3.1 Win | iPhone 3G | Opera 9.51 | Konqueror 3.5.7 | |||
| Value | IE 5.5 | IE 6 | IE 7 | IE8b2 | FF 2 | FF 3b4 | Saf 3.0 Win | Saf 3.1 Win | iPhone 3G | Opera 9.5b | Konqueror 3.5.7 | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Selects an element that is a general next sibling of another element | No | Yes | Yes | Yes | Yes | Yes | ||||||||
| Selects an element with an attribute whose value starts with, ends with, or contains a certain string. | No | Yes | Yes | Yes | Yes | Yes | ||||||||
| The first line or first letter of an element | Yes | Yes | Almost | Yes | Almost | |||||||||
|
Safari and Konqueror have slight problems with the dynamic test. |
||||||||||||||
| Value | IE 5.5 | IE 6 | IE 7 | IE8b2 | FF 2 | FF 3b4 | Saf 3.0 Win | Saf 3.1 Win | iPhone 3G | Opera 9.5b | Konqueror 3.5.7 | |||
| Negation of a selector | No | Yes | Yes | Yes | Yes | |||||||||
| The root element, or initial containing block. | No | Yes | Yes | Yes | Yes | |||||||||
Element that is a target of a hash (page.html#testHash)
|
No | Yes | Yes | Incom |
Yes | |||||||||
|
||||||||||||||
| For enabled, disabled, or checked form fields. | No | Yes | Yes | Yes | Yes | |||||||||
| Value | IE 5.5 | IE 6 | IE 7 | IE8b2 | FF 2 | FF 3b4 | Saf 3.0 Win | Saf 3.1 Win | iPhone 3G | Opera 9.5b | Konqueror 3.5.7 | |||
| Empty elements | No | Static | Yes | Static | Yes | Incom |
Yes | Static | ||||||
|
Static: The browser does not update the styles when content
is added to an initially empty
|
||||||||||||||
| An element that is the last child of its parent | No | Static | Yes | No | Yes | Static | Yes | Yes | ||||||
|
Firefox 2 doesn’t update the styles when elements are added dynamically. |
||||||||||||||
| An element that is the only child of its parent | No | Static | Yes | No | Yes | Yes | Yes | |||||||
|
Firefox 2 doesn’t update the styles when elements are added dynamically. |
||||||||||||||
| Select elements according to a formula | No | No | No | Yes | Static | Yes | ||||||||
|
Opera doesn’t update the styles correctly when elements are added dynamically. |
||||||||||||||
| Text selected by the user. | No | -moz- | Yes | Untest |
Yes | Yes | ||||||||
| Special Mozilla syntax. | ||||||||||||||
| Allows you to define blocks of styles that only take effect on certain monitor sizes. | No | No | Static | Yes | No | |||||||||
|
Safari assigns the styles statically on page-load and doesn’t update them. |
||||||||||||||
CSS 3 declarations |
||||||||||||||
| Value | IE 5.5 | IE 6 | IE 7 | IE8b2 | FF 2 | FF 3b4 | Saf 3.0 Win | Saf 3.1 Win | iPhone 3G | Opera 9.5b | Konqueror 3.5.7 | |||
| on elements other than body | Incor |
Incom |
Incom |
Incom |
No | Incom |
Incor |
|||||||
|
||||||||||||||
| How to define more than one background image on an element | No | No | Yes | No | Yes | |||||||||
| No | Yes | -moz- | Yes | -webkit- | Yes | Yes | ||||||||
Mozilla requires No browser supports
|
||||||||||||||
| Divide a box into several columns. | No | -moz- | -webkit- | No | No | |||||||||
| Value | IE 5.5 | IE 6 | IE 7 | IE8b2 | FF 2 | FF 3b4 | Saf 3.0 Win | Saf 3.1 Win | iPhone 3G | Opera 9.5b | Konqueror 3.5.7 | |||
on any element, without reference to the :before/:after
pseudo-elements.
|
No | No | Incom |
Yes | Yes | |||||||||
| filter | No | Yes | Yes | Yes | No | |||||||||
Standard syntax and Microsoft syntax. |
||||||||||||||
| Allow the user to resize an element. | No | No | Yes | Incom |
No | No | No | |||||||
Safari 3.1 doesn’t allow you to resize the element to less than its original width, something that Safari 3.0 does allow. |
||||||||||||||
| Breaks off text when it goes outside the box. | No | Yes | No | No | Yes | No | Buggy | |||||||
This property only makes sense when a box has Konqueror doesn’t show the ellipsis characters. |
||||||||||||||
| Create a text-shadow. | No | No | Yes | Yes | Yes | |||||||||
| Value | IE 5.5 | IE 6 | IE 7 | IE8b2 | FF 2 | FF 3b4 | Saf 3.0 Win | Saf 3.1 Win | iPhone 3G | Opera 9.5b | Konqueror 3.5.7 | |||
These test pages don’t quite fit in the table above, or their browser compatibility is too slight:
clear: both.background-size with -webkit- and -o-).