Key Concepts
CSS Specificity and Inheritancepass those traits please
- w3 explanation as per CSS 2.1 specs http://www.w3.org/TR/CSS2/cascade.html
- Specificity Explained In Plain Ol' English: courtesy of Andy Clarke http://www.stuffandnonsense.co.uk/archives/css_specificity_wars.html
The beauty of CSS is that we can take full control of our presentation through Inheritance and the Cascade. Think of the Cascade as a waterfall. Water by nature is fault tolerant. That means if you divert the rushing water with an obect, the water will make a new path around that object. You may also compare this to traits associated with creatures in the wild. Certain lizards can regenerate a new tail -or section of- upon a deadly mishap/encounter. The water and lizard adapt and so does this language called CSS.
* If any value is considered invalid (as unsupported values must be), CSS requires that the entire declaration be ignored.
for example if the following declaration has an unknown CSS selector, the entire declaration along with the properties styled will be ignored ex. ) img[src], ul > li {...ignored-styles...}
The Box Model:
online documentation : http://www.w3.org/TR/CSS21/box.html#box-dimensions
Either you love it or hate it, but the content-box model is here to stay. Good news though is that we designers can now change what the box model will do for us instead of us working for it. Box-sizing has received some attention and current CSS3 specs allow the box to be sized as we would like with our trusty old CSS style sheets.
Current standards of the W3 is the content-box model which calculates the total width of a box by the size of the width declared in the style sheet declaration + padding + border + margin that gives us the total block width.
#box1-content {
width: 200px;
padding: 10px;
background-color: red;
}
Total width= 220px:
Content=200px:
Content–Box–Model (current implication by W3C and all major browser vendors)
Believe it or not box-sizing
is not inherited. For example
body { -moz-box-sizing: border-box; }
will not be inherited by other block level elements.
#box2-border {
-moz-box-sizing: border-box;
width: 200px;
padding: 10px;
background-color: red;
}
Total width=200px;
Content =180px:
Border–Box–Model
As you will see the border-box measures the total width edge to edge and subtracts the padding, border and margin to give us the width of the content inside and not the other way around like the content-box does for us.
Margin Collapsing
W3 documentation : http://www.w3.org/TR/CSS21/box.html#collapsing-margins
Top and bottom margins of blocks are sometimes combined (collapsed) into a single margin whose size is the largest of the margins combined into it, a behavior known as margin collapsing.
For example:
#section1 { margin: 1.5em 0 1.5em; } /* top, right/left, bottom */
#section2 { margin: 2.5em 0 1.5em; } /* top, right/left, bottom */
( The winnning margin where the two sections separate is 2.5em because it is the largest value ).
* Margin collapsing occurs in three basic cases
Adjacent Siblings
The margins of adjacent siblings are collapsed (except when the later sibling needs to be cleared past floats). For example:
<p>The bottom margin of this paragraph is collapsed...</p> <p>...with the top margin of this paragraph.<p>
Parent and first/last child
If there is no border, padding, inline content, or clearance to separate the margin-top of a block with the margin-top of its first child block, or no border, padding, inline content, height, min-height, or max-height to separate the margin-bottom of a block with the margin-bottom of its last child, then those margins collapse. The collapsed margin ends up outside the parent.
Empty Blocks
If there is no border, padding, inline content, height, or min-height to separate a block's margin-top from its margin-bottom, then its top and bottom margins collapse.
More complex margin collapsing (of more than two margins) occurs when these cases are combined.
These rules apply even to margins that are zero, so the margin of a first/last child ends up outside its parent (according to the rules above) whether or not the parent's margin is zero.
When negative margins are involved, the size of the collapsed margin is the sum of the largest positive margin and the smallest (most negative) negative margin.
Margins of floating and absolutely positioned elements never collapse.