Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does *display mean in CSS? [duplicate]

Possible Duplicate:
What does a star-preceded property mean in CSS?

I came across this while browsing for cross-browser support for display: inline-block...

selector {
  display: -moz-inline-box;
  display: inline-block;
  zoom: 1;
  *display: inline;
}

What does *display do?

Link from: http://www.aarongloege.com/blog/web-development/css/cross-browser-inline-block/

like image 903
Jeff Avatar asked Apr 13 '11 19:04

Jeff


2 Answers

*property: value;

This is a hack, so I don't recommend that you use it. Styles represented like this are interpreted only by IE 7 and below, so other browsers ignore those styles completely.

It's non-standard (or valid) CSS, but it's sometimes used to beat IE into submission.

like image 165
Blender Avatar answered Sep 22 '22 23:09

Blender


as other have said this is a hack for IE7 and below

BUT this one, the example you've given is a specific hack so unlike a comment you've received I wouldn't recommend removing it yet.. you can move it or remove it after you read this and don't need it ;)

btw I agree -moz-inline-box is probably no longer necessary, it was for older versions of Firefox

selector {
  display: -moz-inline-box;
  display: inline-block;
  zoom: 1;
  *display: inline;
}

Is a specific hack to get IE6/7 to display a block level element as an inline-block. Although IE has supported inline-block since v5.5 it didn't do so natively on block-level elements

So in this case what you need to do is give the element "layout" (zoom: 1;) and feed it display: inline after that.

Now display:inline-block also gives an element layout so if you remove the display-inline rule to a separate ruleset (either in a conditional or a hacked rule) you no longer have to use zoom: 1;

My preferred hack for this (for demonstration purposes) & because inline-blocks are so dashed useful, & because it's shorter is

selector {
  display: inline-block;
}


selector {
  display: inline !ie7;
}

that !ie7 is doing the same as the * before the display property, it's feeding that rule to IE7 and below - you could use the * version in the second rule too, however the !ie7 makes it clear, to me anyway it's a hack, and who it's for.

If you have a specific, conditional style sheet for IE7 and below you can simply put the second rule in it - without any * or ie7 ;)

selector {
  display: inline;
}

because IE will still read the first ruleset and get it's hasLayout triggered to true by the inline-block in there, you don't need zoom

the quoted hack you mention is popular because it keeps all the parts in the one ruleset, but zoom:1 is needed in that case as inline-block won't work to set hasLayout if it's in the same ruleset as the other display property

like image 40
clairesuzy Avatar answered Sep 22 '22 23:09

clairesuzy