Read-only, CSS-only bars. Each bar's height is its --value (a
percentage of the track) and its fill is --color. Labels and the
hidden .casca-data table carry the meaning, so the bars are
aria-hidden. No JavaScript. Full variants (grouped, stacked,
diverging) in the API docs.
Add data-labels="always" to show each value without hover —
so the numbers are visible on touch, in print, and on a static no-JS page.
The default stays hover-only.
Monthly sales
Monthly sales ($k)
Jan
65
Feb
80
Mar
45
Apr
90
May
72
Jun
55
JanFebMarAprMayJun
Ranked list (top N)
Horizontal orientation + data-labels="always" + a leading
.casca-bar-label per row gives the common analytics
“top N” view: each row reads label · bar ·
value, and the numbers print without any interaction.
Traffic by source
Sessions by source
Organic search
4,200
Direct
3,100
Referral
1,800
Social
1,200
Email
600
Organic search4,200
Direct3,100
Referral1,800
Social1,200
Email600
Markup (ranked list)
<!-- horizontal + a leading label and a REAL value per row, so it reads
"label … value" even with the stylesheet off -->
<div class="casca-bar" data-orientation="horizontal" data-labels="always"
style="--casca-height: auto" aria-hidden="true">
<div class="casca-bar-group">
<div class="casca-bar-item">
<span class="casca-bar-label">Organic search</span>
<div class="casca-bar-value" style="--value: 100%"></div>
<span class="casca-bar-rank-value">4,200</span>
</div>
<!-- ...one row per item, sorted descending... -->
</div>
</div>