There was some discussion last summer about changing the generally accepted best practice implementation of
box-sizing in CSS. Something about it didn’t quite sit well with me when I saw it, but I didn’t really suss out what it was until I started on a book project (more on that later).
The previously accepted practice was proposed in a blog post by Paul Irish (the post has been updated so I’ve duplicated the code in a slightly modernized format (no browser prefixes) below).
The latest accepted practice is:
The main benefit of the latest practice is that you can have an entire widget (or component) that uses a different
box-sizing model easily. This makes sense if you have to do it a lot, but in my experience this change to standard behavior is not needed very often. The
box-sizing will only apply to
block-ish elements and it’s not terribly difficult to override the
box-sizing in your CSS exactly where you need it (you can even create a
@extend-only selector). However, if a developer on the project sets
box-sizing higher up in your DOM without anyone realizing it, then the style would cascade throughout many elements via the inherit and is likely to break the layout – possibly in difficult to debug ways.
There are certain styles that you expect to be automatically inherited (mostly font-related). You don’t expect something like
box-sizing to be inherited and that’s where the surprise comes in. We should always be working to minimize surprises in our work and I don’t think that inheriting
box-sizing does that. Sometimes a little surprise is acceptable for a bigger gain, but inherited
box-sizing doesn’t provide enough gain.
Aside: I much prefer the name “Principle of Least Surprise” to “Principle of Least Astonishment” http://en.wikipedia.org/wiki/Principle_of_least_astonishment.