This document will summarize the level of support for web standards and maturing technologies in popular web browsers. It covers the Internet Explorer, Firefox, and Opera web browsers, with focus on the HTML, CSS, DOM, and ECMAScript technologies.
Visitors with visual impairments may take advantage of a magnified version or a monochrome version of these documents. In most web browsers, you can select your preferred view by going to the View menu and then Page Style or Style. This mechanism is not supported by Internet Explorer or Safari.
Each row corresponds to a feature of the particular web standard or maturing specification. In the full tables, the browser support for that feature is usually indicated by a single letter: Y (yes), N (no), or I (incomplete support). A question mark (?) means that the support for that feature is currently unknown. The values have been colored for readability. Most feature names in the full tables are links to the official standards definitions.
Some features are listed as a summary of another group of features on the tables. These summary features often show percentages indicating the mean average support for the features in that group. Incomplete (I) support for a feature is calculated as a 50% support. Features with unknown levels of support are ignored. Features that are irrelevant in the summarized context are also ignored, such as the “inherit” values in the individual components of CSS shorthand properties. If more than 5% of the data in the summarized group is unknown, it simply lists a question mark. If all of the summarized features have all or no support, the summary feature simply lists a Y or N, respectively. If there is only one feature summarized and it has an I rating, the summary feature simply lists an I.
Some summary features summarize a feature breakdown that is not written out on these tables but is obvious in the standard's specification, such as a predefined set of possible values for an attribute in HTML. These summary features assume a value for general support and an additional value for each part of the breakdown in order to arrive at the displayed percentage.
The tables on this page and the summary page are in summarized form. Each row is a summary feature of the corresponding group in the full tables. Feature names are links to the corresponding sections of the full tables.
Some feature ratings have explanations associated with them, particularly for those with an “I” rating. The explanations are stored in the title attribute of the table cell or in a mouseover event for user agents supporting ECMAScript, and can usually be accessed by user agents with mouse support by hovering the mouse cursor over the table cell. These rating symbols are marked with an overline.
There are three families of web browsers shown here by default: IE, Firefox, and Opera. IE values are relevant for Microsoft Internet Explorer for Windows, Maxthon, Netscape in “I Trust This Site” or Internet Explorer mode, Avant Browser, AOL Browser, and other programs that use the Trident layout engine. (It should be noted that Internet Explorer for the Macintosh uses a different layout engine.) Firefox values are relevant for corresponding versions of Mozilla Firefox, the Mozilla Application Suite, Seamonkey, Netscape in “I'm Not Sure” or Netscape mode, Camino, Flock, Galeon, Epiphany, and other programs that use the Gecko layout engine. Opera values are relevant for Opera, Dreamweaver on Mac OS X, Adobe Creative Suite 2, and other programs that use the Presto layout engine. For features that are specific to the interface of the browser rather than simply the layout engine, the named web browser is the browser being tested.
If the browser doesn't recognize a given feature or admits that the feature is not yet implemented, and the browser is supposed to do something with the feature, it receives an automatic N. Features in description languages such as HTML that don't have a clear functional purpose are expected to contain information that is made directly available to the user. If the browser appears to support a given feature completely with no significantly impairing bugs, the feature receives a Y. In other cases, the feature generally receives an I, often with an explanation attached (see above). For consistency reasons, it will receive an I even if the feature never performs a correct task or always returns an incorrect value, as long as the browser shows that it recognizes the feature and attempts to utilize it.
A Y value can only be given if the feature is supported natively or by a plugin distributed as an official optional component of the web browser. If it requires a plugin not officially endorsed and distributed by the creators of the web browser, it can at best receive an I rating. If the feature requires a plugin, but there is no such plugin that is officially promoted by the creators of the browser, it receives an N. This is done because all major browsers have a variety of third party plugins available to extend the browser's standards support, and including them would defeat the purpose of judging the browser itself.
Features are generally tested with webpages using valid HTML or XHTML markup with strict doctypes, doctype URLs, and no XML declaration. Some browsers will purposefully implement some features incorrectly when there are perceived errors on the page, particularly when no doctype is used, or when certain types of doctypes are used. In order to see the following results, make sure that you are using valid markup and a doctype that triggers the closest mode to standards mode in the respective browser. You can check an HTML or XHTML document for validity by using the W3C HTML validator.
World Wide Web Consortium specifications are included in this resource once they have reached the Candidate Recommendation (CR) status for the first time. Some of the technologies detailed here, such as the changes in CSS 2.1 over CSS 2 and the included sections of CSS 3, are still at this stage or have been regressed from CR status. This means that these technologies are not yet technically considered web standards and it is incorrect for these new features to be used on webpages. The CR stage is when web browsers are expected to begin implementing support for the relevant features. After the specification is implemented by a predetermined number of user agents, it moves on to Proposed Recommendation status and eventually becomes a Recommendation. It isn't until a specification reaches this Recommendation stage that it is technically considered a web standard. For more information, see Advancing a Technical Report to Recommendation.
Features that have been marked as deprecated in the relevant specifications are not included in these tables.
HTML is the primary language that makes up a webpage. It puts together all of the text, images, scripts, and other content.
In most web browsers, you can view this page's HTML code by going to the View menu and selecting “Page Source” or “Source”.
This table is in summarized form. View the full tables
Feature | IE 6 | IE 7 | Firefox 1.5 | Opera 8.5 | Opera 9 |
---|---|---|---|---|---|
HTML 4.01 | |||||
a | 72% | 72% | 88% | 83% | 83% |
abbr | 50% | 88% | 97% | 84% | 84% |
acronym | 88% | 88% | 97% | 84% | 84% |
address | 88% | 88% | 97% | 91% | 91% |
area | 88% | 88% | 96% | 93% | 93% |
b | 88% | 88% | 97% | 91% | 91% |
base | 83% | 83% | 83% | 83% | 83% |
bdo | 88% | 88% | 97% | 91% | 91% |
big | 88% | 88% | 97% | 91% | 91% |
blockquote | 80% | 80% | 98% | 83% | 83% |
body | 92% | 92% | 98% | 94% | 94% |
br | 88% | 88% | 94% | 94% | 94% |
button | 82% | 82% | 99% | 93% | 93% |
caption | 88% | 88% | 97% | 91% | 91% |
cite | 88% | 88% | 97% | 91% | 91% |
code | 88% | 88% | 97% | 91% | 91% |
col | 68% | 68% | 75% | 70% | 70% |
colgroup | 68% | 68% | 75% | 70% | 70% |
dd | 88% | 88% | 97% | 91% | 91% |
del | 75% | 75% | 98% | 77% | 77% |
dfn | 88% | 88% | 97% | 91% | 91% |
div | 88% | 88% | 97% | 91% | 91% |
dl | 88% | 88% | 97% | 91% | 91% |
dt | 88% | 88% | 97% | 91% | 91% |
em | 88% | 88% | 97% | 91% | 91% |
fieldset | 88% | 88% | 97% | 91% | 91% |
form | 85% | 85% | 95% | 93% | 93% |
frame | 85% | 85% | 88% | 88% | 88% |
frameset | 96% | 96% | 98% | 92% | 92% |
h1 | 88% | 88% | 97% | 91% | 91% |
h2 | 88% | 88% | 97% | 91% | 91% |
h3 | 88% | 88% | 97% | 91% | 91% |
h4 | 88% | 88% | 97% | 91% | 91% |
h5 | 88% | 88% | 97% | 91% | 91% |
h6 | 88% | 88% | 97% | 91% | 91% |
head | 67% | 67% | 83% | 83% | 83% |
hr | 88% | 88% | 97% | 91% | 91% |
html | 88% | 88% | Y | 88% | 88% |
i | 88% | 88% | 97% | 91% | 91% |
iframe | 89% | 89% | 93% | 93% | 93% |
img | 85% | 85% | 99% | 91% | 91% |
input | 85% | 85% | 89% | 82% | 86% |
ins | 75% | 75% | 98% | 77% | 77% |
kbd | 88% | 88% | 97% | 91% | 91% |
label | 75% | 81% | 86% | 95% | 95% |
legend | 90% | 90% | 98% | 83% | 83% |
li | 88% | 88% | 97% | 91% | 91% |
link | 75% | 75% | 93% | 80% | 80% |
map | 80% | 80% | 98% | 93% | 93% |
meta | 96% | 96% | 96% | 96% | 96% |
noframes | 50% | 50% | 97% | 88% | 88% |
noscript | 63% | 63% | 97% | 75% | 75% |
object | 69% | 70% | 85% | 88% | 88% |
ol | 88% | 88% | 97% | 91% | 91% |
optgroup | 69% | 71% | 93% | 73% | 78% |
option | 70% | 78% | 82% | 74% | 77% |
p | 88% | 88% | 97% | 91% | 91% |
param | 92% | 92% | Y | Y | Y |
pre | 88% | 88% | 97% | 91% | 91% |
q | 70% | 70% | 98% | 83% | 83% |
samp | 88% | 88% | 97% | 91% | 91% |
script | Y | Y | 90% | 80% | 90% |
select | 86% | 88% | 99% | 89% | 89% |
small | 88% | 88% | 97% | 91% | 91% |
span | 88% | 88% | 97% | 91% | 91% |
strong | 88% | 88% | 97% | 91% | 91% |
style | 85% | 85% | 90% | 75% | 85% |
sub | 88% | 88% | 97% | 91% | 91% |
sup | 88% | 88% | 97% | 91% | 91% |
table | 90% | 90% | 94% | 92% | 92% |
tbody | 77% | 77% | 91% | 86% | 86% |
td | 62% | 62% | 78% | 71% | 71% |
textarea | 90% | 90% | 99% | 96% | 97% |
tfoot | 77% | 77% | 91% | 86% | 86% |
th | 62% | 62% | 78% | 71% | 71% |
thead | 77% | 77% | 91% | 86% | 86% |
title | 88% | 88% | 88% | 88% | 88% |
tr | 77% | 77% | 91% | 86% | 86% |
tt | 88% | 88% | 97% | 91% | 91% |
ul | 88% | 88% | 97% | 91% | 91% |
var | 88% | 88% | 97% | 91% | 91% |
Core attributes | 75% | 75% | 88% | 88% | 88% |
Event attributes | Y | Y | Y | Y | Y |
Internationalization (i18n) attributes | 75% | 75% | Y | 75% | 75% |
Cell alignment attributes | 37% | 37% | 68% | 68% | 68% |
SGML inheritance | 17% | 17% | 38% | 33% | 33% |
XHTML 1.0 changes | |||||
HTML in XML | N | N | Y | Y | Y |
Documents must be well-formed | I | I | Y | Y | Y |
Media types | N | N | Y | Y | Y |
DTD changes | I | I | I | I | I |
XHTML 1.1 changes | |||||
rb | N | N | 69% | 63% | 63% |
rbc | N | N | 69% | 63% | 63% |
rp | N | N | 69% | 63% | 63% |
rt | N | N | 46% | 42% | 42% |
rtc | N | N | 69% | 63% | 63% |
ruby | N | N | 69% | 63% | 63% |
CSS is the primary language for adding presentation elements to a webpage. These presentation elements include colors, fonts, backgrounds, and layout.
This table is in summarized form. View the full tables
Feature | IE 6 | IE 7 | Firefox 1.5 | Opera 8.5 | Opera 9 |
---|---|---|---|---|---|
CSS 2.1 Units | |||||
Color | 99% | 99% | Y | 97% | 97% |
Counter | N | N | Y | I | I |
Integer | Y | Y | Y | Y | Y |
Length | Y | Y | Y | Y | Y |
Number | Y | Y | Y | Y | Y |
Percentage | Y | Y | Y | Y | Y |
String | N | N | Y | Y | Y |
URI | Y | Y | Y | Y | Y |
CSS 2.1 Importance | |||||
!important | I | I | Y | Y | Y |
CSS 2.1 At-rules | |||||
@charset | I | I | Y | Y | Y |
@import | I | I | Y | Y | Y |
@media | I | I | Y | I | Y |
@page | N | N | N | Y | Y |
CSS 2.1 Basic selectors | |||||
* | I | I | Y | I | I |
E | I | I | Y | Y | Y |
E F | I | I | Y | Y | Y |
E > F | N | I | Y | Y | Y |
E + F | N | I | Y | I | I |
[attr] | N | I | Y | Y | Y |
[attr="value"] | N | I | I | I | I |
[attr~="value"] | N | I | I | I | I |
[attr|="value"] | N | I | I | I | I |
.class | I | Y | Y | Y | Y |
#id | I | Y | Y | Y | Y |
CSS 2.1 Pseudo-classes | |||||
:active | I | I | Y | I | Y |
:first-child | N | I | I | I | I |
:focus | N | N | Y | Y | Y |
:hover | I | I | Y | I | Y |
:lang(C) | N | N | Y | Y | Y |
:link | I | I | Y | Y | Y |
:visited | I | I | Y | Y | Y |
CSS 2.1 Pseudo-elements | |||||
:after | N | N | I | I | I |
:before | N | N | I | I | I |
:first-letter | I | I | I | I | I |
:first-line | I | I | Y | Y | Y |
CSS 2.1 Basic properties | |||||
background | 56% | 58% | Y | 83% | 83% |
background-attachment | 38% | 50% | Y | 88% | 88% |
background-color | 62% | 62% | Y | 87% | 87% |
background-image | 63% | 63% | Y | 88% | 88% |
background-position | 45% | 45% | Y | 95% | 95% |
background-repeat | 75% | 75% | Y | 92% | 92% |
border | 58% | 61% | Y | ≈100% | ≈100% |
border-bottom | 58% | 61% | Y | ≈100% | ≈100% |
border-bottom-color | 50% | 62% | Y | 99% | 99% |
border-bottom-style | 75% | 75% | Y | Y | Y |
border-bottom-width | 75% | 75% | Y | Y | Y |
border-collapse | 50% | 50% | Y | Y | Y |
border-color | 50% | 62% | Y | 99% | 99% |
border-left | 58% | 61% | Y | ≈100% | ≈100% |
border-left-color | 50% | 62% | Y | 99% | 99% |
border-left-style | 75% | 75% | Y | Y | Y |
border-left-width | 75% | 75% | Y | Y | Y |
border-right | 58% | 61% | Y | ≈100% | ≈100% |
border-right-color | 50% | 62% | Y | 99% | 99% |
border-right-style | 75% | 75% | Y | Y | Y |
border-right-width | 75% | 75% | Y | Y | Y |
border-spacing | N | N | Y | Y | Y |
border-style | 75% | 75% | Y | Y | Y |
border-top | 58% | 61% | Y | ≈100% | ≈100% |
border-top-color | 50% | 62% | Y | 99% | 99% |
border-top-style | 75% | 75% | Y | Y | Y |
border-top-width | 75% | 75% | Y | Y | Y |
border-width | 75% | 75% | Y | Y | Y |
bottom | 70% | 70% | Y | Y | Y |
caption-side | N | N | Y | 88% | Y |
clear | 75% | 50% | Y | Y | Y |
clip | N | N | Y | Y | Y |
color | 50% | 50% | Y | 99% | 99% |
content | N | N | 93% | 80% | 80% |
counter-increment | N | N | Y | 90% | 90% |
counter-reset | N | N | Y | Y | Y |
cursor | 93% | 90% | Y | 93% | 93% |
direction | 88% | 88% | Y | Y | Y |
display | 31% | 31% | 81% | 94% | 94% |
empty-cells | N | N | 88% | 88% | 88% |
float | 50% | 50% | 80% | Y | 80% |
font | 89% | 89% | Y | Y | Y |
font-family | 81% | 81% | Y | Y | Y |
font-size | 88% | 88% | Y | Y | Y |
font-style | 70% | 70% | Y | Y | Y |
font-variant | 50% | 50% | Y | Y | Y |
font-weight | 90% | 90% | Y | Y | Y |
height | 50% | 50% | Y | 90% | 90% |
left | 60% | 60% | Y | Y | Y |
letter-spacing | 63% | 63% | Y | Y | Y |
line-height | 75% | 75% | Y | Y | Y |
list-style | 67% | 67% | Y | Y | Y |
list-style-image | 63% | 63% | Y | Y | Y |
list-style-position | 63% | 63% | Y | Y | Y |
list-style-type | 56% | 56% | Y | Y | Y |
margin | 50% | 60% | Y | 90% | Y |
margin-bottom | 50% | 60% | Y | 90% | Y |
margin-left | 50% | 60% | Y | Y | Y |
margin-right | 50% | 60% | Y | Y | Y |
margin-top | 50% | 60% | Y | Y | Y |
max-height | N | 50% | Y | Y | Y |
max-width | N | 50% | Y | Y | Y |
min-height | N | 38% | Y | 75% | 75% |
min-width | N | 38% | Y | 88% | 88% |
outline | N | N | Y | ≈100% | ≈100% |
outline-color | N | N | Y | 99% | 99% |
outline-style | N | N | Y | Y | Y |
outline-width | N | N | Y | Y | Y |
overflow | 42% | 50% | 92% | Y | Y |
padding | 50% | 63% | Y | Y | Y |
padding-bottom | 50% | 63% | Y | Y | Y |
padding-left | 50% | 63% | Y | Y | Y |
padding-right | 50% | 63% | Y | Y | Y |
padding-top | 50% | 63% | Y | Y | Y |
position | 42% | 50% | Y | Y | Y |
quotes | N | N | Y | 63% | 88% |
right | 70% | 70% | Y | Y | Y |
table-layout | 63% | 63% | Y | Y | Y |
text-align | 75% | 75% | Y | Y | Y |
text-decoration | 64% | 64% | 93% | 93% | Y |
text-indent | 63% | 63% | Y | Y | Y |
text-transform | 58% | 58% | Y | Y | Y |
top | 70% | 70% | Y | Y | Y |
unicode-bidi | 70% | 70% | Y | Y | Y |
vertical-align | 54% | 54% | Y | Y | Y |
visibility | 70% | 70% | Y | 90% | 90% |
white-space | 29% | 29% | 50% | 86% | 64% |
width | 40% | 50% | Y | 80% | 90% |
word-spacing | 63% | 63% | Y | Y | Y |
z-index | 63% | 63% | 88% | 88% | Y |
CSS 2.1 Print properties | |||||
orphans | N | N | N | 83% | Y |
page-break-after | 79% | 79% | 71% | Y | Y |
page-break-before | 79% | 79% | 71% | Y | Y |
page-break-inside | N | N | N | Y | Y |
widows | N | N | N | 83% | Y |
CSS 2.1 Conformance | |||||
Conformance | 43% | 43% | Y | 86% | 86% |
Feature | IE 6 | IE 7 | Firefox 1.5 | Opera 8.5 | Opera 9 |
---|---|---|---|---|---|
CSS 3 Units | |||||
Appearance | 5% | 5% | 5% | 5% | 5% |
Color | 91% | 91% | 97% | 96% | 96% |
Counter | N | N | N | N | N |
ID | N | N | N | N | N |
Target name | N | N | N | N | N |
CSS 3 At-rules | |||||
@color-profile | N | N | N | N | N |
@media | N | N | N | 31% | 48% |
@page | N | N | N | N | N |
CSS 3 Basic selectors | |||||
E ~ F | N | I | Y | N | Y |
[attr^="value"] | N | I | I | N | I |
[attr$="value"] | N | I | I | N | I |
[attr*="value"] | N | I | I | N | I |
CSS 3 Pseudo-classes | |||||
:root | N | N | Y | N | N |
:nth-child(N) | N | N | N | N | N |
:nth-last-child(N) | N | N | N | N | N |
:nth-of-type(N) | N | N | N | N | N |
:nth-last-of-type(N) | N | N | N | N | N |
:last-child | N | N | I | N | N |
:first-of-type | N | N | N | N | N |
:last-of-type | N | N | N | N | N |
:only-child | N | N | I | N | N |
:only-of-type | N | N | N | N | N |
:empty | N | N | I | N | N |
:target | N | N | Y | N | N |
:enabled | N | N | Y | N | Y |
:disabled | N | N | Y | N | Y |
:checked | N | N | Y | N | Y |
:contains(C) | N | N | N | N | N |
:not(S) | N | N | Y | N | N |
:default | N | N | N | N | Y |
:valid | N | N | Y | N | Y |
:invalid | N | N | Y | N | Y |
:in-range | N | N | Y | N | Y |
:out-of-range | N | N | Y | N | Y |
:required | N | N | N | N | Y |
:optional | N | N | N | N | N |
:read-only | N | N | N | N | N |
:read-write | N | N | N | N | N |
CSS 3 Pseudo-elements | |||||
::selection | N | N | N | N | N |
::value | N | N | N | N | N |
::choices | N | N | N | N | N |
::repeat-item | N | N | N | N | N |
::repeat-index | N | N | N | N | N |
CSS 3 Basic properties | |||||
appearance | N | N | N | N | N |
box-sizing | N | N | N | 88% | 88% |
color | N | N | N | N | N |
color-profile | N | N | N | N | N |
content | N | N | N | N | N |
cursor | 38% | 38% | 94% | 3% | 3% |
display | N | N | N | N | N |
font | 5% | 5% | 5% | 5% | 5% |
icon | N | N | N | N | N |
nav-down | N | N | N | N | N |
nav-index | N | N | N | N | N |
nav-left | N | N | N | N | N |
nav-right | N | N | N | N | N |
nav-up | N | N | N | N | N |
opacity | N | N | Y | N | 75% |
outline-offset | N | N | Y | N | N |
rendering-intent | N | N | N | N | N |
resize | N | N | N | N | N |
ruby-align | 63% | 63% | N | N | N |
ruby-overhang | 36% | 36% | N | N | N |
ruby-position | N | N | N | N | N |
ruby-span | N | N | N | N | N |
CSS 3 Print properties | |||||
image-orientation | N | N | N | N | N |
page | N | N | N | N | N |
page-policy | N | N | N | N | N |
size (@page) | N | N | N | N | N |
DOM is a model that allows scripting languages to handle browser input and output and manipulate information on webpages. This is essential for high-end web applications.
This table is in summarized form. View the full tables
ECMAScript is a language used to access and work with the DOM. It was developed as a standardized base for JavaScript and JScript.
This table is in summarized form. View the full tables
Feature | IE 6 | IE 7 | Firefox 1.5 | Opera 8.5 | Opera 9 |
---|---|---|---|---|---|
Language constructs | |||||
Types | Y | Y | Y | Y | Y |
Basic expressions | 90% | 90% | Y | Y | Y |
Unary expressions | Y | Y | Y | Y | Y |
Math expressions | Y | Y | Y | Y | Y |
Relational expressions | Y | Y | Y | Y | Y |
Binary expressions | Y | Y | Y | Y | Y |
Assignment expressions | Y | Y | Y | Y | Y |
Statements | 97% | 97% | Y | Y | Y |
Objects | |||||
Global | Y | Y | Y | Y | Y |
Object | Y | Y | Y | Y | Y |
Function | Y | Y | Y | Y | Y |
Array | Y | Y | Y | Y | Y |
String | 98% | 98% | Y | Y | Y |
Boolean | Y | Y | Y | Y | Y |
Number | Y | Y | Y | Y | Y |
Math | Y | Y | Y | Y | Y |
Date | Y | Y | Y | Y | Y |
RegExp | Y | Y | Y | Y | Y |
Error | Y | Y | Y | Y | Y |
I am currently in the process of testing other browsers and versions, including Safari and Konqueror. I do not yet have estimated dates for when this information will be available.
Other web browsers may be considered for future inclusion. If you would like to suggest a web browser or help collect data for any web browser not shown here, please post the relevant information in the discussion forum.
You can quickly propose a change by clicking on a support value (such as Y, I, or N) in a full table (not these summary tables) and filling in the new values. You may also use the general purpose contact form, e-mail me at dhammond@webdevout.net, or post in the discussion forum. Contributions are highly appreciated.
Most of the above information comes from testing and research conducted by one person. It is possible that these tables contain errors. If you wish to correct an error or otherwise contribute to this information, please read the above section.