Skip to content
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 an automatic aria-label that resolves to “Volume” from the active locale. 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

Scroll wheel support:

  • Mouse wheel / trackpad scroll: adjusts volume by wheelStep increment (default 5)

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="video-player">
    <media-container>
        <video
            src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4"
            autoplay
            muted
            playsinline
            loop
        ></video>
        <media-mute-button class="media-mute-button">
            <span class="muted">Unmute</span>
            <span class="unmuted">Mute</span>
        </media-mute-button>
        <media-volume-slider class="media-volume-slider">
            <media-slider-track class="media-slider-track">
                <media-slider-fill class="media-slider-fill"></media-slider-fill>
            </media-slider-track>
            <media-slider-thumb class="media-slider-thumb"></media-slider-thumb>
            <media-slider-value type="pointer" class="media-slider-value"></media-slider-value>
        </media-volume-slider>
    </media-container>
</video-player>

API Reference

media-volume-slider

Props

PropTypeDefaultDetails
disabledboolean
labelText | string | Text) | function''
largeStepnumber
maxnumber
minnumber
orientation'horizontal' | 'vertical'
stepnumber
thumbAlignment'center' | 'edge'
valuenumber
wheelStepnumber5

State

State is reflected as data attributes for CSS styling.

PropertyTypeDetails
availability'available' | 'unavailable' | 'unsupp...
valuenumber
fillPercentnumber
pointerPercentnumber
draggingboolean
pointingboolean
interactiveboolean
orientation'horizontal' | 'vertical'
disabledboolean
thumbAlignment'center' | 'edge'
mutedboolean
volumenumber

Data attributes

AttributeTypeDetails
data-availability'available' | 'unavailable' | 'unsupp...

CSS custom properties

VariableDetails
--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

PropTypeDefaultDetails
overflowSliderPreviewOverflow

Data attributes

AttributeTypeDetails
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

AttributeTypeDetails
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

PropTypeDefaultDetails
format((value: number) => string)
type"current" | "pointer"

Data attributes

AttributeTypeDetails
data-dragging
data-pointing
data-interactive
data-orientation'horizontal' | 'vertical'
data-disabled