CSS takes a source document organized as a tree of elements… and text nodes… and renders it onto a canvas such as your screen.
The document canvas is the infinite surface over which the document is rendered.
width
/height
direction
[demo link]writing mode
[demo link]width
-> inline-size
height
-> block-size
top
-> block-start
bottom
-> block-end
left
-> inline-start
right
-> inline-end
margin-right
with margin-inline-end
margin-block
, padding-inline
, border-block
input {
margin-inline-end: 1em;
margin-left: 0;
}
…A tree of elements… and text nodes…
display
property
Box Generation Values
display
propertyDisplay:none;
(head/style) removes box & subtreeDisplay:contents;
(figure?) removes boxDisplay:list-item;
(li) generates a second ::marker
boxList-style-position
moves ::marker
in or out of primary boxdisplay: list-item
Adds Marker Box
list-item
display::marker
boxdisplay: none
Removes Box Tree
display: contents
Removes Box
div
s when doing layoutMostly based on formatting contexts
display
)display
primarily inside and outside modes
display
creates
Inner Formatting Context
display
sets
Outer Flow Behavior
display:
flow
| flow-root
block
➡️ block flow
inline
➡️ inline flow
display
display
property
Outer Display Values
inline
or block
display: inline-block
,line-height
propertyinline-size
block-size
line-height
block-size
Including %
and other ‘relative’ units
min-content
| max-content
| fit-content
inline
/block
…
Often Ignored
Only used in normal flow!
grid
inline
or block
, just a ‘grid item’float
or absolute position overrides inline/blockinline
element is ‘blockified’display
, position
, and float
Parent context can override
inline
& inline-*
➡️ block
& *
display
…
Flex, Grid, Table-*, Flow
block
➡️ block flow
inline
➡️ inline flow
grid
➡️ block grid
flex
➡️ block flex
table
➡️ block table
block
outer valueinline-grid
➡️ inline grid
inline-flex
➡️ inline flex
inline-block
➡️ inline flow-root
inline-block
is the most common option,overflow: hidden;
“A mini layout in your layout”…
overflow: hidden
block
» block flow
flow-root
» block flow-root
inline
» inline flow
flex
» block flex
grid
» block grid
list-item
» block flow list-item
inline-block
» inline flow-root
inline-flex
» inline flex
inline-grid
» inline grid
box-sizing
property…
Selects Box Edge for Sizing
content-box
modelborder-box
model/* initial value: content-box */
* { box-sizing: border-box; }
/* optional… */
/* ::before, ::after {
box-sizing: border-box;
} */
content-box
Is Still Useful
.container {
inline-size: calc(34em + (var(--padding) * 2));
}
content-box
sizing instead…Concise, but expressive