Skip to content
FrameworkStyle

media-pip-button

Accessible picture-in-picture toggle button with keyboard support and state reflection

Anatomy

<media-pip-button></media-pip-button>

Behavior

Toggles picture-in-picture (PiP) mode. Detects platform support through availability — when PiP is "unsupported", the toggle does nothing.

Styling

You can style the button based on PiP state:

/* In PiP mode */
media-pip-button[data-pip] {
  background: red;
}

/* Disabled (prop or feature unavailable) */
media-pip-button[data-disabled] {
  opacity: 0.5;
  cursor: not-allowed;
}

When PiP is unsupported, the button receives a hidden attribute and is automatically hidden by the browser. When disabled (via the disabled prop or because the feature is not available), the button remains visible but receives data-disabled for styling (e.g., reduced opacity).

Accessibility

Renders a <button> with an automatic aria-label: “Enter PiP” or “Exit PiP”. Override with the label prop. Keyboard activation: Enter / Space. Both disabled and unavailable states set aria-disabled="true" so screen readers announce the button as non-interactive.

Examples

Basic Usage

Exit PiP Enter PiP
<video-player class="video-player">
    <media-container>
        <video
            src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4"
            autoplay
            muted
            playsinline
            loop
        ></video>
        <media-pip-button class="media-pip-button">
            <span class="pip">Exit PiP</span>
            <span class="not-pip">Enter PiP</span>
        </media-pip-button>
    </media-container>
</video-player>

API Reference

Props

Prop Type Default Details
disabled boolean false
label string | function ''

State

State is reflected as data attributes for CSS styling.

Property Type Details
availability 'available' | 'unavailable' | 'unsupp...
disabled boolean
hidden boolean
pip boolean
label string

Data attributes

Attribute Type Details
data-pip
data-availability 'available' | 'unavailable' | 'unsupp...
data-disabled
data-hidden