Charts rendered purely with CSS via the Charts.css framework (MIT). A semantic <table> of normalized values becomes a chart through @property, aspect-ratio, clip-path, conic-gradient, logical properties, and flexbox — no script, no canvas, no images.
Vertical bars: each td is height: calc(100% * var(--size)) of a tbody whose height comes from aspect-ratio: 21/9.
| Quarter | Revenue |
|---|---|
| Q1 | $42M |
| Q2 | $63M |
| Q3 | $55M |
| Q4 | $91M |
Horizontal bars: td is width: calc(100% * var(--size)).
| Language | Share |
|---|---|
| JavaScript | 95% |
| Python | 88% |
| Java | 65% |
| C# | 60% |
| Go | 42% |
A filled quad per point, drawn by a td::before with clip-path: polygon(...) whose vertices are calc() of the data values.
| Month | Users |
|---|---|
| Jan | 30k |
| Feb | 45k |
| Mar | 40k |
| Apr | 62k |
| May | 78k |
| Jun | 92k |
The same clip-path: polygon() technique, clipped to a thin band (--line-size) so only the connecting line shows.
| Week | p95 |
|---|---|
| W1 | 80 |
| W2 | 72 |
| W3 | 58 |
| W4 | 61 |
| W5 | 44 |
| W6 | 35 |
Each slice is a conic-gradient from var(--start)turn to var(--end)turn, stacked in a square (aspect-ratio: 1) rounded container.
| 35% |
| 25% |
| 20% |
| 12% |
| 8% |
Two datasets per row (.multiple): each td is coloured from the --color-1..10 palette by :nth-of-type.
| Quarter | Actual | Target |
|---|---|---|
| Q1 | 42 | 50 |
| Q2 | 63 | 55 |
| Q3 | 55 | 60 |
| Q4 | 91 | 75 |
Charts.css documents 3D looks as CSS customizations layered on a plain column chart — no special classes (see chartscss.org).
box-shadowsTen box-shadow layers, each offset one more pixel up-and-right, build the extruded top-right face of every bar.
| A | 55 |
|---|---|
| B | 80 |
| C | 48 |
| D | 95 |
transform: skewY()One skew on the whole chart shears every bar in concert.
| A | 55 |
|---|---|
| B | 80 |
| C | 48 |
| D | 95 |
box-shadowThe chart area and each bar get a rounded box-shadow combining an inset (inner top-left) and an outset (bottom-right) layer, for a raised, tactile look.