Slide 1
Slide 2
“Sorcerer's Apprentice
Fantasia” 1940
©
Disney•Pixar
. All rights reser ved.
Slide 3
“Sorcerer's Apprentice
Fantasia” 1940
©
Disney•Pixar
. All rights reser ved.
Slide 4
“Sorcerer's Apprentice
Fantasia” 1940
©
Disney•Pixar
. All rights reser ved.
Slide 5
“Sorcerer's Apprentice
Fantasia” 1940
©
Disney•Pixar
. All rights reser ved.
Slide 6
“Sorcerer's Apprentice
Fantasia” 1940
©
Disney•Pixar
. All rights reser ved.
Slide 7
“Sorcerer's Apprentice
Fantasia” 1940
©
Disney•Pixar
. All rights reser ved.
Slide 8
“Sorcerer's Apprentice
Fantasia” 1940
©
Disney•Pixar
. All rights reser ved.
Slide 9
“Sorcerer's Apprentice
Fantasia” 1940
©
Disney•Pixar
. All rights reser ved.
Slide 10
Slide 11
Compose
Paint
Layout
Style
DOM
Content
Parsing
Network
{the pipeline}
@
gregwhitworth
Slide 12
Compose
Paint
Layout
Style
DOM
Content
Parsing
Network
@
gregwhitworth
{the pipeline}
JS
Slide 13
JS
Input
Compose
Paint
Layout
Style
DOM
Content
Parsing
Network
@
gregwhitworth
{the pipeline}
Slide 14
Input
Compose
Paint
Layout
Style
DOM
Network
@
gregwhitworth
{the pipeline}
Content
Parsing
JS
Slide 15
{
parsing
}
Compose
Paint
Layout
Style
DOM
Content
Parsing
Network
YOU
ARE
HERE
Slide 16
.fancy
button
{
background
:
green
;
}
@
gregwhitworth
{style}
I found a selector!
Slide 17
.fancy
button
{
background
:
green
;
}
@
gregwhitworth
{style}
I found an opening curly brace!
Slide 18
.fancy
button
{
background
:
green
;
}
@
gregwhitworth
{style}
I found a property
Slide 19
.fancy
button
{
background
:
green
;
}
@
gregwhitworth
{style}
I found a colon!
Slide 20
.fancy
button
{
background
:
green
;
}
@
gregwhitworth
{style}
I found a value!
Slide 21
.fancy
button
{
background
:
green
;
}
@
gregwhitworth
{style}
I found a semi
colon!
Slide 22
.fancy
button
{
background
:
green
;
}
@
gregwhitworth
{style}
I found a closing curly brace!
Slide 23
.fancy
button
{
background
:
green
;
border
: 3px
solid red
;
font
size
: 1em;
}
@
gregwhitworth
{style}
Selector
.fancy
button
Slide 24
.fancy
button
{
background
:
green
;
border
: 3px
solid red
;
font
size
: 1em;
}
@
gregwhitworth
{style}
Selector
.fancy
button
Slide 25
.fancy
button
{
background
:
green
;
border
: 3px
solid red
;
font
size
: 1em;
}
@
gregwhitworth
{style}
Selector
Property
Value
.fancy
button
background
color
rgb
(0,255,0)
Slide 26
@
gregwhitworth
{style}
Selector
Property
Value
.fancy
button
background
color
rgb
(0,255,0)
.fancy
button
border
size
3px
.fancy
button
border
color
rgb
(255,0,0)
.fancy
button
border
style
solid
.fancy
button
{
background
:
green
;
border
: 3px
solid red
;
font
size
: 1em;
}
Slide 27
.fancy
button
{
background
:
green
;
border
: 3px
solid red
;
font
size
: 1em;
}
@
gregwhitworth
{style}
Selector
Property
Value
.fancy
button
background
color
rgb
(0,255,0)
.fancy
button
border
size
3px
.fancy
button
border
color
rgb
(255,0,0)
.fancy
button
border
style
solid
.fancy
button
font
size
1em
Slide 28
{
style
}
Compose
Paint
Layout
Style
DOM
Content
Parsing
Network
YOU
ARE
HERE
Slide 29
Slide 30
@
gregwhitworth
{style}
Declared:
What the author wrote
Value Types
width: 506.456789132456489787px
Slide 31
@
gregwhitworth
{style}
Specified:
Declared + defaults
Value Types
width:
auto
Slide 32
@
gregwhitworth
{style}
Computed:
Resolution of specified
Value Types
font
size:
1em
16px
Slide 33
@
gregwhitworth
{style}
Used:
Result of layout calculations
Value Types
width:
50%
300px
Slide 34
@
gregwhitworth
{style}
Actual:
UA specific adjustments
Value Types
width:
506.456789132456489787px
506.45px
Slide 35
Slide 36
DOM Tree
Collection of
styles
Collection of
styles
Collection of
styles
Matching
Algorithm
@
gregwhitworth
{style}
Slide 37
The User Agent should have
ever ything resolved except
what
requires
layout
@
gregwhitworth
{style}
Slide 38
width: 1in;
Before
After
@
gregwhitworth
{style}
width: 50%;
line
height:
calc
(10px + 2em);
border
color :
currentColor
;
height: 50vh;
width: 96px;
width: 50%;
line
height: 42px;
border
color :
rgb
(0,255,0);
height: 540px;
Slide 39
Slide 40
A score awarded to a selector
based on the count of tags,
classes, id’s, !important, &
attribute selectors used
@
gregwhitworth
{style}
Specificity
Slide 41
Inline styles win out over all
selectors unless an !important
was used
@
gregwhitworth
{style}
Specificity
Slide 42
•
!Important
•
Style Attribute
•
ID
•
Classes,
Psuedo
Classes,
attr
•
Elements &
Psuedo
Elements
@
gregwhitworth
{style}
Specificity
Slide 43
li
0 0 0 0 1
@
gregwhitworth
{style}
Slide 44
li
0 0 0 0 1
li.foo
0 0 0 1 1
@
gregwhitworth
{style}
Slide 45
li
0 0 0 0 1
li.foo
0 0 0 1 1
#comment
li.foo.bar
0 0 1 2 1
@
gregwhitworth
{style}
Slide 46
li
0 0 0 0 1
li.foo
0 0 0 1 1
#comment
li.foo.bar
0 0 1 2 1
<li style=“color : red”>
0 1 0 0 0
@
gregwhitworth
{style}
Slide 47
li
0 0 0 0 1
li.foo
0 0 0 1 1
#comment
li.foo.bar
0 0 1 2 1
<li style=“color : red”>
0 1 0 0 0
color : red !important
1 0 0 0 0
@
gregwhitworth
{style}
Slide 48
bit.ly/
css
short
selectors
@
gregwhitworth
{style}
“Keep your CSS selectors short”
by Harr y Roberts
Slide 49
An origin is what determines
where the stylesheet is placed
within the cascade
@
gregwhitworth
{style}
Style Origins
Slide 50
User Agent
Author
User
3 currently specified origins
@
gregwhitworth
{style}
:
Renders CSS
:
Web Developer
:
Person using site
Slide 51
- User
- Author
- User Agent
Ordering in the cascade
@
gregwhitworth
{style}
Slide 52
.fancy
button
{
background
:
green
;
border
: 3px
solid red
;
font
size
: 1em;
}
Origin
Selector
Property
Value
Specificity
Author
.fancy
button
background
color
rgb
(0,255,0)
0,0,0,1,0
Author
.fancy
button
border
style
Solid
0,0,0,1,0
Author
.fancy
button
border
size
3px
0,0,0,1,0
Author
.fancy
button
border
color
rgb
(255,0,0)
0,0,0,1,0
Author
.fancy
button
font
size
16px
0,0,0,1,0
Author
div .fancy
button
background
color
rgb
(255,255,0)
0,0,0,1,1
User
*
font
size
25px
1,0,0,0,0
div
.fancy
button
{
background
:
yellow
;
}
@
gregwhitworth
{style}
Slide 53
.fancy
button
{
background
:
green
;
border
: 3px
solid red
;
font
size
: 1em;
}
Origin
Selector
Property
Value
Specificity
User
*
font
size
25px
1,0,0,0,0
Author
.fancy
button
background
color
rgb
(0,255,0)
0,0,0,1,0
Author
.fancy
button
border
style
Solid
0,0,0,1,0
Author
.fancy
button
border
size
3px
0,0,0,1,0
Author
.fancy
button
border
color
rgb
(255,0,0)
0,0,0,1,0
Author
.fancy
button
font
size
16px
0,0,0,1,0
Author
div .fancy
button
background
color
rgb
(255,255,0)
0,0,0,1,1
div
.fancy
button
{
background
:
yellow
;
}
@
gregwhitworth
{style}
Slide 54
.fancy
button
{
background
:
green
;
border
: 3px
solid red
;
font
size
: 1em;
}
Origin
Selector
Property
Value
Specificity
User
*
font
size
25px
1,0,0,0,0
Author
div .fancy
button
background
color
rgb
(255,255,0)
0,0,0,1,1
Author
.fancy
button
background
color
rgb
(0,255,0)
0,0,0,1,0
Author
.fancy
button
border
style
Solid
0,0,0,1,0
Author
.fancy
button
border
size
3px
0,0,0,1,0
Author
.fancy
button
border
color
rgb
(255,0,0)
0,0,0,1,0
Author
.fancy
button
font
size
16px
0,0,0,1,0
div
.fancy
button
{
background
:
yellow
;
}
@
gregwhitworth
{style}
Slide 55
.fancy
button
{
background
:
green
;
border
: 3px
solid red
;
font
size
: 1em;
}
Origin
Selector
Property
Value
Specificity
User
*
font
size
25px
1,0,0,0,0
Author
div .fancy
button
background
color
rgb
(255,255,0)
0,0,0,1,1
Author
.fancy
button
background
color
rgb
(0,255,0)
0,0,0,1,0
Author
.fancy
button
border
style
Solid
0,0,0,1,0
Author
.fancy
button
border
size
3px
0,0,0,1,0
Author
.fancy
button
border
color
rgb
(255,0,0)
0,0,0,1,0
Author
.fancy
button
font
size
16px
0,0,0,1,0
div
.fancy
button
{
background
:
yellow
;
}
@
gregwhitworth
{style}
Slide 56
Property
Value
border
style
Solid
border
size
3px
border
color
rgb
(255,0,0)
background
color
rgb
(255,255,0)
font
size
25px
.fancy
button
@
gregwhitworth
{style}
Slide 57
@
gregwhitworth
{style}
#document
body
header
div
p
p
#document
body
header
div
- {
background: red
}
div p {
background: blue
}
p:last
of
type
{
background: orange
}
- {
background: red
}
div p
p:last
of
type
div p {
background: blue
}
- {
background: red
}
p:last
of
type
{
background: orange
}
div p {
background: blue
}
#document
body
header
div
p
p
p
p
Slide 58
{
layout
}
Compose
Paint
Layout
Style
DOM
Content
Parsing
Network
YOU
ARE
HERE
Slide 59
Slide 60
Block formatting context (BFC)
Floats, absolutely positioned elements, block
containers (such as inline
blocks, table
cells, and
table
captions) that are not block boxes, and block
boxes with 'overflow' other than 'visible' (except
when that value has been propagated to the
viewport) establish new block formatting contexts
for their contents.
@
gregwhitworth
{layout}
Slide 61
Block formatting context (BFC)
@
gregwhitworth
{layout}
Absolute
Positioned Box
This box creates a
new BFC
Slide 62
Containing block
The ancestor block that styles
are resolved against
@
gregwhitworth
{layout}
Slide 63
http://bit.ly/containing
block
@
gregwhitworth
{layout}
W3C CSS 2.2 Definition of
Containing Block
Slide 64
Containing Block
@
gregwhitworth
{layout}
position: fixed
Slide 65
Initial Containing block (ICB)
A rectangle that is computed
based on the top
most box or
page box.
@
gregwhitworth
{layout}
Slide 66
Initial Containing Block (ICB)
@
gregwhitworth
{layout}
The red dashed
box is the ICB
Slide 67
@
gregwhitworth
{layout}
LTR/RTL Writing Mode
INLINE
DIRECTION
INLINE
DIRECTION
Vertical Writing Mode
Slide 68
@
gregwhitworth
{layout}
LTR/RTL Writing Mode
BLOCK
DIRECTION
BLOCK
DIRECTION
Vertical Writing Mode
Slide 69
Slide 70
The flow
You move in document order
laying out each child in the
direction of the boxes
writing mode
@
gregwhitworth
{layout}
Slide 71
Float
@
gregwhitworth
{layout}
<body>
<div>
<p>
DOM Tree
float: left;
text
node
<p>
text
node
Slide 72
Float
@
gregwhitworth
{layout}
<body>
<div>
<p>
DOM Tree
float: left;
text
node
<p>
text
node
Slide 73
Float
@
gregwhitworth
{layout}
<body>
<div>
<p>
DOM Tree
float: left;
text
node
<p>
text
node
Slide 74
{
layout:
box
generation
}
Slide 75
For each element in the DOM
there will be 0 or more boxes
in the box tree
@
gregwhitworth
{layout}
Slide 76
Box Model
Padding Box
Content Box
Border Box
Margin Box
@
gregwhitworth
{layout}
Slide 77
<body>
<div>
<div>
DOM Tree
CSS Box
CSS Box
Box Tree
CSS Box
@
gregwhitworth
{layout}
Slide 78
<body>
<div>
<div>
visibility: hidden;
DOM Tree
@
gregwhitworth
{layout}
CSS Box
CSS Box
Box Tree
CSS Box
Slide 79
<body>
<div>
<div>
display: none;
DOM Tree
CSS Box
CSS Box
Box Tree
@
gregwhitworth
{layout}
Slide 80
<body>
<div>
<div>
DOM Tree
CSS Box
CSS Box
Box Tree
CSS Box
visibility: hidden;
@
gregwhitworth
{layout}
Slide 81
When necessar y, boxes will be
generated that are not in the
DOM, these are known as
anonymous boxes
@
gregwhitworth
{layout}
Slide 82
<body>
<div>
display: table
-
cell;
DOM Tree
CSS Box
Table Box
Box Tree
Table Grid
Box
CSS Box
@
gregwhitworth
{layout}
Slide 83
Slide 84
<body>
<p>
Hello World
</p>
</body>
HTML
CSS
body
{
width
: 50px;
}
Basic Example
@
gregwhitworth
{layout}
Slide 85
DOM Tree
Basic Example
<body>
<p>
width: 50px
text
node
Box Tree
CSS Box
CSS Box
Line Box
Line Box
Why are there 2 line boxes for
the 1 text node?
@
gregwhitworth
{layout}
Slide 86
Basic Example
Box Tree
CSS Box
width: 50px
@
gregwhitworth
{layout}
<body>
Slide 87
Basic Example
Box Tree
CSS Box
CSS Box
@
gregwhitworth
{layout}
<body>
<p>
Slide 88
Basic Example
Box Tree
CSS Box
CSS Box
Line Box
Hello
World
@
gregwhitworth
{layout}
<body>
<p>
Slide 89
Basic Example
Box Tree
CSS Box
CSS Box
Line Box
Hello
World
@
gregwhitworth
{layout}
<body>
<p>
Slide 90
Basic Example
Box Tree
CSS Box
CSS Box
Line Box
Hello
World
Line Box
@
gregwhitworth
{layout}
<body>
<p>
Slide 91
{
layout:
content
measure
}
Slide 92
When your your inline
dimensions depends on its
contents.
Shrink
to
fit Context
@
gregwhitworth
{layout}
Slide 93
Lorem ipsum dolor sit
amet
,
consectetur
ad
adipiscing
elit
.
Nullam
pellentesq
SHARE IT
@
gregwhitworth
{layout}
Slide 94
<article>
<button>
SHARE IT
</button>
<p>
Lorem ipsum dolor sit
amet
,
consectetur
adipiscing
elit
.
Nullam
pellentesq
</p>
</article>
HTML
CSS
article
{
min
-
width
: 400px;
max
-
width
: 800px;
background
:
rgb
(
191,191,191);
padding
: 5px;
}
button
{
float
:
left
;
background
:
orange
;
padding
: 3px 10px;
border
: 2px
solid
blue
;
margin
: 5px;
}
p
{
margin
: 0;
}
@
gregwhitworth
{layout}
Slide 95
DOM Tree
<article>
<button>
<p>
Box Tree
Text
node
Text
node
CSS Box
CSS Box
CSS Box
Line Box
LB
LB
LB
@
gregwhitworth
{layout}
Slide 96
min
width: 400px
max
width: 800px
padding: 5px
Box Tree
CSS Box
@
gregwhitworth
{layout}
<article>
Slide 97
Box Tree
CSS Box
CSS Box
Line Box
float: left
@
gregwhitworth
{layout}
<article>
<button>
Slide 98
Box Tree
CSS Box
Line Box
float: left
background: orange
padding: 3px 10px;
border: 2px solid blue;
margin: 5px;
@
gregwhitworth
{layout}
Slide 99
Box Tree
CSS Box
Line Box
SHARE IT
@
gregwhitworth
{layout}
Max Width
SHARE
IT
Min Width
115px
86px
Slide 100
Box Tree
CSS Box
CSS Box
Line Box
SHARE IT
@
gregwhitworth
{layout}
<article>
<button>
Slide 101
Box Tree
CSS Box
CSS Box
CSS Box
Line Box
Line Box
SHARE IT
@
gregwhitworth
{layout}
<article>
<button>
<p>
Slide 102
Box Tree
CSS Box
CSS Box
CSS Box
Line Box
Line Box
@
gregwhitworth
{layout}
Lorem ipsum dolor sit
SHARE IT
amet
,
consectetur
adi
<article>
<button>
<p>
Slide 103
Box Tree
CSS Box
CSS Box
CSS Box
Line Box
LB
LB
@
gregwhitworth
{layout}
Lorem ipsum dolor sit
amet
,
consectetur
SHARE IT
adipiscing
elit
.
Nullam
pell
<article>
<button>
<p>
Slide 104
Box Tree
CSS Box
CSS Box
CSS Box
Line Box
LB
LB
LB
@
gregwhitworth
{layout}
Lorem ipsum dolor sit
amet
,
consectetur
adipiscing
elit
.
Nullam
pellentesq
SHARE IT
<article>
<button>
<p>
Slide 105
{
layout:
fragmentation
}
Slide 106
A box
—
such as a page box,
column box, or region
—
that
contains a portion (or all) of a
fragmented flow.
Fragmentainer
@
gregwhitworth
{layout}
Slide 107
<body>
<div>
Lorem ipsum dolor sit
amet
,
consectetur
adipiscing
elit
.
Cras
nibh
orci
,
tincidunt
eget
enim
et,
pellentesque
condimentum
risus
.
Aenean
sollicitudin
risus
velit
,
quis
tempor
leo
malesuada
vel.
Donec
consequat
aliquet
mauris
.
Vestibulum
ante ipsum
primis
in
faucibus
</div>
</body>
HTML
CSS
div
{
columns
: 2;
column
-
fill
:
auto
;
height
: 300px;
}
@
gregwhitworth
{layout}
velit
,
quis
tempor
leo
malesuada
vel.
Donec
consequat
aliquet
mauris
.
Vestibulum
ante ipsum
primis
in
faucibus
Lorem ipsum dolor sit
amet
,
consectetur
adipiscing
elit
.
Cras
nibh
orci
,
tincidunt
eget
enim
et,
pellentesque
condimentum
risus
.
Aenean
sollicitudin
risus
Slide 108
@
gregwhitworth
{layout}
DOM Tree
<body>
<div>
Text
node
Box Tree
CSS Box
MultiCol
Box
CSS Box
LB
LB
LB
LB
LB
LB
CSS Box
LB
LB
LB
LB
LB
Slide 109
Box Tree
CSS Box
@
gregwhitworth
{layout}
<body>
Slide 110
Box Tree
CSS Box
MultiCol
Box
@
gregwhitworth
{layout}
<body>
<div>
columns: 2
column
-
fill: auto;
height: 300px
Slide 111
Box Tree
CSS Box
MultiCol
Box
CSS Box
@
gregwhitworth
{layout}
Fragmentainer
created
<body>
<div>
columns: 2
column
-
fill: auto;
height: 300px
Slide 112
Box Tree
CSS Box
MultiCol
Box
CSS Box
@
gregwhitworth
{layout}
Lorem ipsum dolor sit
amet
,
consectetur
adipiscing
elit
.
Cras
nibh
orci
,
tincidunt
eget
enim
et,
pellentesque
condimentum
risus
.
Aenean
sollicitudin
risus
LB
LB
LB
LB
LB
<body>
<div>
columns: 2
column
-
fill: auto;
height: 300px
Slide 113
Box Tree
CSS Box
MultiCol
Box
CSS Box
@
gregwhitworth
{layout}
LB
LB
LB
LB
LB
LB
CSS Box
<body>
<div>
Lorem ipsum dolor sit
amet
,
consectetur
adipiscing
elit
.
Cras
nibh
orci
,
tincidunt
eget
enim
et,
pellentesque
condimentum
risus
.
Aenean
sollicitudin
risus
columns: 2
column
-
fill: auto;
height: 300px
Slide 114
@
gregwhitworth
{layout}
velit
,
quis
tempor
leo
malesuada
vel.
Donec
consequat
aliquet
mauris
.
Vestibulum
ante ipsum
primis
in
faucibus
Box Tree
CSS Box
MultiCol
Box
CSS Box
columns: 2
column
fill: auto;
height: 300px
LB
LB
LB
LB
LB
LB
CSS Box
LB
LB
LB
LB
LB
<body>
<div>
Lorem ipsum dolor sit
amet
,
consectetur
adipiscing
elit
.
Cras
nibh
orci
,
tincidunt
eget
enim
et,
pellentesque
condimentum
risus
.
Aenean
sollicitudin
risus
Slide 115
{
paint
}
Compose
Paint
Layout
Style
DOM
Content
Parsing
Network
YOU
ARE
HERE
Slide 116
@
gregwhitworth
{paint}
SHARE IT
Slide 117
@
gregwhitworth
{paint}
Step 1: Paint the elements background
Slide 118
@
gregwhitworth
{paint}
Step 2: Paint the element’s border
Slide 119
@
gregwhitworth
{paint}
Step 3: Paint the element’s content
Slide 120
@
gregwhitworth
{paint}
SHARE IT
Slide 121
Stacking Context (SC)
The order in which the
rendering tree is painted onto
the canvas is described by
stacking contexts
@
gregwhitworth
{paint}
Slide 122
Stacking Context (SC)
Stacking context layers
Actually it
sort of does
though?
@
gregwhitworth
{paint}
Slide 123
Stacking Context (SC)
¯
(
ツ
)/¯
@
gregwhitworth
{paint}
Slide 124
@
gregwhitworth
{paint}
<body>
<div
id=
"one"
>
Item 1
</div>
<div
id=
"two"
>
Item 2
</div>
</body>
HTML
CSS
div {
width
: 300px;
height
: 300px;
position
:
absolute
;
background
:
blue
;
z
-
index
: 2;
}
#two {
background
:
green
;
z
-
index
: 1;
}
Slide 125
Box Tree
CSS Box
CSS Box
CSS Box
Line Box
@
gregwhitworth
{paint}
Line Box
Item 1
Root Stacking Context
Stacking Context
<body>
<div>
<div>
z
-
index: 2;
z
-
index: 1;
Slide 126
Box Tree
CSS Box
CSS Box
CSS Box
Line Box
@
gregwhitworth
{paint}
Line Box
Root Stacking Context
Stacking Context
z
index: 2;
z
index: 1;
<body>
<div>
<div>
Slide 127
Box Tree
CSS Box
CSS Box
CSS Box
Line Box
@
gregwhitworth
{paint}
Line Box
Root Stacking Context
Stacking Context
z
index: 2;
z
index: 1;
<body>
<div>
<div>
Slide 128
Box Tree
CSS Box
CSS Box
CSS Box
Line Box
@
gregwhitworth
{paint}
Line Box
Root Stacking Context
Item 2
Stacking Context
z
index: 2;
z
index: 1;
<body>
<div>
<div>
Slide 129
Box Tree
CSS Box
CSS Box
CSS Box
Line Box
@
gregwhitworth
{paint}
Line Box
Root Stacking Context
Item 2
Stacking Context
z
index: 2;
z
index: 1;
<body>
<div>
<div>
Slide 130
Box Tree
CSS Box
CSS Box
CSS Box
Line Box
@
gregwhitworth
{paint}
Line Box
Root Stacking Context
Item 1
Stacking Context
z
index: 2;
z
index: 1;
<body>
<div>
<div>
Slide 131
Slide 132
<div></div>
HTML
CSS
div
{
width
: 400px;
height
: 400px;
background
:
red
;
box
-
shadow:
black
20px
20px
;
}
@
gregwhitworth
{paint}
Slide 133
Box Tree
CSS Box
width: 400px
height: 400px
box
shadow: black 20px
20px
Display Node
Disp
Node
width: 420px
height: 420px
420px
420px
@
gregwhitworth
{paint}
Slide 134
{
compose
}
Compose
Paint
Layout
Style
DOM
Content
Parsing
Network
YOU
ARE
HERE
Slide 135
@
gregwhitworth
{compose}
Large Heading
Slide 136
@
gregwhitworth
{paint}
<div
class=
"
clippy
"
>
</div>
HTML
CSS
.
clippy
{
width
: 100px;
height
: 100px;
animation
:
pulse
1s
infinite
;
background
:
green
;
}
@
keyframes
pulse {
from
{
transform
: scale(1, 1);
}
to
{
transform
: scale(2, 2)
}
}
Slide 137
@
gregwhitworth
{compose}
Large Heading
Root Composite Layer
Slide 138
@
gregwhitworth
{compose}
Large Heading
Slide 139
@
gregwhitworth
{compose}
Large Heading
Slide 140
{
invalidation
}
Compose
DOM
Content
Parsing
Network
Style
Layout
Paint
JS
Input
Slide 141
@
gregwhitworth
{invalidation}
SHARE IT
CSS
button {
float
:
left;
background
:
orange
;
padding
: 3px 10px;
border
: 2px
solid blue
;
}
button
:hover
{
background
:
green
;
color
:
white
;
}
Slide 142
@
gregwhitworth
{invalidation}
Hit Testing
Algorithm
Mouse
movement
Box Tree
button:hover
SHARE IT
Compose
Slide 143
@
gregwhitworth
{invalidation}
Mouse move
Compose
Paint
Layout
Style
DOM
Content
Parsing
Network
Hit Testing
Algorithm
Slide 144
@
gregwhitworth
{layout}
Modifying the box model on :hover
Slide 145
@
gregwhitworth
{layout}
Not
modifying the box model on :hover
Slide 146
@
gregwhitworth
{invalidation}
Slide 147
@
gregwhitworth
{paint}
var
moved
= 0;
var
tooFar
= 500;
function move(el) {
if(
moved
<=
tooFar
)
moved
++;
el.style.marginLeft
= moved +
"
px
";
}
JS
Slide 148
@
gregwhitworth
{invalidation}
Compose
Paint
Layout
Style
DOM
Content
Parsing
Network
JS
Slide 149
@
gregwhitworth
{paint}
#move {
width
: 300px;
height
: 300px;
background
:
blue
;
animation
:
move
1s;
}
@
keyframes
{
to {
transform
:
translateX
(500px);
}
}
CSS
Slide 150
@
gregwhitworth
{invalidation}
Compose
Paint
Layout
Style
DOM
Content
Parsing
Network
Slide 151
{
take
aways
}
@
gregwhitworth
{take
aways
}
Slide 152
@
gregwhitworth
{take
aways
}
•
Audit your CSS at least twice a year
•
Remove unused CSS or redundant
styles
•
!important should be a sign that it may
be time for a CSS refactor
Slide 153
@
gregwhitworth
{take
aways
}
•
Try and keep DOM structure as flat as
possible
•
Try and use simple selectors (
eg
: ID,
classes, tags)
•
Limit Layout thrashing
Slide 154
@
gregwhitworth
{take
aways
}
•
Make display only invalidations (layout
is computationally heavy)
•
Elicit feedback on the way you solved
the solution
Slide 155