FrameworkStyle

media-volume-slider

A slider component for controlling media playback volume

Anatomy

<media-volume-slider></media-volume-slider>

Behavior

Controls the media volume level. The slider maps its 0–100 internal range to the media’s 0–1 volume scale. When the media is muted, the fill level drops to 0 regardless of the stored volume value.

Styling

Use CSS custom properties to style the fill and pointer levels:

media-volume-slider::before {
  width: calc(var(--media-slider-fill) * 1%);
}

Accessibility

Renders with role="slider" and automatic aria-label of “Volume”. Override with the label prop. Keyboard controls:

  • Arrow Left / Arrow Right: step by step increment
  • Page Up / Page Down: step by largeStep increment
  • Home: set volume to 0
  • End: set volume to max

Examples

Nest sub-components for full control over the slider’s DOM structure. This example includes a track, fill bar, draggable thumb, and a tooltip that shows the volume percentage on hover.

Unmute Mute
<video-player class="html-volume-slider-parts">
    <media-container>
        <video
            src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4"
            autoplay
            muted
            playsinline
            loop
        ></video>
        <media-mute-button class="html-volume-slider-parts__mute-button">
            <span class="show-when-muted">Unmute</span>
            <span class="show-when-unmuted">Mute</span>
        </media-mute-button>
        <media-volume-slider class="html-volume-slider-parts__slider">
            <media-slider-track class="html-volume-slider-parts__track">
                <media-slider-fill class="html-volume-slider-parts__fill"></media-slider-fill>
            </media-slider-track>
            <media-slider-thumb class="html-volume-slider-parts__thumb"></media-slider-thumb>
            <media-slider-value type="pointer" class="html-volume-slider-parts__value"></media-slider-value>
        </media-volume-slider>
    </media-container>
</video-player>

API Reference

media-volume-slider

Props

Prop Type Default
disabled boolean
label string | function 'Volume'
largeStep number
max number
min number
orientation 'horizontal' | 'vertical'
step number
thumbAlignment 'center' | 'edge'
value number

State

State is reflected as data attributes for CSS styling.

Property Type
value number
fillPercent number
pointerPercent number
dragging boolean
pointing boolean
interactive boolean
orientation 'horizontal' | 'vertical'
disabled boolean
thumbAlignment 'center' | 'edge'
muted boolean
volume number

CSS custom properties

Variable
--media-slider-fill
--media-slider-pointer

media-slider-fill

Displays the filled portion from start to the current value.

media-slider-preview

Positioning container for preview content that tracks the pointer along the slider.

Props

Prop Type Default
overflow SliderPreviewOverflow

Data attributes

Attribute Type
data-dragging
data-pointing
data-interactive
data-orientation 'horizontal' | 'vertical'
data-disabled

media-slider-thumb

Draggable handle for setting the slider value. Receives focus and handles keyboard interaction.

Data attributes

Attribute Type
data-dragging
data-pointing
data-interactive
data-orientation 'horizontal' | 'vertical'
data-disabled

media-slider-track

Contains the slider's visual track and interactive hit zone.

media-slider-value

Displays a formatted text representation of the slider value. Renders an <output> element.

Props

Prop Type Default
format ((value: number) => string)
type "current" | "pointer"

Data attributes

Attribute Type
data-dragging
data-pointing
data-interactive
data-orientation 'horizontal' | 'vertical'
data-disabled