I have an element with display: inline-block, but it doesn't seem to accept margin-top. Is this because the element is still treated as an inline element?
If yes, does anyone have a workaround?
EDIT #1:
My CSS is quite simple:
.label {
background: #ffffff;
display: inline-block;
margin-top: -2px;
padding: 7px 7px 5px;
}
I ended up wrapping the content in another div and giving that a margin-top. But that causes a lot of extra markup and makes my code less clear.
EDIT #2:
margin-top
& margin-bottom
on inline-block
elements only seems to work with positive values.
You can try
vertical-align
like this:I made an example on jsfiddle: http://jsfiddle.net/zmmbreeze/X6BjK/.
But vertical-align not work well on IE6/7. And there is a opera(11.64) rendering bug.
So I recommend to use
position:relative
instead.you can also try replacing the negative margin with
in addition to the rest of your
.label
styleThat is indeed the case. Instead of a margin, you could use a padding. Another solution would be to use a container div for the element. You make that div
inline-block
, and make your current element a block inside that container. Then, you can give a margin to your element.It would help if you got a concrete example, preferably in jsfiddle.net or so. It would help answers to be more specific too, instead of containing just general descriptions like mine here. ;)
I used
display: table
. It has the content-fitting properties of inline-block but also supports negative margins in a way that will shift the content following it up along with it. Probably not how you should be using it, but it works.