Consider the following html/css:
<style>
span
{
display:inline-block;
width:5em;
height:5em;
padding:1em;
}
</style>
a
<span style="background-color:blue;">b</span>
<span style="background-color:green;"></span>
<span style="background-color:red;">c</span>
d
The blue and red boxes, plus the text both inside and surrounding the boxes lines up horizontally. The empty green box does not; it appears above the other two boxes. If I add some text to the green box, this behavior stops and everything lines up the way I want it to.
This happens consistently in IE8 (standards mode), FireFox 3.0 and Chrome, so I'm assuming there is some property of empty inline-block elements that I don't understand.
I can make the boxes line up by specifying a vertical-align property, but then the four text values are no longer aligned. Any thoughts? I'm stumped on this one.
Give the span top alignment then negative margin equal to your padding, and you don't need the non-breaking space hack.
span
{
display:inline-block;
width:5em;
height:5em;
padding:1em;
vertical-align:top;
margin-top: -1em;
}
a
<span style="background-color:blue;">b</span>
<span style="background-color:green;"></span>
<span style="background-color:red;">c</span>
d
Just in case still helps someone, another solution, enforcing to have some space from CSS:
span:empty:before {
content: "\0020";
display: inline-block;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With