Appendix D. CSS Support Chart

Contents:

As we've seen, browser
compatibility -- or a lack thereof -- is the biggest obstacle
to adoption of CSS. This appendix provides a comprehensive guide to
how the browsers have implemented support for CSS1. Check this master
list to get a rough idea of how well a given property and its values
are supported.

This appendix uses the following key:

Y

Yes

N

No

P

Partial

B

Buggy

Q

Quirky

"Buggy" can refer to anything from mangled display to an
actual browser crash. "Quirky" means that, while the
browser is technically compliant with the specification, it acts in a
fashion which authors may not expect.

D.1. Notes

1.1 Containment in HTML: @import

WinIE4 and WinIE5 both import files even when the
@import statement is at the end of the document
style sheet. This is technically in violation of the CSS1
specification, although not a major failing; thus the
"Quirk" rating.

1.1 Containment in HTML: <x STYLE="dec;" >

Navigator 4 has particular trouble with list items, which is most of
the reason for the "Buggy" rating.

1.3 Inheritance

Navigator 4's inheritance is unstable at best, and fatally
flawed at worst. It would take too long to list all occurrences, but
particularly troublesome areas include tables and lists.

1.4 Class selector

WinIE4/5 allows class names to begin with digits; this is not
permitted under CSS1. It is allowed in CSS2.

1.5 ID selector

WinIE4/5 allows ID names to begin with digits; this is not permitted
under CSS1. All browsers apply the style for a given ID to more than
one instance of that ID in an HTML document, which is not permitted.
This is properly an error-checking problem, not a failing of the CSS
implementations, but I feel it is significant enough to warrant the
ratings shown.

1.6 Contextual selectors: x y z {dec;}

MacNav4 has the most trouble with contextual selectors involving
tables. For example, HTML BODY TABLE P is not
properly handled.

2.3 :first-line

IE3 incorrectly applies styles to the entire element.

2.4 :first-letter

IE3 incorrectly applies styles to the entire element.

3.2 Cascading Order

Again, there are simply far too many instances of problems to list
here.

5.2.2 font-family:cursive

Despite a preferences setting for cursive fonts, Opera does not seem
to apply the preference, but instead substitutes another font. This
may vary by system, as others have reported no trouble with this
feature.

5.2.4 font-variant:small-caps

IE4/5 approximates the small-caps style by making
all such text uppercase. While this can be justified under the CSS1
specification, visually, it does not render the text in small caps.

5.2.6 font-size:xx-small through xx-large

IE4/5's values for absolute sizes assigns
small to be the same size as unstyled text,
instead of medium , as one might expect. Thus,
declaring an absolute font size (such as
font-size:medium ) will almost
certainly lead to different size fonts in Navigator and Explorer.
While this is not incorrect under the specification, it is confusing
to many authors.

5.3.2 background-color:<color>

Nav4 does not apply the background color to the entire content box
and padding, but rather just to the text in the element. This can be
worked around by declaring a near-zero-width border.

5.3.2 background-color:transparent

Nav4 insists on applying this value to the parent of an element, not
the element itself. This can lead to "holes" in the
parent element's background.

5.3.4 background-repeat: repeat

WinIE4 only repeats down and to the right. The correct behavior is
for the background image to be tiled in both vertical directions for
repeat-y, and both horizontal for
repeat-x. Nav4 gets this property correct on a
technicality: since it does not support
background-position, there is no way to know
whether or not it would tile in all four directions if given the
chance, or instead emulate WinIE4's behavior. Opera 3.6,
MacIE4.5, and WinIE5 all behave correctly.

5.3.4 background-repeat: repeat-x

WinIE4 only repeats to the right, instead of both left and right.

5.3.4 background-repeat: repeat-y

WinIE4 only repeats down, instead of both up and down.

5.4.3 text-decoration: none

