Semantic changes from CSS1

While all CSS1 style sheets are valid CSS2 style sheets, there are a few cases where the CSS1 style sheet will have a different meaning when interpreted as a CSS2 style sheet. Most changes are due to implementation experience feeding back into the specification, but there are also some error corrections.

  • The meaning of "!important" has been changed. In CSS1, "!important" in an author's style sheet took precedence over one in a user style sheet. This has been reversed in CSS2.
  • In CSS2 color values are clipped with regard to the device gamut, not with regard to the sRGB gamut as in CSS1.
  • CSS1 simply said that 'margin-right' was ignored if the both 'margin-left' and 'width' were set. In CSS2 the choice between relaxing 'margin-right' or 'margin-left' depends on the writing direction.
  • In CSS1, several properties (e.g., 'padding') had values referring to the width of the parent element. This was an error; the value should always refer to the width of a block-level element and this specification reflects this by introducing the term "containing block".
  • The initial value of 'display' is 'inline' in CSS2, not 'block' as in CSS1.
  • In CSS1, the 'clear' property applied to all elements. This was an error, and the property only applies to block-level elements in CSS2.
  • In CSS1, ':link', ':visited' and ':active' were mutually exclusive; in CSS2, ':active' can occur together with ':link' or ':visited'.
  • The suggested scaling factor between adjacent 'font-size' indexes in the table of font sizes has been reduced from 1.5 to 1.2.
  • The computed value, not the actual value, of 'font-size' is inherited.
  • The CSS1 description of 'inside' (for 'list-style-position') allowed the interpretation that the left margin of the text was affected, rather than the position of the bullet. In CSS2 that interpretation is ruled out.
  • Please also consult the normative section on the differences between the CSS1 and CSS2 tokenizer.