Why don't we have box-sizing: margin-box;
? Usually when we put box-sizing: border-box;
in our style sheets we really mean the former.
Example:
Let's say I have a 2 column page layout. Both columns have a width of 50%, but they look kind of ugly because there's no gutter (gap in the middle); Below is the CSS:
.col2 {
width: 50%;
float: left;
}
To apply a gutter you might think we could just set a right margin on the first of the 2 columns; something like this:
.col2:first-child {
margin-right: 24px;
}
But this would make the second column wrap onto a new line, because the following is true:
50% + 50% + 24px > 100%
box-sizing: margin-box;
would solve this issue by including margin in the calculated width of the element. I would find this very useful if not more useful than box-sizing: border-box;
.
The guy at the top is asking about adding margin to the overall width, including padding and border. The thing is, margin is applied outside the box and padding and border aren't, when using
border-box
.I have tried to achieve the
border-margin
idea. What I have found is that if using margin you can either add a class of.last
to the last item (with margin, then apply a margin of zero, or use:last-child/:last-of-type
). Or add equal margins all the way around (similar to the padding version above).See examples here: http://codepen.io/mofeenster/pen/Anidc
border-box
calculates the width of the element + its padding + its border as the total width. So if you have 2div
s which are 50% wide, they will be adjacent. If you add8px
padding to them, then you will have a gutter of16px
. Combine that with a wrapping element - which also has padding of8px
- you will have a nicely laid out grid with equal gutters all the way around.See this example here: http://codepen.io/mofeenster/pen/vGgje
The latter is my favourite method.
This is because the box-sizing attribute refers to the size of an element after computing the given dimension-specific values (padding, borders). "box-sizing: border-box" sets the height/width of an element and takes into consideration the padding as well as the border width. The scope of an element's margin is greater than the element itself, meaning it modifies the flow of the page and its surrounding elements, therefore directly altering the way the element fits within its parent relative to its sibling elements. Ultimately a "margin-box" attribute value would cause major problems and is essentially the same as setting the elements height/width directly.