| CARVIEW |
Select Language
HTTP/2 301
server: GitHub.com
content-type: text/html
location: https://thomaswilburn.github.io/viz-book/
x-github-request-id: 194D:370DC9:2F419A:375923:696E2F2C
accept-ranges: bytes
age: 0
date: Mon, 19 Jan 2026 13:18:36 GMT
via: 1.1 varnish
x-served-by: cache-bom-vanm7210032-BOM
x-cache: MISS
x-cache-hits: 0
x-timer: S1768828717.561399,VS0,VE214
vary: Accept-Encoding
x-fastly-request-id: 79f185a8ba13c1f6c81d256de3ee9d8b0947932f
content-length: 162
HTTP/2 200
server: GitHub.com
content-type: text/html; charset=utf-8
last-modified: Thu, 19 Sep 2024 20:59:16 GMT
access-control-allow-origin: *
etag: W/"66ec90a4-1611"
expires: Mon, 19 Jan 2026 13:28:36 GMT
cache-control: max-age=600
content-encoding: gzip
x-proxy-cache: MISS
x-github-request-id: AC49:36C382:2ED3DB:36EBF9:696E2F2B
accept-ranges: bytes
age: 0
date: Mon, 19 Jan 2026 13:18:37 GMT
via: 1.1 varnish
x-served-by: cache-bom-vanm7210032-BOM
x-cache: MISS
x-cache-hits: 0
x-timer: S1768828717.788713,VS0,VE415
vary: Accept-Encoding
x-fastly-request-id: 700c90f77b6983c211645c14d7e9b81cd4dc6c39
content-length: 1791
The Elegant Selection
The Elegant Selection
Building news graphics and data visualizations for the modern web
Table of Contents
- Introduction
- How to read this book
-
Writing Less JavaScript
-
jQuery in Vanilla JavaScript
Selecting and iterating in the DOM | Events at a distance | A toast to John Resig
-
Scaling time and space
Sparklines from normal data | Timing and easing | The new face of zero and one
-
Combining data with the DOM
Transforming data into HTML | Closures for storage | Cheaper events with lookup tables
-
Client Rects and Scroll Effects
Efficient scroll listeners | get rect | Scrolling sans JS
-
Visualizing with canvas
Rendering basics | Handling events | Coping strategies
-
Media matters
Media tags | Creating player UI | Never use .gif again
-
jQuery in Vanilla JavaScript
-
Fluently speaking CSS and HTML
-
Floats demystified
All about the document flow | Clearing floated elements | Alternatives to float
-
Building stacked charts with flexbox
Assembling our chart | Columns over bars | Weird flex but okay
-
CSS-based scatter plots
How positioning works | Aspect ratio rules | WTF, padding
-
Dot matrix chart via CSS attributes
Tab UI with radio buttons | Attribute selectors | Deep pattern thoughts
-
Visualization as a civil right
Inclusive news design | Accessible by default | Required reading
-
Floats demystified
-
SVG Mechanics and Mysteries
-
Art direction with viewBox
The SVG coordinate system | Setting the camera bounds | Pan, zoom, and draw
-
Generating SVG from code
Creating elements | Nesting SVG | Line charts to scale
-
CSS and SVG, Large and Small
Inline and external media | Small multiples | Style icons
-
Common pitfalls of SVG
Attributes and properties | Scaling and wrapping text | SVG speed traps
-
Art direction with viewBox
-
Performance and other problems
-
Debugging and dev tools
Dev tools starting points | What to look for | Debugging mobile devices
-
FLIP for smooth animations
From A to B | Using FLIP on many elements | Stack of reflow
-
Fixing common slowdowns
The easy stuff | Deferred loading | Shrink your JavaScript
-
Debugging and dev tools