Where do the lost pixels go in a percent CSS layout? [duplicate]

If, for example, you’re using a % width, and the exact width should be 103.333px, then the browser must make a decision on how display that.

Different browsers make different decisions, read these links for more information:

I particularly like this explanation from John Resig/David Baron of why this is even a problem:

I was talking this over with some
Mozilla developers and David Baron
explained the situation quite well:

We’re trying to meet a bunch of
constraints that can’t all be
satisfied at the same time
(the proof
is left as an exercise to the reader,
though I may have actually written it
out once in a Bugzilla comment):

  1. 4 adjacent objects of width/height 25% (for example) starting at one edge
    of a container should end exactly at
    the other edge; there should never be
    an extra pixel in the container and
    they should never be wrapped due to
    being a pixel to wide

  2. objects that are logically adjacent should always touch visually; there
    should never be a pixel gap or a pixel
    of overlap due to rounding error

  3. objects given the same width should occupy the same number of pixels

  4. object boundaries should always (visually) be aliased to a specific
    pixel boundary in the display (they
    should never be blurred)

The one [Mozilla] sacrifices is
typically (3), except for borders
where we sacrifice (1) by rounding the
widths to pixel boundaries much
earlier.

See this question for a JavaScript fix that forces consistency:

Evenly distributed height of child elements with CSS

Another relevant question:

Are the decimal places in a CSS width respected?

Leave a Comment