[whatwg] Alignment of empty buttons

Ian Hickson ian at hixie.ch
Fri Jul 19 16:11:22 PDT 2013

On Thu, 25 Apr 2013, Christian Biesinger wrote:
> I had to recently investigate issues with the alignment of empty 
> buttons, i.e. <button></button>, and I noticed some browser differences.
> Specifically, take this testcase: 
> http://plexode.com/eval3/#s=aekVQXANJVQMbAx14Hz1PdQFcAYMbARIYUVkcAYYOfp8Zo6WFn6KkXphDVlVVUE+bnZ8aEawBsk8dEJaYmB11HwEdtLa4H8PNt08fA14A
> Where should the button be positioned relative to the input field (or if 
> you prefer, the baseline of the block)? Chrome dev, IE and Opera put the 
> bottom of the button a bit higher than the bottom of the input, whereas 
> Firefox seems to approximately center the button on the line (though 
> without using vertical-align:middle).
> Chrome stable puts the top of the button slightly below the top of the 
> input.
> Any suggestions for what the right behavior here is...? Note that this 
> isn't an entirely academic question, because websites do use empty 
> buttons (styling them with a width, height and background image).

On Thu, 25 Apr 2013, Boris Zbarsky wrote:
> The question you are really asking is "where is the baseline of the 
> button?", right?
> Gecko puts the baseline of the button at the baseline of the button's 
> text, and if the button is not auto-height the extra height is added (or 
> removed) equally from above and below the text.
> It looks like Chrome dev does the same unless there's no text in the 
> button, in which case they put the baseline at the bottom margin edge 
> (more inline-block-like behavior?).

On Thu, 25 Apr 2013, Christian Biesinger wrote:
> Hm, but I don't think that's completely correct, because then the 
> positioning should stay the same when I start entering text in the 
> button, right? Or does adding text make the text run have height, 
> affecting where the extra height gets added?
> I think what you are saying is: in Gecko, baseline of a button is 
> (content_box_height - text_height) / 2 + text_ascent

On Thu, 25 Apr 2013, Boris Zbarsky wrote:
> If I recall exactly how this code works, if there is no text then the 
> baseline goes at the bottom of the (empty) content box and then the 
> extra height is added on both sides.  Once you have text the baseline 
> goes on the baseline of the text, which is slightly above the bottom of 
> the content box to allow for descenders.

The spec claims that:

# When the button binding applies to a button element, the element is 
# expected to render as an 'inline-block' box rendered as a button whose 
# contents are the contents of the element.

What this means exactly...


I think the buttons and the divs in this example should basically have the 
same dimensions and positions (colours might differ). Nobody seems to 
quite agree, but I can't work out what they're doing exactly (or why). The 
spec seems like a pretty sane middle ground, though.

Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

More information about the whatwg mailing list