HTML and CSS Technical Articles
CSS Compatibility and Internet Explorer
This is preliminary documentation and is subject to change.
With each new release of Windows Internet Explorer, support for the Cascading
Style Sheets (CSS) standard has steadily improved. Internet Explorer 6 was the first
fully CSS Level 1-compliant version of Internet Explorer. Windows Internet Explorer
8 is planned to be a fully CSS Level 2.1-compliant browser, and will support some
features of CSS 3.
If the browsers your Web site is targeting include earlier versions of Internet
Explorer, however, you want to know the level of CSS compliance for those as well.
This article provides an at-a-glance look at CSS compliance across recent versions
of Internet Explorer, including support in Internet Explorer 8 Beta 1 for Developers
and planned support in the final version of Internet Explorer 8.
This article's organization is loosely based on that of the
CSS reference documentation
on MSDN. It contains the following sections:
Introduction
Each table lists support status information for grouped CSS features across recent versions of Internet
Explorer. In each section, the first table represents
features introduced in CSS 2.1 or earlier, and the second table represents features
planned for CSS 3.
A value of "Yes" in a cell indicates that that feature is implemented in that
version of Internet Explorer. (For the "IE 8.0" column, a value of "Yes" indicates
that the feature is currently planned for implementation in Internet Explorer 8.)
A value of "Partial" in a cell indicates that that feature is only partially
implemented in that version of Internet Explorer. For more information, click the
link to view that feature's reference page on MSDN.
A value of "No" in a cell indicates that that feature is not implemented in that
version of Internet Explorer.
At-rules
CSS 2.1:
| | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| @charset | No | Yes | Yes | Yes | Yes | Yes |
| @import | Yes | Yes | Yes | Yes | Yes | Yes |
| @media | No | Yes | Yes | Yes | Yes | Yes |
| @page | No | Yes | Yes | Yes | Yes | Yes |
CSS 3:
| | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| @font-face | No | Yes | Yes | Yes | Yes | Yes |
| @namespace | No | No | No | No | No | No |
Selectors
Element Selectors
CSS 2.1:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| .value {
sRules } | Class
(see Note) | Partial | Partial | Partial | Yes | Yes | Yes |
| #value { sRules
} | ID | Yes | Yes | Yes | Yes | Yes | Yes |
| E { sRules } | Type | Yes | Yes | Yes | Yes | Yes | Yes |
| * { sRules
} | Universal | No | No | No | Yes | Yes | Yes |
Note Prior to Internet Explorer 7, there was a two-class
selector limit per element.
CSS 3:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| ns|E { sRules
} | Namespaced | No | No | No | No | No | No |
Attribute Selectors
CSS 2.1:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| [att=val]
{ sRules } | Equality
[=] | No | No | No | Yes | Yes | Yes |
| [att] { sRules
} | Existence
[] | No | No | No | Yes | Yes | Yes |
| [att|=val]
{ sRules } | Hyphen
[|=] | No | No | No | Yes | Yes | Yes |
| [att~=val]
{ sRules } | Whitespace
[~=] | No | No | No | Yes | Yes | Yes |
CSS 3:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| [ns|attr] { sRules
} | Namespaced | No | No | No | Yes | Yes | Yes |
| [att^=val]
{ sRules } | Prefix
[^=] | No | No | No | Yes | Yes | Yes |
| [att*=val]
{ sRules } | Substring
[*=] | No | No | No | Yes | Yes | Yes |
| [att$=val]
{ sRules } | Suffix
[$=] | No | No | No | Yes | Yes | Yes |
Combinators
CSS 2.1:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| E + F { sRules
} | Adjacent
Sibling (+) | No | No | No | Yes | Yes | Yes |
| E > F { sRules
} | Child
(>) | No | No | No | Yes | Yes | Yes |
| E F { sRules } | Descendant | Yes | Yes | Yes | Yes | Yes | Yes |
CSS 3:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| E ~ F { sRules
} | General
Sibling (~) | No | No | No | Yes | Yes | Yes |
Pseudo-classes
CSS 2.1:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| :active { sRules } | :active | No | No | No | Partial | Partial | Yes |
| :after { sRules } | :after | No | No | No | No | Yes | Yes |
| :before { sRules } | :before | No | No | No | No | Yes | Yes |
| :first-child { sRules } | :first-child | No | No | No | Yes | Yes | Yes |
| :focus { sRules } | :focus | No | No | No | No | No | Yes |
| :hover { sRules } | :hover | No | No | No | No | No | Yes |
| :lang(C) { sRules
} | :lang() | No | No | No | No | Yes | Yes |
| :link { sRules } | :link | Yes | Yes | Yes | Yes | Yes | Yes |
| :visited { sRules } | :visited | Yes | Yes | Yes | Yes | Yes | Yes |
CSS 3:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| :root { sRules } | :root | No | No | No | No | No | No |
| :nth-child() { sRules } | :nth-child() | No | No | No | No | No | No |
| :nth-last-child() { sRules } | :nth-last-child() | No | No | No | No | No | No |
| :nth-of-type() { sRules } | :nth-of-type() | No | No | No | No | No | No |
| :nth-last-of-type() { sRules
} | :nth-last-of-type() | No | No | No | No | No | No |
| :last-child { sRules } | :last-child | No | No | No | No | No | No |
| :first-of-type { sRules } | :first-of-type | No | No | No | No | No | No |
| :last-of-type { sRules } | :last-of-type | No | No | No | No | No | No |
| :only-child { sRules } | :only-child | No | No | No | No | No | No |
| :only-of-type { sRules } | :only-of-type | No | No | No | No | No | No |
| :empty { sRules } | :empty | No | No | No | No | No | No |
| :target { sRules } | :target | No | No | No | No | No | No |
| :not(X) { sRules
} | :not() | No | No | No | No | No | No |
| :enabled { sRules } | :enabled | No | No | No | No | No | No |
| :disabled { sRules } | :disabled | No | No | No | No | No | No |
| :checked { sRules } | :checked | No | No | No | No | No | No |
| :indeterminate { sRules } | :indeterminate | No | No | No | No | No | No |
| :default { sRules } | :default | No | No | No | No | No | No |
| :valid { sRules } | :valid | No | No | No | No | No | No |
| :invalid { sRules } | :invalid | No | No | No | No | No | No |
| :in-range { sRules } | :in-range | No | No | No | No | No | No |
| :out-of-range { sRules } | :out-of-range | No | No | No | No | No | No |
| :required { sRules } | :required | No | No | No | No | No | No |
| :optional { sRules } | :optional | No | No | No | No | No | No |
| :read-only { sRules } | :read-only | No | No | No | No | No | No |
| :read-write { sRules } | :read-write | No | No | No | No | No | No |
Pseudo-elements
CSS 2.1:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| :first-letter { sRules } | :first-letter | No | Yes | Yes | Yes | Yes | Yes |
| :first-line { sRules } | :first-line | No | Yes | Yes | Yes | Yes | Yes |
CSS 3:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| ::before { sRules } | ::before | No | No | No | No | No | No |
| ::after { sRules } | ::after | No | No | No | No | No | No |
| ::first-letter { sRules } | ::first-letter | No | No | No | No | No | No |
| ::first-line { sRules } | ::first-line | No | No | No | No | No | No |
| ::selection { sRules } | ::selection | No | No | No | No | No | No |
| ::value { sRules } | ::value | No | No | No | No | No | No |
| ::choices { sRules } | ::choices | No | No | No | No | No | No |
| ::repeat-item { sRules } | ::repeat-item | No | No | No | No | No | No |
| ::repeat-index { sRules } | ::repeat-index | No | No | No | No | No | No |
Attributes
CSS 2.1:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| { sRule!important } | !important
Declaration | Partial | Partial | Partial | Yes | Yes | Yes |
Lists
CSS 2.1:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| { list-style : sStyle
} | list-style | Yes | Yes | Yes | Yes | Yes | Yes |
| { list-style-image
: sStyle } | list-style-image | Yes | Yes | Yes | Yes | Yes | Yes |
| { list-style-position
: sStyle } | list-style-position | Yes | Yes | Yes | Yes | Yes | Yes |
| { list-style-type :
sStyle } | list-style-type | No | No | No | Partial | Yes | Yes |
Color and Background
CSS 2.1:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| { color : sColor } | color | Yes | Yes | Yes | Yes | Yes | Yes |
| { background : sBackground
} | background | Yes | Yes | Yes | Yes | Yes | Yes |
| { background-attachment
: sAttachment } | background-attachment | Partial | Partial | Partial | Yes | Yes | Yes |
| { background-color
: sColor } | background-color | Yes | Yes | Yes | Yes | Yes | Yes |
| { background-image
: sLocation } | background-image | Yes | Yes | Yes | Yes | Yes | Yes |
| { background-position
: sPosition } | background-position | Partial | Partial | Partial | Partial | Yes | Yes |
| { background-repeat
: sRepeat } | background-repeat | Yes | Yes | Yes | Yes | Yes | Yes |
CSS 3:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| { color-profile : sProfile
} | color-profile | No | No | No | No | No | No |
| { rendering-intent
: sIntent } | rendering-intent | No | No | No | No | No | No |
{ background : sBackground1,
sBackground2, etc. } | background (multiple) | No | No | No | No | No | No |
| { background-clip :
sClip } | background-clip | No | No | No | No | No | No |
| { background-origin
: sOrigin } | background-origin | No | No | No | No | No | No |
| { background-break
: sBreak } | background-break | No | No | No | No | No | No |
| { background-size :
sSize } | background-size | No | No | No | No | No | No |
Font and Text
CSS 2.1:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| { direction : sDirection
} | direction | Yes | Yes | Yes | Yes | Yes | Yes |
| { font : sFont } | font | Yes | Yes | Yes | Yes | Yes | Yes |
| { font-family : sFamily
} | font-family | Yes | Yes | Yes | Yes | Yes | Yes |
| { font-size : sSize
} | font-size | Yes | Yes | Yes | Yes | Yes | Yes |
| { font-style : sStyle
} | font-style | Yes | Yes | Yes | Yes | Yes | Yes |
| { font-variant : sVariant
} | font-variant | Yes | Yes | Yes | Yes | Yes | Yes |
| { font-weight : sWeight
} | font-weight | Partial | Partial | Partial | Partial | Partial | Yes |
| { letter-spacing
: sSpacing } | letter-spacing | Yes | Yes | Yes | Yes | Yes | Yes |
| { line-height
: sHeight } | line-height | Yes | Yes | Yes | Yes | Yes | Yes |
| { text-align : sAlign
} | text-align
| Yes | Yes | Yes | Yes | Yes | Yes |
| { text-decoration :
sDecoration } | text-decoration
| Yes | Yes | Yes | Yes | Yes | Yes |
| { text-indent : sIndent
} | text-indent
| Yes | Yes | Yes | Yes | Yes | Yes |
| { text-transform :
sTransform } | text-transform
| Yes | Yes | Yes | Yes | Yes | Yes |
| { unicode-bidi : sAlign
} | unicode-bidi
| Yes | Yes | Yes | Yes | Yes | Yes |
| { vertical-align :
sAlign } | vertical-align | Yes | Yes | Yes | Yes | Yes | Yes |
| { white-space : sWrap
} | white-space
| Partial | Partial | Partial | Partial | Yes | Yes |
| { word-spacing : sSpacing
} | word-spacing
| Partial | Partial | Partial | Partial | No* | Yes |
CSS 3:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | IE 8 Beta 1 | IE 8.0 |
| { font-effect :
sEffect } | font-effect | No | No | No | No | No | No |
| { font-emphasize :
sEmphasize } | font-emphasize | No | No | No | No | No | No |
| { font-size-adjust
: sSizeAdjust } | font-size-adjust | No | No | No | No | No | No |
| { font-smooth :
sSmooth } | font-smooth | No | No | No | No | No | No |
| { font-stretch :
sStretch } | font-stretch | No | No | No | No | No | No |
| { hanging-punctuation
: sHangingPunctuation } | hanging-punctuation | No | No | No | No | No | No |
| { punctuation-trim
: sTrim } | punctuation-trim | No | No | No | No | No | No |
| { ruby-align :
sRubyAlign } | ruby-align | Yes | Yes | Yes | Yes | No* | Yes |
| { ruby-overhang :
sRubyOverhang } | ruby-overhang | Yes | Yes | Yes | Yes | No* | Yes |
| { ruby-position :
sRubyPlacement } | ruby-position
| Yes | Yes | Yes | Yes | No* | Yes |
| { ruby-span : sRubySpan
} | ruby-span | No | No | No | No | No | No |
| { text-align-last :
sAlignLast } | text-align-last
| Partial | Partial | Partial | Partial | Partial | Partial |
| { text-emphasis :
sEmphasis } | text-emphasis | No | No | No | No | No | No |
| { text-justify :
sJustify } | text-justify
| No | Yes | Yes | Yes | Yes | Yes |
| { text-outline : sOutline
} | text-outline | No | No | No | No | No | No |
| { text-overflow : sOverflow} | text-overflow
| No | Partial | Partial | Partial | Partial | Partial |
| { text-shadow : sShadow
} | text-shadow | No | No | No | No | No | No |
| { text-wrap : sWrap
} | text-wrap | No | No | No | No | No | No |
| { word-break :
sBreak } | word-break
| Partial | Partial | Partial | Partial | Partial | Partial |
| { word-wrap : sWrap
} | word-wrap
| Yes | Yes | Yes | Yes | Yes | Yes |
| { writing-mode : sFlow
} | writing-mode
| Yes | Yes | Yes | Yes | Yes | Yes |
Generated Content
CSS 2.1:
| | | IE 5.0 | IE 5.5 | IE 6.0 | IE 7.0 | |