Fader
A continuous value along a line: a native range whose cap rides in a slot cut into the plate, with a printed scale.
Kit part · Scroll areas
A region that scrolls, with its scrollbar made as a machined rail: a groove cut into the plate and a thumb like a fader cap riding in it. Scrolling itself is the browser’s own.
Both finishes, side by side. Hover, pressed and focus are forced with .is-hover, .is-down and .is-focus; checked and disabled are real.
Aluminium
| Part | Rail at rest | Keyboard focus | Well | Edges |
|---|---|---|---|---|
| Scroll area |
|
|
|
|
Graphite
| Part | Rail at rest | Keyboard focus | Well | Edges |
|---|---|---|---|---|
| Scroll area |
|
|
|
|
| Name | Kind | Values | What it does |
|---|---|---|---|
| .tui-scroll-area | class | on a block | Overflow auto, contained overscroll, and the machined rail. Give it a height or max-height. |
| tabindex="0" · role="region" · aria-label | attribute | on the area | What lets the keyboard scroll it, and names it. Not needed if a focusable control is inside. |
| --y · --x | class | — | Scroll one axis only; the other is clipped. |
| --sm | class | — | A 10px rail in place of 14px. |
| --well | class | — | The window is cut into the plate: the recess, with 12px inside it. |
| --edges | class | — | A shade at the top or bottom edge only while there is more beyond it. Cover-and-shadow, no script. |
| --sa-rail · --sa-bg | CSS property | 14px · var(--tui-face) | The rail’s width; the colour the edge shade fades into when the area sits on something other than a panel. |
| ::-webkit-scrollbar-track · -thumb | pseudo-element | Chromium, Safari | The groove and the cap. Where they are not understood the fallback below is used. |
| scrollbar-width · scrollbar-color | CSS property | thin · ink on well | The fallback for browsers that cannot restyle scrollbar parts: a thin rail in the kit’s inks. |
| ↑ ↓ · Page Up / Down · Space · Home / End | keyboard | native | Scroll the focused area, as anywhere. |
<div class="tui-scroll-area tui-scroll-area--edges"
tabindex="0" role="region" aria-label="Hub log"
style="max-height: 220px">
<ol>…a long list…</ol>
</div>
<!-- Cut into the plate, sideways only -->
<div class="tui-scroll-area tui-scroll-area--well tui-scroll-area--x"
tabindex="0" role="region" aria-label="Circuits">
<div style="display:flex; gap:8px; width:max-content">…</div>
</div>Needs kit.css only, no script. How to install the kit.
tabindex="0", and role="region" with an aria-label tells a screen reader what it is.The rail is the scrollbar’s own parts, dressed: the track is the kit’s recess drawn as a groove (dark under its upper wall, the lower lip lit) and the thumb is the fader cap from the fader part, a light-to-dark face, a lit top edge, a skirt inside its lower one and one ink line across the middle. A 3px transparent border keeps the cap off the groove’s walls, and background-clip: padding-box draws it inside them. Held, the cap loses its skirt. Firefox cannot restyle scrollbar parts, so it gets scrollbar-color in the kit’s inks. The edge shade is the classic cover-and-shadow pair of background layers.
Give it a height, a name and a way in for the keyboard; the rail is only the dress.
4 rules in this file, with the foundations they rest on and the anti-patterns that break them. Full rules ship in the brain with the Pass.
A continuous value along a line: a native range whose cap rides in a slot cut into the plate, with a printed scale.
| Reel 3 | 42:10 |
| Mixed | 0:30 |
Rows of data with printed column labels, figures right-aligned in columns, and status in lamps with words.
A recess cut into the plate that holds other parts: keys, a selector, an empty state waiting for its first thing.