When adapting a layout for different viewport widths (a.k.a. responsive design) or media (like print), it’s common to reset any
Unfloating a floated element is as simple as specifying
The initial width of a block level element like
‘margin-left’ + ‘border-left-width’ + ‘padding-left’ + ‘width’ + ‘padding-right’ + ‘border-right-width’ + ‘margin-right’ = width of containing block
As long as the value of
On the other hand, if you specify
To visualize the difference, see below example.
So, next time you find yourself setting the width of a block level element to
float and width values on major layout blocks to linearize their display.Unfloating a floated element is as simple as specifying
float:none. Width doesn’t seem to be quite as straightforward – lately I’ve come across several cases where people use width:100% to undo explicitly specified widths when they should be using width:auto instead. So here’s a brief explanation of the difference.The initial width of a block level element like
div or p is auto. This makes it expand to occupy all available horizontal space within its containing block. If it has any horizontal padding or border, the widths of those do not add to the total width of the element. Here’s the CSS 2.1 specification’s formula for block-level, non-replaced elements in normal flow:‘margin-left’ + ‘border-left-width’ + ‘padding-left’ + ‘width’ + ‘padding-right’ + ‘border-right-width’ + ‘margin-right’ = width of containing block
As long as the value of
width is auto, the element can have horizontal margin, padding and border without becoming wider than its container (unless of course the sum of margin-left + border-left-width + padding-left + padding-right + border-right-width + margin-right is larger than the container). The width of its content box will be whatever is left when the margin, padding and border have been subtracted from the container’s width.On the other hand, if you specify
width:100%, the element’s total width will be 100% of its containing block plus any horizontal margin, padding and border (unless you’ve used box-sizing:border-box, in which case only margins are added to the 100% to change how its total width is calculated). This may be what you want, but most likely it isn’t.To visualize the difference, see below example.
So, next time you find yourself setting the width of a block level element to
100% to make it occupy all available width, consider if what you really want is setting it to auto. In most cases it is, and doing so will save you from wondering why the element doesn’t fit inside its container when you give it a horizontal padding or border later on.
No comments:
Post a Comment