Skip to content

Range input

Preview Available in release assets

Theme a native range input while retaining its keyboard, pointer, touch, validation, and submission behavior.

Range input primary example

Show code
<div class="thin-field">
  <label for="volume">Volume</label>
  <input class="thin-range" id="volume" name="volume" type="range" min="0" max="100" value="60">
  <output for="volume">60%</output>
</div>

Each authored example uses the production assets and includes copyable markup.

Anatomy

  • Associated label
  • input[type=range]
  • Optional authored output

Variants and sizes

  • Browser-native track and thumb — shown above
  • Vertical orientation where supported by authored HTML — shown above

Rendered fixtures exercise authored content and constrained layouts with the same production assets.

  • Minimum — shown above
  • Intermediate — shown above
  • Maximum — shown above
  • Disabled — shown above
  • Focused — shown above

Interaction and keyboard behavior

Arrow, Page Up/Down, Home/End, pointer, and touch behavior remain browser-owned. Updating an output is application behavior.

Accessibility

Always provide an accessible name. Expose the current value in nearby text only when users need a formatted value.

Contract
NATIVE
Basis
Native <input type="range"> and <input type="file">; no APG widget
Evidence
  • tests/unit/library/form-inputs.test.ts

API

Use input[type=range].thin-range and native min, max, step, value, name, and disabled attributes.

Behavior tier: native

Structured host, property, and example tables are not authored for this item yet. Use the summary above and the primary example.

Fallback

The native range remains keyboard operable and submits its value without CSS or JavaScript.

Assets and dependencies

  • /components.css

Dependencies: None

Source: packages/ui/src/items/range-input/style.ts

Composition

Derived from the examples and style specs, not authored.

Composes