Skins
Packaged player designs that include both UI components and their styles.
A skin wraps the media component and provides the player’s complete interface. It combines a specific set of UI components with the styles that arrange and present them.
Packaged and ejected skins
When you choose a skin you have two options for how you use it: packaged or ejected. It’s usually easiest to start with a packaged skin and later eject its internal components into your project when you need more customization.
Packaged skins cover common visual changes through documented CSS custom properties. Packaged video skins also let you replace the poster. When you need more than that, eject the skin and change the components and styles directly.
| Packaged skin | Ejected skin |
|---|---|
| Single component | Many UI components |
| Documented CSS custom properties | Components and styles you own |
| Future design updates auto-applied by bumping the version | Future design updates manually applied, or intentionally ignored |
Packaged skin
<script type="module">
import '@videojs/html/video/player';
import '@videojs/html/video/skin';
</script>
<video-player>
<video-skin>
<video src="video.mp4"></video>
</video-skin>
</video-player>import { Video, VideoPlayer, VideoSkin } from '@videojs/react/video';
import '@videojs/react/video/skin.css';
export function Player() {
return (
<VideoPlayer>
<VideoSkin>
<Video src="video.mp4" />
</VideoSkin>
</VideoPlayer>
);
}Don’t depend on elements, class names, or undocumented custom properties inside a packaged skin. They may change between releases.
Ejected skin
An ejected skin is the same skin as app code that you own. Its UI components and styles become files in your project, so you can add, remove, rearrange, or restyle any part of it.
Custom interface
You can also build an interface without starting from a skin. In that model, you choose and arrange individual UI components around the media. This takes more work, but it avoids inheriting a skin’s layout and interactions.
Skins, features, and presets
Each skin is built with specific features in mind. For example, a video skin renders fullscreen and picture-in-picture controls. An audio skin doesn’t.
You’ll find a preconfigured player, its typed hook, a skin, and the matching feature bundle exported from the same path. We call these paths presets.
| Import | Description | Details |
|---|---|---|
@videojs/html/video | General-purpose video player preset with full playback controls. | |
| ||
@videojs/html/audio | Audio-only player preset with playback and volume controls. | |
@videojs/html/background | Ambient background video preset with no user controls. | |
| ||
@videojs/html/live-audio | Live audio player preset — audio minus playback rate, plus the live feature, with a skin that swaps the time slider
and time displays for a Live button. | |
| ||
@videojs/html/live-video | Live video player preset — video minus playback rate, quality selection, and audio-track selection, plus the live
feature, with a skin that swaps the time slider and time displays for a Live button. | |
| ||