/* a 'declaration' */
width: 500px;
width
: 500px;
text-wrap:
pretty
;
width:
500px
;
content-box
modelborder-box
modelinline-size:
500px
;
width
we care about exactly,inline-size:
45em
;
width:
min-content
;
width:
max-content
;
width:
100%
;
width:
90vw
;
width:
80cqi
;
width:
min(45em, 100%)
;
Graphic design of unknown content with unknown collaborators, on an infinite and unknowable canvas, across operating systems, interfaces, languages, and writing modes…
— me
There are too many variables to consider. The point of CSS is to make it so you don’t have to worry about them all.
— Keith J Grant
width:
auto
;
The fact we can control a paper page is really a limitation of that medium.
— John Allsopp, A Dao of Web Design
It takes craft to set up the circumstances that are simple and yet contain the ambiguities and the incongruity of human experience.
— Anne Bogart
500px
wide)16px
!= 1em
1em
sometimes gives the same result as 16px
flex
!= grid
Mostly based on formatting contexts
display
properties…demo:
span
with text & outlinewidth
height
display: block
display
of the element…body { display: flex; }
display: block
width
to be largefloat
body
display
valueposition: fixed | absolute
)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
Including %
and other ‘relative’ units
min-content
|max-content
| fit-content
box-sizing
property…
Selects Box Edge for Sizing
* { box-sizing: border-box; }
/* ::before, ::after {
box-sizing: border-box;
} */
content-box
box-sizing: border-box
on all elementsDisplay: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
property
Box Generation Values
display
propertydisplay: none
Removes Box Tree
display: contents
Removes Box
div
s when doing layoutdisplay: list-item
Adds Marker Box
list-item
keyword::marker
boxinline
or block
display
propInline
or block
flow
layoutwriting mode
[demo link]inline
axis is not always the width
direction
[demo link]line-height
(initial normal
from font metrics)inline layout
block-size
look down to children…
inline-size
look up to parents…
width
-> inline-size
height
-> block-size
top
-> block-start
bottom
-> block-end
left
-> inline-start
right
-> inline-end
margin-right
-> margin-inline-end
margin-block
, padding-inline
, border-block
input {
margin-inline-end: 1em;
margin-left: 0;
}
display
(inline or block)…
Often Ignored
(especially display: inline
)
grid
flowinline
or block
are ignoreddisplay
…
Flex, Grid, Table-*, Flow
block
display: flex
display:
block
flex;
grid
» block
grid
initial
| auto
| none
| <grow>
Initial
Shrink, If Necessary
Same as 0 1 auto
Auto
Shrink or Grow
Same as 1 1 auto
None
Don’t Flex
Same as 0 0 auto
<grow>
Share Space Equally
Same as <grow> 1 0
display
…
Flex, Grid, Table-*, Flow
Flow
is our default inner display valuedisplay: block
display: block
flow
;
inline
» inline
flow
overflow: hidden;
display
…
Flow & Flow-Root
flow
or flow-root
“A mini layout in your layout”…
overflow: hidden
inline-block
inline-flex
, inline-grid
, inline-block
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
display: list-item
display:
block flow
list-item;
list-item
display
…
List-Item
::marker
to style markerslist-style-position
to move marker boxoverflow-x
/-y
| overflow-inline
/-block
Acts like auto
when single-axis
padding-box
edgepadding-box
+ overflow-clip-margin
edge(usually auto…)
clip
| ellipsis
break-word
| anywhere
distributing extra space
start
| center
| end
stretch
| space-between
| space-around
| space-evenly
What boxes are we positioning?
Which axis are we manipulating?
justify-*
props apply to the ‘main’ axisalign-*
props apply to the ‘cross’ axisContent, items, & self – on either axis
align-content
onlyjustify
an individual item,safe
| unsafe
baseline
| first
baseline
| last
baseline
[demo] change to use intrinsic sizes