According to the specification, if an element is decorated, but one
of its children is not, the parent's effect will still be
visible on the child; in a certain sense, it "shines
through." Thus, if a paragraph is underlined, but a
STRONG element within it is set to have no
underlining, the paragraph underline will still "span"
the STRONG element. This also means that the
underlining of child elements should be the same color as the parent
element, unless the child element has also been set to be underlined.
In practice, however, setting an inline element to
none will turn off all decorations, regardless of
the parent's decoration. The only exception to this is Opera,
which implements the specification correctly.

5.4.3 text-decoration: blink

Since this value is not required under CSS1, only Navigator supports
it (surprise).

5.4.5 text-transform: uppercase

Opera 3.6 uppercases the first letter in each inline element within a
word, which (according to the CSS1 Test Suite) it should not do.

5.4.6 text-align:justify

In Nav4, this value has a tendency to break down in tables, but
generally works in other circumstances.

5.4.8 line-height: <length>

Nav4 incorrectly permits negative values for this property.

5.4.8 line-height

Opera 3.6 applies background colors to the space between lines, as
opposed to just the text itself, when the background is set for an
inline element within the text. (See the CSS1 Test Suite for more
details.)

5.5.01 margin-top

All margin properties seem to be problematic, or else completely
unsupported, on inline elements. In the case of
margin-top, support is pretty good on block-level
elements in Nav4 and IE4/IE5, and appears to be perfect in Opera 3.6.

5.5.02 margin-right

All margin properties seem to be problematic, or else completely
unsupported, on inline elements. In the case of
margin-right, support is pretty good on
block-level elements in IE4 and IE5, while with inline elements, IE4
and IE5 ignore this property completely. Navigator does fairly well
so long as margins are not applied to floating or inline elements, in
which case major bugs can be tripped.

5.5.03 margin-bottom

All margin properties seem to be problematic, or else completely
unsupported, on inline elements. In the case of
margin-bottom, support is pretty good on
block-level elements in IE4 and IE5, while with inline elements, IE4
and IE5 ignore this property completely. Navigator does fairly well
so long as margins are not applied to floating or inline elements, in
which case major bugs can be tripped.

5.5.04 margin-left

All margin properties seem to be problematic, or else completely
unsupported, on inline elements. In the case of
margin-left, support is pretty good on block-level
elements in IE4 and IE5, while with inline elements, IE4 and IE5
ignore this property completely. Navigator does fairly well so long
as margins are not applied to floating or inline elements, in which
case major bugs can be tripped.

5.5.05 margin

All margin properties seem to be problematic, or else completely
unsupported, on inline elements. In the case of
margin, support is pretty good on block-level
elements in IE4 and IE5, while with inline elements, IE4 and IE5
ignore this property completely. Navigator does fairly well so long
as margins are not applied to floating or inline elements, in which
case major bugs can be tripped.

5.5.06 padding-top

All padding properties seem to be problematic, or else completely
unsupported, on inline elements. In the case of
padding-top, support is pretty good on block-level
elements in IE4 and IE5. Navigator does fairly well so long as
margins are not applied to floating or inline elements, in which case
major bugs can be tripped.

5.5.07 padding-right

All padding properties seem to be problematic, or else completely
unsupported, on inline elements. In the case of
padding-right, support is pretty good on
block-level elements in IE4 and IE5. Navigator does fairly well so
long as margins are not applied to floating or inline elements, in
which case major bugs can be tripped.

5.5.08 padding-bottom

All padding properties seem to be problematic, or else completely
unsupported, on inline elements. Navigator does fairly well so long
as padding is not applied to floating or inline elements, in which
case major bugs can be tripped.

5.5.09 padding-left

All padding properties seem to be problematic, or else completely
unsupported, on inline elements. Navigator does fairly well so long
as padding is not applied to floating or inline elements, in which
case major bugs can be tripped.

5.5.10 padding

All padding properties seem to be problematic, or else completely
unsupported, on inline elements. Opera correctly ignores negative
padding values (although Opera 3.5 applied negative padding), but
will alter the line height based on values of
padding applied to inline elements, which is
incorrect. Navigator does fairly well so long as padding is not
applied to floating or inline elements, in which case major bugs can
be tripped.

