Comparison of layout engines (CSS)
From Wikipedia, the free encyclopedia
Contents |
The following tables compare CSS compatibility and support for a number of layout engines. Please see the individual products' articles for further information. This article is not all-inclusive or necessarily up-to-date. Unless otherwise specified in footnotes, comparisons are based on the stable versions without any add-ons, extensions or external programs.
[edit] Engine Nomenclature
Trident is the layout engine used in Internet Explorer for Windows. Tasman is used in Internet Explorer for Macintosh, Gecko in all Mozilla software, WebCore provides the HTML layout engine for Mac OS X, KHTML for KDE, Presto for Opera and iCab is a browser for the Mac. Prince is an XML + CSS to PDF formatter.
[edit] Meaning of Values
"Yes" indicates that the current version of the browser fully supports this property when valid values are used. "No" Indicates that this property is completely ignored. "Incomplete" indicates that the property is understood, but that not all values are supported. Supported values are implemented correctly. "Buggy" indicates that the property is understood, but that it is not implemented correctly in all cases. "Dangerous" indicates that the property is understood, but that deleterious behaviour results. Version numbers, where known, are provided to indicate when support for this feature was added. If support was added in a publicly available unofficial release (such as a nightly build, or beta), a red background is used. Proprietary properties are not included.
[edit] General overview
Trident | Tasman | Gecko | WebCore | KHTML | Presto | iCab | Prince | |
---|---|---|---|---|---|---|---|---|
CSS1 | 6.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | Yes |
CSS2 (2.0) | Partial | Slight | Partial | Partial | Partial | Partial | Partial | Mostly |
CSS2 (2.1) | Partial | Slight | Mostly | Mostly | Mostly | Mostly | Mostly | Mostly |
CSS3 | No | No | Slight | Slight | Slight | Slight | Slight | Slight |
[edit] Grammar and rules
Trident | Tasman | Gecko | WebCore | KHTML | Presto | iCab | Prince | |||
---|---|---|---|---|---|---|---|---|---|---|
CSS1 | !important | Weight increasing | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | Yes |
/*Comment*/ | Comments | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | Yes | |
@import | Import stylesheet | 4.0 | Yes | 1.0 | Yes | Yes | 7.0 | Yes | Yes | |
CSS2 | @charset | Character set | 5.5 | ? | 1.0 | Yes | No | 7.0 | Yes | ? |
@media | Media-specific rules | 5.5 | 0.9 | 1.0 | Yes | Yes | 7.0 | 3.0 | Yes | |
@page | For paged media | 5.5 | No | No | No | No | 7.0 | No | Yes | |
@font-face | Define font | 5.5 | No | No | No | No | No | No | Yes | |
CSS3 | @namespace | Namespace declaration | No | No | 1.0 | Yes | Yes | 8.0 | No | ? |
[edit] CSS 2.1 notes
- CSS 2.1 draft recommendation proposes removing/deprecating @font-face, but it is also included again in the CSS3 proposed recommendation.
[edit] Trident grammar and rule notes
- @font-face — Only supports Embedded OpenType (.eot) font format, does not understand the format() identifier.
- !important — !important doesn't override rules defined later in the same declaration block.
[edit] Tasman grammar and rule notes
- @font-face — Versions 5.16 and 5.17 will download fonts specified but not use them. 5.23 no longer downloads the font.
[edit] Presto grammar and rule notes
- @import — Whilst Gecko, WebCore and iCab download all media stylesheets immediately, Opera only downloads handheld, print, projection and screen media, as well as speech if "voice" feature is enabled and tv, on tv devices. Text browser emulation mode is only a user stylesheet, so it does not switch to tty media type. This is consistent with older text browsers, which do not respect any CSS.
[edit] Selectors
Trident | Tasman | Gecko | WebCore | KHTML | Presto | iCab | |||
---|---|---|---|---|---|---|---|---|---|
Element selectors | |||||||||
CSS1 | * | Universal | 7.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 |
E | Element | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
E.class | Class | 7.0 | Buggy | 1.0 | 85 | Yes | 7.0 | Yes | |
E#id | ID | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
CSS3 | ns|E | Namespaced | No | No | 1.0 | No | Yes | 8.0 | No |
Relationship selectors | |||||||||
CSS1 | E F | Descendant | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes |
CSS2 | E > F | Child | 7.0 | Yes | 1.0 | Yes | Yes | 7.0 | 3.0 |
E + F | Direct adjacent | 7.0 | Yes | 1.0 | Yes | Yes | 7.0 | 3.0 | |
CSS3 | E ~ F | Indirect adjacent | 7.0 | No | 1.7 | 420+ | 3.3.2 | 9.0 | 3.0 |
Attribute selectors | |||||||||
CSS2 | E[attr] | Has | 7.0 | 0.9 | 1.0 | 85 | Yes | 7.0 | 3.0 |
E[attr="value"] | Equals | 7.0 | 0.9 | 1.0 | Yes | Yes | 7.0 | 3.0 | |
E[attr~="value"] | Contains (space-separated) | 7.0 | 0.9 | 1.0 | Yes | Yes | 7.0 | 3.0 | |
E[attr|="value"] | Contains (hyphen-separated) | 7.0 | 0.9 | 1.0 | Yes | Yes | 7.0 | 3.0 | |
CSS3 | E[attr^="value"] | Begins with | 7.0 | No | 1.0 | Yes | 3.4 | 8.02 | 3.0 |
E[attr$="value"] | Ends with | 7.0 | No | 1.0 | Yes | 3.4 | 9.0 | 3.0 | |
E[attr*="value"] | Contains substring | 7.0 | No | 1.0 | Yes | 3.4 | 9.0 | 3.0 | |
E[ns|attr] | Namespaced | No | No | 1.0 | No | 3.4 | 9.0 | No | |
Pseudo-classes | |||||||||
CSS1 | E:link | Unvisited hyperlink | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes |
E:visited | Visited hyperlink | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
E:active | Active | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
CSS2 | E:hover | Mouseover | 7.0 | Partial | 1.0 | 419.3 | Yes | 7.0 | 3.0 |
E:focus | Focused | No | Yes | 1.0 | Yes | Yes | 7.0 | Yes | |
E:first-child | First child | 7.0 | Yes | 1.0 | Yes | Yes | 7.0 | 3.0 | |
E:lang() | Language | No | Yes | 1.2 | 420+ | 3.4 | 7.5 | 3.0 | |
@page:first | First page | No | No | No | No | No | 7.0 | No | |
@page:left | Left page | No | No | No | No | No | 7.0 | No | |
@page:right | Right page | No | No | No | No | No | 7.0 | No | |
CSS3 | E:root | Root | No | Yes | 1.0 | Yes | 3.4 | No | No |
E:first-of-type | First child of type | No | No | No | 420+ | 3.4 | No | No | |
E:last-child | Last child | No | No | 1.0 | Dangerous | 3.4 | No | No | |
E:last-of-type | Last child of type | No | No | No | Dangerous | 3.4 | No | No | |
E:only-child | Only child | No | No | 1.8 | Dangerous | 3.4 | No | No | |
E:only-of-type | Only child of type | No | No | No | Dangerous | 3.4 | No | No | |
E:nth-child | Nth child | No | No | No | No | 3.4 | No | No | |
E:nth-last-child | Nth last child | No | No | No | No | 3.4 | No | No | |
E:nth-of-type | Nth child of type | No | No | No | No | 3.4 | No | No | |
E:nth-last-of-type | Nth last child of type | No | No | No | No | 3.4 | No | No | |
E:target | Target | No | No | 1.3 | Partial | 3.4 | No | No | |
E:empty | Empty | No | No | 1.8 | Yes | 3.4 | No | No | |
E:contains() | Contains | No | No | No | No | 3.4 | No | No | |
E:not() | Negation | No | No | 1.0 | Yes | 3.4 | No | No | |
E:enabled | Enabled state | No | Yes | 1.8 | No | 3.4 | 9.0 | No | |
E:disabled | Disabled state | No | Yes | 1.8 | No | 3.4 | 9.0 | No | |
E:checked | Checked state | No | No | 1.0 | No | No | 9.0 | No | |
E:indeterminate | Indeterminate state | No | No | No | No | No | No | No | |
E:default | Default | No | No | No | No | No | 9.0 | No | |
E:valid | Valid | No | No | 1.8 | No | No | 9.0 | No | |
E:invalid | Invalid | No | No | 1.8 | No | No | 9.0 | No | |
E:in-range | In range | No | No | 1.8 | No | No | 9.0 | No | |
E:out-of-range | Out of range | No | No | 1.8 | No | No | 9.0 | No | |
E:required | Required | No | No | No | No | No | 9.0 | No | |
E:optional | Optional | No | No | No | No | No | 9.0 | No | |
E:read-only | Read-only | No | No | Experimental | No | No | 9.0 | No | |
E:read-write | Read and write | No | No | Experimental | No | No | 9.0 | No | |
Pseudo-elements | |||||||||
CSS1 | E:first-letter | First letter | 5.5 | Yes | 1.0 | Yes | Yes | 7.0 | 3.0 |
E:first-line | First line | 5.5 | Yes | 1.0 | Yes | Yes | 7.0 | 3.0 | |
CSS2 | E:before | Before | No | No | 1.0 | 85 | Yes | 7.0 | 3.0 |
E:after | After | No | No | 1.0 | 85 | Yes | 7.0 | 3.0 | |
CSS3 | E::pseudo-element | Double colon notation | No | No | 1.5 | Yes | 3.4 | 7.0 | Yes |
E::selection | Selection | No | No | Experimental | Yes | 3.4 | No | No | |
Trident | Tasman | Gecko | WebCore | KHTML | Presto | iCab |
[edit] Trident selector notes
- :hover —
:hover
is applied for all elements only in standards-compliant mode, not quirks mode [1]. Prior to 7.0,:hover
is for anchor element only. - .one.two — only
.two
class selector was taken into consideration before 7.0. - * — Prior to 7.0 this was treated as a single or no element.
[edit] Tasman selector notes
- :hover — For anchor element only.
- .one.two — only
.two
class selector is taken into consideration.
[edit] WebCore selector notes
- :lang() — Only detected when explicitly present on element being tested, attribute not inherited.
- :target — Style doesn't get applied when navigating using back and forward buttons.
- :last-child & :last-of-type — will match all siblings, or all siblings of the same type, respectivly.
- :only-child & :only-of-type — identical behaviour to
:first-child
&:first-of-type
. - ::pseudo-element — Mistakenly also triggers on
::pseudo-class
prior to version 416.0.
[edit] Properties
Trident | Tasman | Gecko | WebCore | KHTML | Presto | iCab | ||
---|---|---|---|---|---|---|---|---|
Box model | ||||||||
CSS1 | border | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 |
border-color | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-style | 7.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-width | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-top | 5.5 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-top-width | 5.5 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-right | 5.5 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-right-width | 5.5 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-bottom | 5.5 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-bottom-width | 5.5 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-left | 5.5 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-left-width | 5.5 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
margin | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
margin-top | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
margin-right | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
margin-bottom | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
margin-left | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
padding | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
padding-top | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
padding-right | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
padding-bottom | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
padding-left | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
CSS2 | border-top-color | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 |
border-top-style | 5.5 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-right-color | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-right-style | 5.5 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-bottom-color | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-bottom-style | 5.5 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-left-color | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
border-left-style | 5.5 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
CSS3 | border-radius | No | No | Experimental | 420+ | No | No | No |
box-sizing | No | No | Experimental | 420+ | 3.3.2 | 7.0 | No | |
Visual formatting model | ||||||||
CSS1 | width | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 |
height | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
float | 5.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
clear | 5.0 | 0.9 | 1.0 | 85 | Yes | 7.0 | Yes | |
line-height | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
vertical-align | 5.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
CSS2 | min-width | 7.0 | 0.9 | 1.0 | 416 | Yes | 7.0 | 3.0 |
max-width | 7.0 | 0.9 | 1.0 | 416 | Yes | 7.0 | 3.0 | |
min-height | 7.0 | 0.9 | 1.7 | 416 | 3.3.2 | 7.0 | 3.0 | |
max-height | 7.0 | 0.9 | 1.7 | 416 | 3.3.2 | 7.0 | 3.0 | |
display | Partial | Partial | Partial | 85 | Yes | 7.0 | Partial | |
position | 7.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
top | Partial | Partial | 1.0 | 85 | Yes | 7.0 | 3.0 | |
right | Partial | Partial | 1.0 | 85 | Yes | 7.0 | 3.0 | |
bottom | Partial | Partial | 1.0 | 85 | Yes | 7.0 | 3.0 | |
left | Partial | Partial | 1.0 | 85 | Yes | 7.0 | 3.0 | |
z-index | Partial | Partial | 1.0 | 85 | Yes | 7.0 | 3.0 | |
direction | 5.0 | Yes | 1.0 | 85 | Yes | 7.2 | No | |
unicode-bidi | 5.0 | Yes | 1.0 | No | Yes | 7.2 | No | |
Generated content, automatic numbering, and lists | ||||||||
CSS1 | list-style | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 |
list-style-image | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
list-style-position | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
list-style-type | 4.0 | Yes | 1.0 | 85 | 3.4 | 8.0 | 3.0 | |
CSS2 | quotes | No | 0.9 | 1.8 | No | 3.4 | 7.0 | 3.0 |
content | No | No | Partial | 85 | Yes | 7.0 | 3.0 | |
counter-increment | No | No | 1.8 | No | 3.4 | 7.0 | 3.0 | |
counter-reset | No | No | 1.8 | No | 3.4 | 7.0 | 3.0 | |
Colors and backgrounds | ||||||||
CSS1 | color | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes |
background | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
background-attachment | 7.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
background-color | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
background-image | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
background-position | Partial | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
background-repeat | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
CSS3 | background (multiple) | No | No | No | Yes | 3.5 | No | No |
background-clip | No | No | Experimental | No | Experimental | No | No | |
background-origin | No | No | Experimental | No | Experimental | No | No | |
Fonts | ||||||||
CSS1 | font | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes |
font-family | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
font-size | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
font-style | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
font-variant | 4.0 | Yes | 1.0 | 125 | Yes | 7.0 | 3.0 | |
font-weight | Buggy | Yes | Partial | Partial | Yes | Buggy | Buggy | |
CSS2 | font-size-adjust | No | No | Partial | No | No | No | No |
font-stretch | No | No | No | No | No | No | Buggy | |
Text | ||||||||
CSS1 | text-align | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Partial |
text-decoration | Partial | Partial | 1.0 | 85 | Yes | 7.0 | 3.0 | |
text-indent | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
text-transform | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
letter-spacing | 4.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | |
word-spacing | Partial | Partial | 1.0 | 85 | Yes | 7.0 | Yes | |
white-space | Partial | Partial | Partial | 85 | Yes | Partial | Yes | |
CSS2 | text-shadow | No | No | No | Partial | 3.4 | No | 3.0.3 |
Visual effects | ||||||||
CSS2 | clip | 5.5 | 0.9 | 1.0 | 85 | Yes | 7.0 | 3.0 |
overflow | 5.5 | Yes | 1.0 | 85 | Partial | 7.0 | 3.0 | |
visibility | 4.0 | 0.9 | 1.8 | Partial | Partial | Partial | Partial | |
CSS3 | overflow-x | 6.0 | No | 1.8 | No | No | No | No |
overflow-y | 6.0 | No | 1.8 | No | No | No | No | |
opacity | nonstandard | No | 1.7 | Yes | No | 9.0 | No | |
Tables | ||||||||
CSS2 | border-collapse | Partial | 0.9 | 1.0 | 125 | Yes | 7.0 | 3.0 |
border-spacing | No | 0.9 | 1.0 | 125 | Yes | 7.0 | 3.0 | |
caption-side | No | 0.9 | 1.4 | 85 | Yes | 7.0 | CSS2.1 | |
empty-cells | Partial | 0.9 | 1.0 | 125 | Yes | 7.0 | Buggy | |
speak-header | No | No | No | No | No | No | No | |
table-layout | 5.0 | Yes | 1.0 | 85 | Yes | 7.0 | 3.0 | |
User interface | ||||||||
CSS2 | cursor | 5.5 | Yes | 1.8 | Yes | Yes | 7.0 | 3.0 |
outline | No | Yes | 1.8 | 125 | Yes | 7.0 | 3.0 | |
outline-color | No | Yes | 1.8 | 125 | Yes | 7.0 | 3.0 | |
outline-style | No | Yes | 1.8 | 125 | Yes | 7.0 | 3.0 | |
outline-width | No | Yes | 1.8 | 125 | Yes | 7.0 | 3.0 | |
CSS3 | outline-offset | No | No | 1.8 | Yes | No | No | No |
outline-radius | No | No | Experimental | No | No | No | No | |
Paged media | ||||||||
CSS2 | marks | No | No | No | No | No | 7.0 | No |
orphans | No | No | No | No | 3.5 | 7.0 | No | |
page | No | No | No | No | No | No | No | |
page-break-after | 4.0 | No | Partial | Partial | 3.5 | 7.0 | No | |
page-break-before | 4.0 | No | Partial | Partial | 3.5 | 7.0 | No | |
page-break-inside | No | No | No | No | 3.5 | 7.0 | No | |
size | No | No | No | No | No | 7.0 | No | |
widows | No | No | No | No | 3.5 | 7.0 | No | |
Aural | ||||||||
CSS2 | azimuth | No | No | No | No | No | No | No |
cue | 7.6 | |||||||
cue-after | 7.6 | |||||||
cue-before | 7.6 | |||||||
elevation | No | |||||||
pause | 7.6 | |||||||
pause-after | 7.6 | |||||||
pause-before | 7.6 | |||||||
pitch | No | |||||||
pitch-range | No | |||||||
play-during | No | |||||||
speak | 7.6 | |||||||
speak-header | No | |||||||
speak-numeral | No | |||||||
speak-punctuation | No | |||||||
speech-rate | No | |||||||
stress | No | |||||||
richness | No | |||||||
voice-family | 7.6 | |||||||
volume | No | |||||||
CSS3 | -xv-phonemes | No | No | No | No | No | 7.6 | No |
-xv-voice-balance | 7.6 | |||||||
-xv-voice-duration | 7.6 | |||||||
-xv-voice-pitch | 7.6 | |||||||
-xv-voice-pitch-range | 7.6 | |||||||
-xv-voice-rate | 7.6 | |||||||
-xv-voice-stress | 7.6 | |||||||
-xv-voice-volume | 7.6 | |||||||
Ruby characters | ||||||||
CSS3 | ruby-position | 5.0 | Yes | No | No | No | No | No |
ruby-align | 5.0 | Yes | ||||||
ruby-overhang | 5.0 | Yes | ||||||
ruby-span | No | No |
[edit] CSS 2.1 notes
- CSS 2.1 draft recommendation proposes removing/deprecating font-stretch, but it is also included again in the CSS3 proposed recommendation.
- CSS 2.1 draft recommendation proposes removing/deprecating font-size-adjust, but it is also included again in the CSS3 proposed recommendation.
- CSS 2.1 draft recommendation proposes removing/deprecating text-shadow, but it is also included again in the CSS3 proposed recommendation.
- CSS 2.1 draft recommendation proposes removing/deprecating size along with other portions of the “Paged Media Module”, but it is also included again in the CSS3 proposed recommendation.
- CSS 2.1 draft recommendation proposes expanding the allowed shorthand values of the background-position property.
[edit] Trident property notes
- border-style —
dotted
is rendered asdashed
prior to IE7. - display — Only
none
,block
,inline
,table-header-group
, andtable-footer-group
are supported prior to 7.0. In 7.0, inline-block is supported on elements that are naturally inline. - position — Prior to IE 7, fixed positioning was not supported.
- background-attachment — Prior to IE 7,
fixed
was allowed on thebody
element only. - background-position — Fixed positioning is not supported.
- font-weight — Incorrect rendering when value is 600 [2].
- text-decoration — Optional property
blink
is not supported. - white-space —
pre-line
andpre-wrap
are not supported.pre
is supported in Microsoft Internet Explorer 6 and later in standards-compliant mode.
[edit] Gecko property notes
- display —
run-in
[3],inline-table
[4], andinline-block
[5] are not supported. - quotes — Does not support nested quotes prior to 1.8 [6].
- content — Only works with
:before
and:after
. Only support image<uri>
.<counter>
does not work prior to 1.8 [7]. - background-position — Gecko versions prior to 1.7 implement the CSS2 syntax, not the proposed CSS2.1 expanded syntax.
- font-size-adjust — Supported in Windows only [8].
- font-weight — Only Regular and Bold weights get used, even if Light or Heavy/Black faces are installed.
- white-space —
pre-line
is not supported.pre-wrap
is only supported experimentally as-moz-pre-wrap
;. - visibility —
collapse
is not supported prior to 1.8. - border-radius — border curves are circular, but the W3C specs [9] define them as elliptical. Dashed curves are not available. Short-cut definitions for
border-radius
read "tl tr br bl" instead of the W3C's "tr br bl tl". Interesting bugs: [10] [11] [12] - page-break-before; page-break-after — Only the
always
andauto
values are supported.
[edit] WebCore property notes
- font — The system font keywords are not supported that allow designers to tailor presentation to the user’s operating system environment.
- font-weight — Only Regular and Bold weights get used, even if Light or Heavy/Black faces are installed.
- page-break-before; page-break-after — Only the
always
andauto
values are supported. - text-decoration — Optional property
blink
is not supported. - white-space —
pre-line
andpre-wrap
from the proposed CSS2.1 draft are not supported. - text-shadow — Multiple shadows are not supported.
- visibility — All supported except for
collapse
.
[edit] KHTML property notes
- overflow — Values
scroll
andauto
are unsupported. - page-break-before; page-break-after — Before 3.5 only the
always
andauto
values were supported. - text-decoration — Optional property
blink
is not supported. - visibility — All supported except for
collapse
.
[edit] Presto property notes
- list-style-type — The CSS2 values are not supported prior to 8.0.
- counter-increment, counter-reset — Implemented the algorithm in REC CSS2.
- background-position — Presto versions prior to 8.0 implement the CSS2 syntax, not the proposed CSS2.1 expanded syntax.
- font-weight — Incorrect rendering when value is 600 [13].
- white-space —
pre-line
is not supported. - visibility — All supported except for
collapse
.
[edit] iCab property notes
- display —
run-in
is not supported. - text-align —
justify
is not supported. - font-stretch — Simulated using letter-spacing property.
- font-weight — Incorrect (bold) rendering when value is 500.
- visibility —
collapse
only partial. - caption-side —
top
andbottom
only which would comply with the proposed CSS2.1 elimination of the values:left
andright
. - empty-cells — Compresses hidden rows but does not hide them completely.
[edit] CSS2 aural style sheets notes
CSS2.1 proposes to make the aural module properties introduced in CSS2 optional. The only know software that supports CSS2 Aural is EMACSpeak [14], an emacs-based speech browser and Opera which has limited support. Popular screen-readers such as JAWS and Apple’s VoiceOver do not yet support Aural or Speech CSS properties. Looking toward the future, the proposed CSS3 Speech module reworks the CSS2 speech properties. It reuses some, but not all, of the properties and introduces some others. CSS3 also proposes an Aural module that may incorporate the other CSS2 non-speech aural properties, though a public draft is not yet available. In particular, the speech properties that are in the current CSS2 recommendation, but not in the proposed CSS3 speech module are:
- richness
- play-during
CSS2.1 also deprecates fhe speak-header property from the CSS2 Tables Module. The CSS3 Tables Module draft has not yet seen a public draft, however, early indiations suggest that speak-header should also continue in CSS3. The remarks about this draft say: “The model in CSS3 will be the same as in CSS2, but described in more detail.”
Aural non-speech properties from the current CSS2 module are:
- azimuth
- elevation
- volume
These may or may not be included in the nonpublic working draft of the CSS3 aural module. However, these are fairly fundamental aural properties.
[edit] Values and units
Trident | Tasman | Gecko | WebCore | KHTML | Presto | iCab | ||||
---|---|---|---|---|---|---|---|---|---|---|
Numbers | CSS1 | <number> | A floating-point number | 3.0 | 0 | 1.0 | 85 | Yes | Buggy | Yes |
<length> | <number> followed by units | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | ||
<percentage> | <number> followed by % | 3.0 | Yes | 1.0 | Imprecise | Yes | 7.0 | Yes | ||
CSS2 | <integer> | An integer | 3.0 | 0 | 1.0 | 85 | Yes | 7.0 | Yes | |
CSS3 | <angle> | <number> angle-unit | No | No | No | Yes | Yes | No | No | |
<time> | <number> time-unit | Yes | Yes | |||||||
<frequency> | <number> frequency-unit | Yes | Yes | |||||||
Strings | CSS1 | <string> | String | 3.0 | 0 | 1.0 | 85 | Yes | 7.0 | Yes |
\code | Unicode escapes | 6.0 | ? | 1.0 | 85 | Yes | 7.0 | Yes | ||
Shapes | CSS2 | rect() | A rectangle | 5.5 | 0 | 1.0 | 85 | Yes | ? | Yes |
Functions | CSS1 | url() | Uniform Resource Identifier | 3.0 | ? | 1.0 | 85 | Yes | 7.0 | Yes |
CSS3 | attr() | Attribute identifier | No | No | 1.0 | Yes | Yes | 7.0 | Yes | |
Colors | CSS1 | color names | 16 predefined web colors | 3.0 | 0 | 1.0 | 85 | Yes | 7.0 | Yes |
#rrggbb or #rgb | Hexadecimal notation | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | ||
rgb(r,g,b) | RGB notation | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | ||
CSS2 | system colors | 28 predefined system colors [15] | 3.0 | 0 | 1.0 | 85 | Yes | 7.0 | Yes | |
transparent | Full transparency | No | ? | 1.0 | 85 | Yes | 7.0 | Yes | ||
CSS3 | rgba(r,g,b,a) | RGBA notation | No | No | No | Yes | Buggy | No | No | |
Keywords | CSS1 | auto | Automatically calculated | Partial | ? | 1.0 | 85 | Yes | 7.0 | Yes |
CSS2 | inherit | Inherited from the parents | No | ? | 1.0 | 85 | Yes | 7.0 | Yes | |
Units | CSS1 | px | Pixel | 3.0 | 0 | 1.0 | 85 | Yes | 7.0 | Yes |
pt | Point | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | ||
pc | Pica | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | ||
cm | Centimetre | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | ||
mm | Millimetre | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | ||
in | inch | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | ||
em | em | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | ||
ex | ex | 3.0 | 7.0 | Yes | 1.0 | 85 | 7.0 | Yes | ||
% | Percentage | 3.0 | Yes | 1.0 | 85 | Yes | 7.0 | Yes | ||
CSS3 | deg | Degree | No | No | No | Yes | Yes | No | No | |
grad | Grad | Yes | Yes | |||||||
rad | Radian | Yes | Yes | |||||||
ms | Millisecond | Yes | Yes | |||||||
s | Second | Yes | Yes | |||||||
Hz | Hertz | Yes | Yes | |||||||
kHz | Kilohertz | Yes | Yes |
[edit] Trident value and unit notes
- auto — Does not work for
margin
s, except table elements.
[edit] WebCore value and unit notes
- <percentage> — Only uses the integer component of <number>.
[edit] Presto value and unit notes
- attr() — As all URI attribute values are resolved to full URI, the value could be wrong if
attr()
is used on an attribute that contains relative URI. - <number> — Quantization error for values greater than 20.47 [16] (not limited to em, try any non pixel units).
[edit] KHTML value and unit notes
- rgba() — Because
opacity
is not supported, the opacity value ofrgba()
is ignored.
[edit] General notes
[edit] Gecko general notes
- -moz- — All experimental (and proprietary) selectors, properties and values are prefixed with "-moz-", e.g.
::-moz-selection
instead of::selection
[17].
[edit] WebCore general notes
- -webkit- — All proprietary selectors, properties and values are prefixed with "-webkit-", e.g.
-webkit-focus-ring-color
.
[edit] KHTML general notes
- -khtml- — All experimental (and proprietary) selectors, properties and values are prefixed with "-khtml-", e.g.
-khtml-arabic-indic
.
[edit] Presto general notes
- -o- — All proprietary selectors, properties and values are prefixed with "-o-", e.g.
-o-replace
. - -wap- — All proprietary selectors, properties and values for Wireless CSS are prefixed with "-wap-", e.g.
-wap-accesskey
. - -xv- — All new selectors, properties and values introduced by CSS3 Speech Module are prefixed with "-xv-" (but not found in CSS2 aural style sheets), e.g.
-xv-interpret-as
instead ofinterpret-as
.
[edit] References
- W3C. CSS 1 test suite. Retrieved on May 1, 2005.
- W3C. CSS 2.1 test suite. Retrieved on May 1, 2005.
- mozilla.org Bugzilla. Bug 281960 - [devmo] Mozilla CSS support chart. Retrieved on July 13, 2005.
- Mozilla Developer Center. Mozilla CSS support chart. Retrieved on May 21, 2006.
- Opera Documentation. Web Specifications Supported in Opera - CSS. Retrieved on May 1, 2005.
- Internet & Web - Safari. CSS Support in Safari. Retrieved on July 13, 2005.
- Konqueror Homepage. CSS 2.1 & 3 Support in KHTML 3.4. Retrieved on July 13, 2005.
- Apple Developer Connection. Safari CSS Reference. Retrieved on July 14, 2005.
[edit] See also
- Comparison of layout engines
- Comparison of layout engines (HTML)
- Comparison of layout engines (XML)
- Comparison of layout engines (XHTML)
- Comparison of layout engines (graphics)
- Comparison of layout engines (DOM)
- Comparison of layout engines (WHATWG)
[edit] External links
[edit] CSS Compatibility Tables
- WebDevout — mostly covers Windows browsers. Extensive bug testing.
- QuirksMode — comprehensive but lacks latest versions.
- Westciv — abridged form of their retail guide.
- MacEdition — covers many Mac browsers, including rare and discontinued ones.
- Jesset — simple table without bug details, includes WebTV.
- Motohiko — covers Firefox only. [Japanese]
[edit] Other links
- CSS Filters — a fairly complete table of browser-specific hacks
- CSS specification/browser support page: General Syntax
- Assigning external CSS