Rendering Pipeline CSS OM View

Style compute Layout geometry Paint draw Composite GPU Display
StageInputOutput
StyleDOM + CSSOMRender tree with computed styles
LayoutRender treeBox positions and dimensions
PaintLayout treePaint records (draw commands)
CompositeLayersFinal pixels on screen

Layout Box Model

margin border padding content width
PropertyDefaultAffects
box-sizingcontent-boxwidth/height calculation
displayelement-dependentbox type (block/inline)
positionstaticlayout flow
widthautocontent box width
heightautocontent box height

Paint Drawing Order

1. Background color 2. Background image 3. Border 4. Children 5. Outline
PropertyCreates LayerTriggers Paint
colorNoYes
backgroundNoYes
box-shadowNoYes
border-radiusNoYes
visibilityNoYes

Composite GPU Layers

Layer 1 (root) Layer 2 Layer 3 (GPU) GPU
PropertyCreates Compositor Layer
transformYes (3D or will-change)
opacityYes (when animated)
will-changeYes (hints to browser)
filterYes
position: fixedYes (in most browsers)

Reflow vs Repaint Performance

REFLOW Layout Paint Composite REPAINT Paint Composite expensive moderate
TriggerReflowRepaint
width, heightYesYes
margin, paddingYesYes
top, left (positioned)YesYes
font-sizeYesYes
color, backgroundNoYes
transformNoNo (composite only)
opacityNoNo (composite only)

GPU Acceleration Composite Only

/* Promote to compositor layer */
.animated {
  will-change: transform;
  transform: translateZ(0);  /* hack */
}

/* Fast properties (composite only) */
transform: translate(x, y);
transform: scale(n);
transform: rotate(deg);
opacity: 0..1;
PropertyWhy Fast
transformGPU handles matrix math, no reflow
opacityAlpha blending on GPU, no repaint
filterGPU shader processing

Frame Budget 60fps Target

0ms 16.67ms 33.33ms JS Style Layout Paint Comp
Target FPSFrame BudgetPractical Budget
60 fps16.67 ms~10 ms (browser overhead)
120 fps8.33 ms~6 ms
30 fps33.33 ms~28 ms

Viewport Defaults CSS Device Adaptation

<meta name="viewport" content="width=device-width, initial-scale=1.0">
PropertyDefaultDescription
width980px (mobile)Viewport width in pixels or device-width
heightautoViewport height
initial-scalecalculatedInitial zoom level (1.0 = 100%)
minimum-scale0.1Minimum zoom allowed
maximum-scale10Maximum zoom allowed
user-scalableyesAllow pinch-to-zoom