CSS3 box-sizing: margin-box; Why not?
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;
.
Solution 1:
Couldn't you use width: calc(50% - 24px);
for your cols? Then set your margins.
Solution 2:
I think we could have a box-sizing: margin-box
. The css box model shows exactly, what are the positions of the margins of the frames.
There are minor problems - for example, the margin boxes can overlap - but they aren't hard to solve.
I think, the situation is the same, as we can see with the overflow-x
& overflow-y
combinations, with the absolut positionied divs in table-cells, with the combination of min|max-width|height with the box-sizing, and so on.
There are features, really simple features, which the browser developers simply doesn't develop.
IMHO, box-sizing: margin-box
were a very useful feature. Another useful feature were the box-sizing: padding-box
, it exists at least in the standard, but it wasn't implemented in any of the major browsers. Not even in the newest chrome!
Note: @Oriol 's comment: Firefox did implement box-sizing: padding-box. But others didn't, and it was removed from the spec. Firefox will remove it in version 50. Sad.