5.5.11 border-top-width

Navigator will create visible borders even when no
border-style is set, and does not set borders on
all sides when a style is set. Things get really ugly when borders
are applied to inline styles. IE4 and IE5 correctly handle borders on
block-level elements, but ignore them for inlines.

5.5.12 border-right-width

Navigator will create visible borders even when no
border-style is set, and does not set borders on
all sides when a style is set. Things get really ugly when borders
are applied to inline styles. IE4 and IE5 correctly handle borders on
block-level elements, but ignore them for inlines.

5.5.13 border-bottom-width

Navigator will create visible borders even when no
border-style is set, and does not set borders on
all sides when a style is set. Things get really ugly when borders
are applied to inline styles. IE4 and IE5 correctly handle borders on
block-level elements, but ignore them for inlines.

5.5.14 border-left-width

Navigator will create visible borders even when no
border-style is set, and does not set borders on
all sides when a style is set. Things get really ugly when borders
are applied to inline styles. IE4 and IE5 correctly handle borders on
block-level elements, but ignore them for inlines.

5.5.15 border-width

Navigator will create visible borders even when no
border-style is set, and does not set borders on
all sides when a style is set. Things get really ugly when borders
are applied to inline styles. IE4 and IE5 correctly handle borders on
block-level elements, but ignore them for inlines.

5.5.16 border-color

Nav4 and Opera do not set colors on individual sides, as in
border-color:red blue green
purple;. Explorer cannot apply border colors to inline
elements, since it does not apply borders to inlines, but this is not
penalized here.

5.5.18 border-top

IE4 and IE5 do not apply borders to inline elements.

5.5.19 border-right

IE4 and IE5 do not apply borders to inline elements.

5.5.20 border-bottom

IE4 and IE5 do not apply borders to inline elements.

5.5.21 border-left

IE4 and IE5 do not apply borders to inline elements.

5.5.22 border

IE4 and IE5 do not apply borders to inline elements.

5.5.23 width

Navigator applies width in an inconsistent
fashion, but appears to honor it on most simple text elements and
images. WinIE4/5 applies it to images and tables, but ignores it for
most text elements like P and headings. Opera 3.6,
weirdly, seems to set the width of images to 100%, but this is
largely an illusion, since minimizing the window and then maximizing
it again will reveal correctly sized images.

5.5.25 float

float is one of the most complicated and
hardest-to-implement aspects of the entire CSS1 specification. Basic
floating is generally supported by all browsers, especially on
images, but when the specification is closely tested, or the document
structure becomes complicated, floating most often happens
incorrectly, or not at all. The floating of text elements is
especially inconsistent, although IE5 and Opera have cleaned up their
act to a large degree, leaving WinIE4 and Nav4 the major
transgressors in this respect. Authors should use
float with some care, and thoroughly test any
pages employing it with great care.

5.5.26 clear

Like float, clear is not a
simple thing to support. Again, basic support is there, but as things
get more complicated, browser behavior breaks down. Thoroughly test
pages using this property.

5.6.1 display: inline

Opera 3.6 almost gets inline right, but seems to
honor the occasional carriage return as though it were a
BR element, instead of plain whitespace.

5.6.3 list-style-type: none

MacNav4 displays question marks for bullets when using this value.

5.6.5 list-style-position:inside

The positioning and formatting of list-items when set to this value
are a bit odd under MacIE4.

6.1 Length Units: ex

All supporting browsers appear to calculate ex as one-half em. This
is arguably a reasonable approximation, but it is technically
incorrect.

6.3 Color Units :<keyword>

Navigator will generate a color for any apparent keyword. For
example, color: invalidValue will yield a dark
blue, and color:inherit (a
valid declaration under CSS2) comes out as a vaguely nauseous green.

6.4 URLs:<url>

Navigator determines relative URLs with respect to the HTML document,
not the style sheet.