That happened: Microsoft acknowledged the fact that HTML element is
the topmost one in any HTML document and that there is nothing atop of
it (DOCTYPE declarations and prologs are not normally styled by
stylesheet means :-)
Not only the fact acknowledged by also the relevant bug fixed in IE7.
It means that it's time to say bye-bye to the infamous "holly hack":
sooner is better. Actually Microsoft gave a generous share of time for
updates (announcing the planned bag fixes since the 2005) : but there
will be always someone left behind.
This way if you have in your stylesheet the rule * html (universal
selector - html) and if it supposes to mean "further rules for that
stupid IE only" then your stylesheet is rather badly broken for an
increasing amount of your visitors.
Which ones of existing workarounds are still needed for all versions of
IE (including IE7) is a subject of separate tests.
I'd just like to explain how to use these workarounds in a reliable and
*working* way.
1) Conditional comments (IE 5.0 or higher for all platforms)
1-1) Conditional content-hiding comments
These comments are using the regular comment syntax, so any UA's except
IE will simply not see anything inside of them. Respectively W3C
Validator doesn't care neither.
1-1-1) No version check. Will be seen and parsed by IE 5.0 or higher.
Other words by any IE version with conditional comments support.
<!--[if IE]>
<link rel="stylesheet" href="ie_fix.css">
<![endif]-->
1-1-2) Version check using operators lt (lesser than), lte (lesser than
or equals to), gt (greater than), gte (greater than or equals to)
<!--[if lt IE 6]>
Will be seen and parsed by IE 5.0 - IE 5.5
<![endif]-->
<!--[if gte IE 7]>
Will be seen and parsed by IE 7.0 or higher
<![endif]-->
1-2) Conditional content-revealing comments.
These blocks will be seen by all browsers but we can instruct IE do not
parse them. Unfortunately this syntax makes W3C Validator all upset
(UA's themselves do not care). This way content-revealing comments
cannot be advised for W3C-validating pages.
<![if !IE]>
Will be seen and parsed only by non-IE browsers
<![endif]>
2) Disabled styleshets.
<link rel="stylesheet" href="not_for_.css" disabled="true">
IE will not apply this stylesheet because of disabled attribute. Other
UA's (AFAIK) do not support neither understand neither planning to
implement this attribute.
3) Expression override
This can be used for small fixes inside the stylesheet itself:
#MyContainer {
/* for all: */
width: 200px;
/* for IE only: */
width: expression("200px");
}
P.S. It doesn't elimitate the possibility to find another bug in IE7 to
use it as a holly hack replacement. (Why?) For researches one can study
all selectors supported by IE7:
<http://msdn.microsoft.com/workshop/author/css/reference/css_ref_entry.asp>