<media-captions-button>

The <media-captions-button> component is used to toggle captions and subtitles on and off. When turning on captions and subtitles, captions tracks will be preferred over subtitles tracks, but either type will be used.

The contents of the <media-captions-button> will update based on the text track media state.

  • When any captions or subtitles tracks are enabled, the component will display the contents of the on slot.
  • When all captions and subtitles tracks are disabled, the component will display the contents of the off slot.
<media-controller defaultsubtitles>
  <video
    playsinline muted crossorigin
    slot="media"
    src="https://stream.mux.com/A3VXy02VoUinw01pwyomEO3bHnG4P32xzV7u1j1FSzjNg/low.mp4"
  >
    <track label="English" kind="captions" srclang="en" src='https://media-chrome.mux.dev/examples/vanilla/vtt/en-cc.vtt' />
  </video>
  <media-captions-button></media-captions-button>
</media-controller>

You can modify the contents of the <media-captions-button> component using slots. This is useful if you’d like to use your own custom captions button instead of the default one provided by media-chrome.

Here’s an example of how you can replace the default on and off icons with CC and CC. Media Controller also enables captions and subtitles using the defaultsubtitles attribute.

<media-controller defaultsubtitles>
  <video
    playsinline muted crossorigin
    slot="media"
    src="https://stream.mux.com/A3VXy02VoUinw01pwyomEO3bHnG4P32xzV7u1j1FSzjNg/low.mp4"
  >
    <track label="English" kind="captions" srclang="en" src='https://media-chrome.mux.dev/examples/vanilla/vtt/en-cc.vtt' />
  </video>
  <media-captions-button>
    <span slot="on"><b><u>CC</u></b></span>
    <span slot="off" style="font-weight: 400;">CC</span>
  </media-captions-button>
</media-controller>

Alternatively, if you would like to use a single element you could use the icon slot instead. This is useful for creating an animated icon that transitions between states. Here’s a basic example that uses CSS to control how it looks.

.my-icon {
  transition: all .5s;
  font-weight: 400;
  border-radius: 5px;
}

media-captions-button[aria-checked=true] .my-icon {
  font-weight: 700;
  text-decoration: underline;
  color: red;
}

The <media-captions-button> doesn’t expose any configuration attributes. However, it will be updated with Media UI Attributes any time the selected caption or subtitle changes.

You can use these attributes to style the button. For example, if there aren’t any subtitles, hide the button

media-captions-button:not([mediasubtitleslist]) {
  display: none;
}

Or make the background blue if a captions is showing.

media-captions-button[mediasubtitlesshowing] {
  --media-control-background: blue;
}
NameDescription
onAn element that will be shown while closed captions or subtitles are on.
offAn element that will be shown while closed captions or subtitles are off.
iconAn element for representing on and off states in a single icon
NameTypeDescription
disabledbooleanThe Boolean disabled attribute makes the element not mutable or focusable.
mediacontrollerstringThe element `id` of the media controller to connect to (if not nested within).

The media UI attributes will be set automatically by the controller if they are connected via nesting or the mediacontroller attribute. Only set these attributes manually if you know what you're doing.

NameTypeDescription
mediasubtitlesliststring A list of all subtitles and captions.
mediasubtitlesshowingstring A list of the showing subtitles and captions.
NameDefaultDescription
--media-captions-button-displayinline-flexdisplay property of button.
--media-primary-colorrgb(238 238 238)Default color of text and icon.
--media-secondary-colorrgb(20 20 30 / .7)Default color of button background.
--media-text-colorvar(--media-primary-color, rgb(238 238 238))color of button text.
--media-icon-colorvar(--media-primary-color, rgb(238 238 238))fill color of button icon.
--media-control-displaydisplay property of control.
--media-control-backgroundvar(--media-secondary-color, rgb(20 20 30 / .7))background of control.
--media-control-hover-backgroundrgba(50 50 70 / .7)background of control hover state.
--media-control-padding10pxpadding of control.
--media-control-height24pxline-height of control.
--media-fontvar(--media-font-weight, bold) var(--media-font-size, 14px) / var(--media-text-content-height, var(--media-control-height, 24px)) var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif)font shorthand property.
--media-font-weightboldfont-weight property.
--media-font-familyhelvetica neue, segoe ui, roboto, arial, sans-seriffont-family property.
--media-font-size14pxfont-size property.
--media-text-content-heightvar(--media-control-height, 24px)line-height of button text.
--media-button-icon-widthwidth of button icon.
--media-button-icon-heightvar(--media-control-height, 24px)height of button icon.
--media-button-icon-transformtransform of button icon.
--media-button-icon-transitiontransition of button icon.