These are test pages that I have written for various reasons - usually to see whether certain features are implemented in any browsers or to test known features in certain browsers. They cover some sections of CSS2 much more completely than others. They are listed in order of the sections of CSS2 that they test. Warning: These tests may crash your browser or your whole computer. Use caution when testing.
U | Unknown (either because the test isn't written yet, I haven't tested that browser yet, or I don't know the correct result) |
A | Arguable due to ambiguities or differing interpretations of CSS specs (counts as unknown) |
Y | Yes. (i.e., entirely supported) |
N | Not Supported† |
P | Partially Supported† |
B | Buggy |
BB | Buggy in a way much more serious than the other browsers marked as buggy. |
D | Destroys feature. That is, it's not implemented, but buggy error handling causes bizarre interpretation.† |
M | Maybe (i.e, other bugs prevent proper testing) |
C | Crashes |
x | Lowercase letters, such as b, show very minor bugs. |
(X) | I disagree with the spec, and the result would be different if the spec were the way I want it. |
† - Not possible on tests of “basic features.”
Note: Not all of my test pages are listed here. Those not testable are listed below.
Note: Some of the rules for absolute positioning and clipping are expected to be changed in the near future. The current tests test the old rules, and the results for those tests are no longer being updated. However, they have not yet been removed from the chart.
Browser | Mozilla (see notes) | MSIE | Opera | MSIE | ICEBrowser | Opera | NNav | Konqueror | WebTV Viewer[9] | Specs Tested [2] |
---|---|---|---|---|---|---|---|---|---|---|
Version | 2000-04-07 -08-M15 (some updates 05-05) | 5.0 | 3.60 [5] | 5.0 | 5.02 | 4.0 preview 3 | 4.61 & 4.5 | 1.9.2 | 2.0, b551 | |
Platform | Linux (& Windows) | Mac | Windows | Windows | Java (Linux) | Linux | Linux & Windows[6] | Linux | Windows | |
Status | Beta | Release | Release | Release | Release | Alpha (Technology Preview) | Release | Beta | ??? | |
HTML Implied elements test[1] | Y | Y | M | M | b | Y | B | Y | B | HTML4 |
Styling of form elements | U | U | U | U | U | U | U | U | U | |
1.3.3 Shorthand Properties | U | U | U | U | U | U | U | U | U | CSS1 |
3.2 CSS2 Conformance - alternate stylesheets | N (y in viewer) | N | N | N | N | N | N | N | N | CSS2 |
3.2 CSS2 Conformance - loading errors[1] | Y | Y | Y | Y | Y | B | B | Y | Y | CSS2 |
4.1.1, 4.2 CSS Parsing Test[1] | Y | Y | B | B | B | B | B | B | B | CSS2 (and 1?) |
4.1.1, 4.2 CSS Parsing Test 2 | Y | Y | B | B | B | B | B | Y | B | CSS2 (and 1?) |
4.1.1, D.1, 4.2 CSS Parsing Test 4 | Y | Y | B | Y | B (M?) | B | Y | C | Y | CSS1 |
4.1.1, D.1, 4.2 CSS Parsing Test 5 | Y | Y | B | Y | B (M?) | B | B | N | B | CSS1 |
4.1.2 Keywords | Y | B | B | B | B | B | B | B | B | CSS1, CSS2 |
4.1.3 Case sensitivity of id and class | Y | B | Y | B | Y | B | B | Y | B | HTML4 |
4.1.3, 5.4 Strange XML Type Selectors | B | B | N/A | U | N/A | B | N/A | N/A | N/A | CSS2, XML1.0, xml-stylesheet |
4.2, 4.3.2 Unitless Lengths Test[1] | Y[8] | Y | Y | B | B | Y | B | Y | N | CSS1 |
4.3.2 ex unit test | B (P?) | B | B (P?) | B (P?) | BB | BB | M | B (but ex works!) | N | CSS1 |
4.3.2 em unit test | A | B | Y (?) | M | BB | BB | M | B | N | CSS1 |
4.3.10 Strings | Y | Y (part M) | N | B | B | B | N | B (or P?) | B | CSS1, CSS2 |
4.4.1, 4.1.1CSS Character Escapes | (Y) | BB | D | N | N | D | D | C | D | CSS1, CSS2 |
5.3 The CSS2 Universal Selector | D | B | P | P | B (!important buggy) | Y | N | B | N | CSS2 |
5.6 The CSS2 Child Selector | Y | b | B | D | B? | b | N | b | D | CSS2 |
5.7 CSS2 Adjacent Sibling Selectors | Y[4] | b | P | D | B (P?) | b | N | B | D | CSS2 |
5.8 CSS2 Attribute Selectors | Y | N | N | d | B | B | N | C | N | CSS2 |
5.8.3, 6.4.1 CSS with multiple classes | Y | Y | Y | Y | b | Y | N | B | N | HTML4 or CSS2 |
5.9 ID selectors in XML | N | N | N/A | N | N/A | N | N/A | N/A | N/A | CSS2 |
5.10, 5.3 Pseudo-element tests | Y | B | B | P | D | B (D?) | B | N | B | CSS2 (and 1?) |
5.10 Pseudo-class tests | Y | Y | N | B | B | BB | N | N | U | CSS2 |
5.10 Pseudo-class tests 3 | Y | Y | N | B | B | D | N | N | U | CSS2 |
5.11.1 CSS2 :first-child Selector | Y | Y | N | N | Y | N | N | b | D | CSS2 |
5.11.3 Dynamic pseudo-classes on links | Y | Y | B (P in 3.51??) | B | B | B | B | N | N | CSS1, CSS2 |
5.11.3 Dynamic pseudo-classes on elements other than links | B | B | N | N | b | N | N | N | U | CSS2 |
6.1 Test for Lack of Order Dependence[1] | Y | Y | Y | Y | Y | b | M | Y | M | CSS1 |
6.2.1 CSS inherit Test | Y | P | P | N | N | P | D | P | D | CSS2 |
6.4.2 Test of !important grammar | Y | Y | Y | Y | N | Y | N | B | Y | CSS1, CSS2 |
6.4.3 Inline style specificity test[1] | (B) | (B) | B | (B) | (B) | B | BB | (B) | BB | CSS1 |
6.4.3 Specificity Base Test[1] | Y | Y | Y (B in 3.51) | Y | B | Y | Y | Y | B | CSS1 |
6.4.4 Non-CSS Presentational Hints Test 1 | B | B | B | Y | B | B | B | B | B | CSS1 |
6.4.4 Non-CSS Presentational Hints Test 2 | b[10] | U | B | B | U | U | N | U | N | CSS1 |
8, 1.3.3 Shorthand Box Properties Test | Y | Y | Y | M | Y | B | M | Y | N | CSS1 |
8, 1.3.3 Shorthand Box Properties Test 2 | Y | Y | Y | M | B | B | M | B | N | CSS1 |
8, 9.1.2 html and body box properties |
A | Y | B | B | b | b | B | Y | N | CSS1 |
8, 12.6.2 List Box Properties | Y | B | (Y) | Y | B | B | B | B | N | CSS1, CSS2 |
8.3 Zero Margins Test | D | Y | m | M | BB | b | B | b | N | CSS1 |
8.5 Shorthand Border Properties Test | Y | Y | Y | Y | B | B | B | B | N | CSS1 |
8.5 Border Properties Test | U | U | U | U | U | U | U | U | U | CSS1, CSS2 |
9.1.2 Initial Containing Block | B | Y | B | B | B (?) | B | B | B | U | CSS2 |
9.2.1 Block Boxes | Y | Y | Y | Y | Y | Y | B | C | N | CSS1, CSS2 |
9.2.3 Compact Boxes | N[3] | N | N | N | N | Y (spec is unclear; test may be wrong) | N | D | N | CSS2 |
9.2.4 Run-in Boxes | N[3] | Y | N | N | B | B | N | D | N | CSS2 |
9.2.5 Test of display: none | Y | Y | Y | Y | Y | B | Y | Y | N | CSS1, CSS2 or HTML40 |
9.3.1 Positioning | B | B | N | BB | D | B | B | BB | N | CSS2 (possibly soon incorrect) |
9.3.2 Test of top | B | B | N | B | B | B | BB | b | N | CSS2 (possibly soon incorrect) |
9.3.2 Test of right | Y | Y | N | b | B | B | BB | P | N | CSS2 (possibly soon incorrect) |
9.3.2 Test of bottom | Y | B | N | B | B | B | BB | b | N | CSS2 (possibly soon incorrect) |
9.3.2 Test of left | B | Y | N | b | B | B | BB | Y | N | CSS2 (possibly soon incorrect) |
9.5 Stacking order on floats | U | U | U | U | U | U | U | U | U | CSS1 (?), CSS2 |
9.5.1 My original CSS1 section 4.1.4 test | (B) | B | B | B | BB | BB | B | B | N | CSS1 |
9.5.1 Float Positioning Test 2 | B | B | BB | Y | BB | BB | BBB | B | N | CSS1 |
9.7 Relationships between display, position, and float. | Y | B | P | B | BB | b | B | B | U | CSS2 |
9.9 Layered presentation | B | B | N | B | B | B | BB | B | U | CSS2 |
9.10 Bidirectional Test | P | N | N | Y | N | N | N | P (Y?) | N | CSS2 |
10.1 Containing blocks of block level and floating elements | Y (?) | B | b | B | B | b | BB | B | B | CSS1, CSS2 |
10.1 Containing blocks of fixed elements | b (worse on Win??) | B | N | BB (D?) | B | BB | BB (D?) | BB (D?) | D | CSS2 (possibly soon incorrect) |
10.1 Containing blocks of absolutely positioned elements with block-level positioned ancestors | Y | B | N | B | BB | BB | BB | C | D | CSS2 (possibly soon incorrect) |
10.1 Containing blocks of absolutely positioned elements with inline-level positioned ancestors | U | U | U | U | U | U | U | U | D | CSS2 |
10.1 Containing blocks of absolutely positioned elements without positioned ancestors | BB | U | U | U | U | B | B | U | U | CSS2 (possibly soon incorrect) |
10.3.1 Widths and margins of inline, non-replaced elements | Y | Y | P | B | BB | B | BB | B | BB | CSS1, CSS2 |
10.3.2 Widths and margins of inline, replaced elements | Y | Y | BB | Y | BB | B | BB | B | U | CSS1, CSS2 |
10.3.3 Widths and margins of block-level, non-replaced elements | Y | B | P | B | BB | B | M | B | U | CSS1, CSS2 |
10.3.4 Widths and margins of block-level, replaced elements | Y | M | B | B (P?) | B | B (D?) | M | B | U | CSS1, CSS2 |
10.3.5 Widths and margins of floating, non-replaced elements | BB | B | BB | BB | B | B (D?) | M | B | U | CSS1, CSS2 |
10.3.7 Widths and margins of absolutely positioned, non-replaced elements | b | BB | N | B | BB | BBB | N | BB | U | CSS2 (soon incorrect) |
10.4 Maximum and Minimum Widths | Y | N | N | N | N (B) | Y | M | N (b) | U | CSS2 |
10.4 Maximum and Minimum Width Recalculations | Y | N | B | N | D | B | N | BB | U | CSS2 |
10.6.4 Heights and margins of absolutely positioned, non-replaced elements | Y | BB | N | B | BB | B | N | B | U | CSS2 (soon incorrect) |
10.7 Maximum and Minimum Heights | Y | N | N | N | N | Y | M | N | U | CSS2 |
10.7 Maximum and Minimum Height Recalculations | b | N | N | N | N | B | N | BB | U | CSS2 |
10.3.7, 10.6.4, 6.2 Inheritance of width and height on absolutely positioned elements | Y | Y | N | B | BB | B | B | B | U | CSS2 |
10.8 Line Box Test 1 | Y | Y | B | Y | P | B | M | P | U | CSS1, CSS2 |
10.8, 9.4.2 Line Box Test 2 | Y | B | B | B | N | B | B | B | U | CSS1, CSS2 |
10.8.1, 9.4.2 line-height Inheritence Test and Line Box Test 3 - inheritance | Y | Y | Y | Y | N | Y | B | B | U | CSS1 |
10.8, 10.6.1 line-height Inheritence Test and Line Box Test 3 - line boxes | Y | Y | Y | B | N | Y | B | B | U | CSS1, CSS2 |
10.8, 10.6.1 Line Box Test 4 | B (?) | Y | BB | B | B | A | BB | BB | U | CSS1, CSS2 |
10.8 Inline Display Test | A | B | B | N | B | B?? | BB | B (?) | U | CSS1, CSS2 |
11.1 The overflow and clip properties | B | B | N | B | BB | N/B | N | N (B) | U | CSS2 |
11.1.2 The clip property | Y | B | N | B | BB | N/B | B | N (B?) | U | CSS2 |
11.1.2 The clip property | Y | B | N | B | BB | N/B | B | N (B?) | U | CSS2 |
11.2 The visibility property | Y | Y | N | P | P (?) | B | M | N | N | CSS2 |
11.2 The visibility property | Y | Y | N | P (also display glitch) | P (?) | B | M | N | U | CSS2 |
12.1 The :before and :after pseudo-elements | Y | N | N | N | B | C | N | N | N | CSS2 |
12.2 The content property | P/A | N | N | N | BB | B | N | N | N | CSS2 |
14.2.1 The 'background-image' property | Y | Y | Y | Y | Y | BB | D | b (unrelated) | N | CSS1(, CSS2)? |
15.2.3 font-weight error-handling test | Y | B | U | U | Y | C | U | P | U | CSS1 |
15.2.3 The font-stretch property | N | N | N | N | N | N | N | N | U | CSS2 |
16.3.2 Text Shadow Test | N | N | N | N | N | N | N | N | N | CSS2 |
17.2 Table display types | P | B | N | N | C (exception) | M | N | D | N | CSS2 |
17.2.1 Anonymous Table Objects | b | B | N | N | C (exception) | C | N | C | N | CSS2 |
17.4 Tables and captions | b | N[11] | N | N | D | B | C | D | N | CSS2 |
17.4 Anonymous box around caption and table | B | N[11] | N | B (display bug, otherwise Y) | D | D | N | D | N | HTML 4.0, CSS2 |
17.4.1 Caption position and alignment | B | N[11] | N | N | D | BB | C | D | N | CSS2 |
17.5.1 Table layers and transparency | Y[8] | P | P | (Y) | P | P | B | P | D | CSS2 |
17.5.1 Table layers and transparency | Y[8] | P | P | B | P | P | B | P | D | CSS2 |
17.5.1 Table layers and transparency | Y[8] | B | B | B | B | B | B | B | D | CSS2 |
17.5.2 table-layout: fixed | Y | N | N | B | N | B | N | N | N | CSS2 |
17.5.3 Vertical alignment and table height | B | B | N | B | B (P?) | b | M | C | U | CSS2 |
17.5.4 Horizontal alignment and table width | P | P | D[7] | P | P | P | P | P | U | CSS2 |
17.6 Table Border Test 1 | B | B | N | B | N | Y | N | N | N | CSS2 |
17.6 Table Border Test 2 | B | B | N | N | N | B | N | N | U | CSS2 |
17.6 Simple collapsing table borders | B | B | N | N | N | B | N | C | U | CSS2 |
18.1 The cursor property | B | Y | N | P | U | N | N | N | U | CSS2 |
18.2 UI colors | B | P[12] | N | Y | N | N | D | P | U | CSS2 |
18.3 UI fonts | N | B | N | B | N | N | N | N | U | CSS2 |
18.4 The outline property | D (?) | B | N | N | N | N | N | N | U | CSS2 |
Font Sizes | A | A(?) | A | B | A | B | B | BB | U | CSS1 |
Tests Y (+1) | 59 | 38 | 17 | 20 | 9 | 13 | 3 | 11 | ||
Tests N (0) | 7 | 17 | 48 | 24 | 24 | 9 | 36 | 26 | ||
Tests P (+0.5) | 5 | 4 | 8 | 6 | 6 | 4 | 1 | 9 | ||
Tests B (-0.5) | 29 | 43 | 26 | 46 | 57 | 70 | 44 | 45 | ||
Tests D (-2) | 3 | 0 | 2 | 3 | 6 | 3 | 4 | 6 | ||
Tests M (-0.5) | 0 | 1 | 2 | 5 | 0 | 1 | 14 | 0 | ||
Tests C (-4) | 0 | 0 | 0 | 0 | 2 | 3 | 2 | 8 | ||
Total Points (as of 2000-06-01), out of about 104 | 41 | 18 | 3 | -8.5 | -36.5 | -38.5 | -41.5 | -51 |
[1] “Basic feature,” i.e., it is not possible not to support this.
[2] earliest spec for each feature tested; judgment approximate
[3] Supported in earlier builds, but feature now removed.
[4] This Y result depends on a definition of adjacent sibling elements that is not in the spec, but does make sense.
[5] Differences with 3.51 are noted for tests that existed before 3.61 was released.
[6] The only differences I have seen between Linux and Windows versions are (1) that the Linux version sometimes has problems drawing or redrawing borders and (2) occasional font-selection quirks on Linux.
[7] The problem that gets the "D" rating is that the two high unicode character entities cause the rest of the line to disappear. This isn't strictly a CSS problem, but it's very serious.
[8] I believe this test only works correctly when Mozilla is in standard mode, which is detected based on the DOCTYPE.
[9] I gave up testing WebTV about halfway through because I didn't understand the results I was seeing, and the browser didn't show enough promise to deserve further investigation. I think it may do something weird like only accept styles on DIV elements, and not P elements (or something else...).
[10] User stylesheet simulated by appending to ua.css
.
[11] MacIE's table model in some areas is not the CSS2 table model. However, it uses its own table model for some of its application of CSS to tables. This is acceptable under CSS1, and therefore receives an N rating.
[12] The UI colors in MacIE are reasonable, but do not come from the UI.
(Back to CSS Testing Information, David Baron)