What does a star-preceded property mean in CSS?

This is the "star property hack" along the same lines as the "underscore hack." It includes junk before the property that IE ignores (the * works up to IE 7, the _ up to IE 6).


In CSS? Nothing; it is an error.

Due to bugs in some versions of Internet Explorer, they won't correctly ignore the invalid property name, so this is one way of providing CSS that is specific to those browsers.

Using conditional comments is clearer and safer though.


The asteriks character is a valid wildcard in CSS. Use of it alone means the following CSS properties will be used against all element nodes in the DOM. Example:

*{color:#000;}

The above property will be applied to all DOM elements, thereby defeating the natural cascading in CSS. It can only be overridden by specifically tageting DOM elements where that targeting begins a unique identifier reference. Example:

#uniqueValue div strong{color:#f00;}

The above property will override the wildcard and make the text of all strong elements that occur in a div inside an element with an id attribute value of "uniqueValue".

Using a universally applied wildcard, such as the first example, can be a quick and dirty method for writing a reset stylesheet. It is quick and dirty because granular definition of presentation after the wildcard will likely create an extremely bloated stylesheet. If you are going to use the wildcard I would suggest using it more specifically, such as:

* strong{color:#f00;}

The above example will make the text of all strong elements color red regardless of other CSS properties not specified with a unique identifier. This is considered much safer than using the "!important" declaration as that declaration is known to cause interference with natural functionality of the intended behaviors and is a maintanence nightmare.

The asteriks in your example are in the wrong place as they seem to occur inside the property declarations, the code that goes inside curly braces, and that will likely cause an error.


This is a hack for IE7.

If you write this:

.test {
    z-index: 1;
    *z-index: 2;
}

on all navigator which respect the W3C Standard <div class="test"></div> HTMLElement have a z-index: 1 but for IE7, this element have a z-index: 2.

This is not standard.

To achieve same thing with W3C Standard, follow this steps:

  • Add some Internet Explorer Conditional Comment (this is a simple HTML Comment for all other navigateur so, it's a standard way).

    <!--[if IE 7]><html lang="fr" class="ie7"><![endif]-->

    <!--[if gt IE 7]><!--><html lang="fr"><!--<![endif]-->

And use the previous rules like this:

.test {
    z-index: 1;
}
.ie7 .test {
    z-index: 2;
}