- From: James Hopkins <james@idreamincode.co.uk>
- Date: Mon, 17 Nov 2008 11:52:31 +0000
- To: www-style@w3.org
Two 'advantages' of her proposal are; a) providing a fallback width if
appropriate, and b) works better with the cascade. The box-sizing
switch is integral to the particular selector block that it's declared
in, and authors are reliant on the switch taking place within these
style rules.
-- Providing a fallback width value --
I think being able to provide a fallback width is wholly unnecessary.
The most common use case for using the box-sizing switch I can
envisage is mixing width & padding/border value units; e.g 'width:100%
border-box;padding:50px;border:10px solid black;'. Using fantasai's
proposal, we could theoretically provide down-level clients with a
fallback width value (content-box) but in reality we couldn't emulate
such a layout based on the content-box model.
-- The Cascade --
Suppose one author writes a rule such as:-
.example{
width:100% border-box;
padding:50px;
border:10px solid black;
}
And a second author, importing that stylesheet writes a stronger rule
setting the width, expecting the content-box. In reality he would be
unable to use a percentage width and for the declaration to still be
usable in many contexts, as the resulting calculation would be (based
on 'width:99%;), '99% + 100px + 20px'.
Whereas if the 'box-sizing:border-box;' rule was declared in the first
authors stylesheet declaration, the border-box model would be
inherited and used in conjunction with the stronger width value, set
by the second author. This would mean that the second author could
realistically use the percentage unit for the stronger width value,
since the sum would be '99% - 100px - 20px'. He could now very easily
use '.example' beside other elements that are using the content-box
model.
-- Support --
There is support for the box-sizing property in all four major
browsers, although two (Firefox and Safari) still use their vendor
prefixes.
In conclusion, the box-model switch is a fundamental layout property
and I think it's not something we are able provide an appropriate
fallback for. I'd suggest that we just use the 'box-sizing' property
to activate a box-model switch.
------------------------------------------------------------------------------
fantasai wrote:
CSS's model of applying 'width' and 'height' to the content box instead
of the border box makes a lot of things difficult. The 'box-sizing'
property is able to solve that, but it doesn't interact very well with
the cascade. The 'calc()' function is able to solve that, but it also
doesn't interact very well with the cascade.
So I propose adding the keywords 'content-box' and 'border-box' to
'width'
and 'height', to be used in conjunction with a length or percentage. (If
specified, it overrides 'box-sizing'; otherwise 'box-sizing' is
honored.)
Like this:
width: border-box 50%;
or
width: 50% border-box;
The advantages are
- only affects this declaration, so if other width declarations
in the style sheet are expecting content-box sizing, they get
what they expect
- doesn't require me to hard-code border width and padding values
into the width declaration
- my width declaration is ignored by browsers that don't support
the box-sizing switch, so I can give a fallback width if that's
appropriate
~fantasai
Received on Monday, 17 November 2008 11:53:20 UTC