vidstack
Version:
Build awesome media experiences on the web.
563 lines (475 loc) • 14.7 kB
CSS
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Skin
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-player[data-view-type='video']) {
--media-focus-ring: var(--video-focus-ring, 0 0 0 3px rgb(78 156 246));
border-radius: var(--video-border-radius, 6px);
background-color: var(--video-bg, black);
}
:where(media-player[data-view-type='video']:not([data-fullscreen])) {
border-radius: var(--video-border-radius, 6px);
border: var(--video-border, 1px solid rgb(255 255 255 / 0.1));
}
:where(media-player[data-view-type='video']:not([data-fullscreen]))
:where(media-outlet, video, media-poster, div[part='scrim']) {
border-radius: var(--video-border-radius, 6px);
overflow: hidden;
}
:where(media-community-skin[data-video]) {
--brand: var(--video-brand, #f5f5f5);
--media-font-family: var(--video-font-family, sans-serif);
--media-slider-track-fill-bg: var(--brand);
--media-menu-radio-check-active-color: var(--brand);
--media-chapters-progress-bg: var(--brand);
--media-controls-color: var(--video-controls-color, #f5f5f5);
color: var(--video-controls-color, #f5f5f5);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Scrim
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-community-skin[data-video] div[part='scrim']) {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
z-index: 1;
opacity: 0;
pointer-events: none;
background-color: var(--video-scrim-bg, rgb(0 0 0 / 0.35));
transition: var(--video-scrim-out-transition, opacity 0.15s ease-out);
}
:where(media-player:not([data-can-play]) media-community-skin[data-video] div[part='scrim']),
:where(media-player:not([data-user-idle]) media-community-skin[data-video] div[part='scrim']) {
opacity: 1;
transition: var(--video-scrim-in-transition, opacity 0.15s ease-in);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Controls
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-community-skin[data-video]) :where(div[part='controls']) {
position: absolute;
display: flex;
flex-direction: column;
inset: 0;
width: 100%;
height: 100%;
z-index: 10;
opacity: 0;
visibility: hidden;
pointer-events: none;
transition: var(--video-controls-out-transition, opacity 0.2s ease-out);
}
:where(
media-player[data-can-play]:not([data-user-idle])
media-community-skin[data-video]
div[part='controls']
) {
opacity: 1;
visibility: visible;
transition: var(--video-controls-in-transition, opacity 0.2s ease-in);
}
:where(media-community-skin div[part='controls-spacer']) {
flex: 1 1 0%;
}
:where(media-community-skin[data-video] div[part='controls-group']) {
align-items: center;
display: flex;
margin-bottom: 4px;
pointer-events: auto;
z-index: 0;
padding: 2px 6px;
}
:where(media-community-skin[data-video] div[part='controls-group']:first-child) {
margin-top: 4px;
z-index: 50;
}
:where(media-community-skin[data-video] div[part='controls-group']:nth-child(2)) {
display: flex;
flex: 1 1 0%;
align-items: center;
justify-content: center;
pointer-events: none;
}
/* second last group */
:where(media-community-skin[data-video] div[part='controls-group']:nth-last-child(2)) {
padding: 0 12px;
z-index: 10;
margin-bottom: -16px;
}
:where(media-community-skin[data-video]:not([data-mobile]) div[part='controls-group']:last-child) {
--media-tooltip-y-offset: 34px;
z-index: 10;
}
:where(media-community-skin[data-video] [data-media-button]) {
margin-right: 6px;
}
:where(media-community-skin[data-video] [data-media-button]:last-child) {
margin-right: 6px;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Title
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-community-skin[data-video] [part='main-title']) {
display: inline-block;
font-size: var(--video-title-font-size, 14px);
font-weight: var(--video-title-font-weight, 500);
font-family: var(--video-font-family, sans-serif);
color: var(--video-title-color, #dedede);
flex: 1 1 0%;
padding-inline: 8px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
:where(media-community-skin[data-video]) [part='main-title']::before {
content: '•';
display: inline-block;
margin-right: 6px;
color: var(--video-title-color, #dedede);
}
:where(media-community-skin[data-video]) [part='main-title']:empty::before {
content: '';
margin-left: 0;
}
:where(media-player[data-fullscreen] media-community-skin[data-video] [part='main-title']) {
font-size: var(--video-fullscreen-title-font-size, 16px);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Buttons
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-community-skin[data-video] media-mute-button) {
margin-left: -4px;
}
:where(media-community-skin[data-video] media-fullscreen-button) {
margin-right: 8px;
}
:where(media-community-skin[data-mobile][data-video]) {
--media-button-size: var(--video-mobile-button-size, 32px);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Sliders
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-community-skin[data-video] media-time-slider) {
flex-grow: 0;
}
:where(media-community-skin[data-video] media-slider-thumbnail) {
--media-thumbnail-border: var(--video-slider-thumbnail-border, 1px solid #f5f5f5);
border-radius: var(--video-slider-thumbnail-border-radius, 2px);
}
:where(media-community-skin[data-video] media-slider-value) {
margin-top: 4px;
border-radius: var(--video-slider-value-border-radius, 2px);
}
:where(media-community-skin[data-video] [part='chapter-title'] + media-slider-value) {
margin-top: 0;
}
:where(media-community-skin[data-video] media-time-slider media-slider-value) {
background-color: var(--video-time-bg, unset);
text-shadow: -1px -1px 0 #333333, 1px -1px 0 #333333, -1px 1px 0 #333333, 1px 1px 0 #333333;
}
:where(media-community-skin[data-video][data-mobile] media-time) {
text-shadow: unset;
}
:where(media-community-skin[data-video] media-volume-slider) {
margin-left: -2px;
max-width: var(--video-volume-slider-max-width, 80px);
transition: all 0.15s ease;
transform: translateX(-2px);
}
:where(media-community-skin[data-video])
:where(media-mute-button:not([data-hocus]) + media-volume-slider:not([data-interactive])) {
margin: 0;
max-width: 0;
}
:where(media-community-skin[data-video] media-volume-slider media-slider-value) {
bottom: 70px;
}
@media (orientation: landscape) and (pointer: coarse) {
:where(media-player media-community-skin media-volume-slider) {
display: none;
}
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Time
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-community-skin[data-video] media-time[type='current']) {
margin-right: 2px;
}
:where(media-community-skin[data-video] media-time[type='current'][remainder]) {
margin-left: 2px;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Captions
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-player[data-preview] media-community-skin[data-video] media-captions) {
opacity: 0;
}
:where(media-community-skin[data-video] media-captions) {
z-index: 10;
transition: var(--video-captions-transition, bottom 0.15s linear);
}
:where(
media-player[data-fullscreen][data-bp-x='lg'] media-community-skin[data-video] media-captions
) {
bottom: var(--video-large-fullscreen-captions-offset, 54px);
}
:where(media-player:not([data-user-idle]) media-community-skin[data-video] media-captions) {
bottom: var(--video-captions-offset, 72px);
}
:where(
media-player:not([data-user-idle]) media-community-skin[data-video][data-mobile] media-captions
) {
bottom: var(--video-mobile-captions-offset, 48px);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Chapters
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-community-skin[data-video] [part='chapter-title']) {
width: 100%;
text-align: center;
text-shadow: -1px -1px 0 #212121, 1px -1px 0 #212121, -1px 1px 0 #212121, 1px 1px 0 #212121;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Gestures
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-community-skin[data-video] media-gesture) {
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
}
:where(media-community-skin[data-video] media-gesture[action='seek:-10']) {
width: var(--video-gesture-seek-width, 20%);
z-index: 1;
}
:where(media-community-skin[data-video] media-gesture[action='seek:10']) {
left: unset;
right: 0;
width: var(--video-gesture-seek-width, 20%);
z-index: 1;
}
:where(
media-player[data-touch] media-community-skin[data-video] media-gesture[action='toggle:paused']
) {
display: none;
}
:where(
media-player:not([data-touch])
media-community-skin[data-video]
media-gesture[action='toggle:user-idle']
) {
display: none;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Time Group
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-community-skin[data-video] [part='time-group']) {
display: flex;
align-items: center;
}
:where(media-community-skin[data-video] [part='time-divider']) {
margin-left: 2px;
margin-right: 3px;
color: var(--video-time-divider-color, rgb(224, 224, 224));
}
:where(media-player[data-fullscreen] media-community-skin[data-video] media-time) {
font-size: var(--video-fullscreen-time-font-size, 16px);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Mobile
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-community-skin[data-video][data-mobile] div[part='controls-group']:nth-last-child(2)) {
margin-bottom: -20px;
z-index: 1;
}
:where(media-community-skin[data-video][data-mobile] div[part='controls-group']:last-child) {
margin-bottom: -12px;
}
:where(
media-player[data-fullscreen]
media-community-skin[data-video][data-mobile]
[part='controls-group']:last-child
) {
margin-bottom: 0;
}
:where(media-community-skin[data-video][data-mobile] div[part='controls-group']) {
padding: 2px 2px;
}
:where(media-community-skin[data-video][data-mobile])
:where(
[data-media-button],
[data-media-slider]:not(media-time-slider),
media-time,
[part='time-divider'],
[part='main-title']
) {
transition: opacity 0.15s ease;
}
:where(media-player:not([data-started]) media-community-skin[data-video][data-mobile])
:where([data-media-button] [data-media-slider], [part='time-group']) {
opacity: 0;
visibility: hidden;
}
:where(media-player[data-preview] media-community-skin[data-video][data-mobile])
:where(
[data-media-button],
[data-media-slider]:not(media-time-slider),
media-time,
[part='main-title'],
[part='time-divider'],
media-captions
) {
opacity: 0;
}
:where(media-community-skin[data-video][data-mobile] media-time-slider) {
transition: transform 0.1s linear;
}
:where(media-player[data-preview] media-community-skin[data-video][data-mobile] media-time-slider) {
--track-height: var(--video-slider-track-height, 12px);
transform: translateY(-6px);
transition: transform 0.1s linear;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Mobile
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-community-skin[data-video][data-mobile] media-play-button) {
border-radius: 100%;
pointer-events: auto;
margin-bottom: 2.5%;
background-color: var(--video-mobile-play-button-bg, rgba(0 0 0 / 0.6));
width: var(--video-mobile-play-button-size, 40px);
height: var(--video-mobile-play-button-size, 40px);
transform: var(--video-mobile-play-button-transform, translateY(25%));
}
:where(media-community-skin[data-video][data-mobile] media-play-button svg) {
border-radius: 100%;
}
:where(
media-player:not([data-started])
media-community-skin[data-video][data-mobile]
[part='controls-group']:not(:nth-child(2))
) {
opacity: 0;
visibility: hidden;
}
/* center big play button inside buffering indicator. */
:where(media-community-skin[data-video][data-mobile] media-buffering-indicator) {
transform: translate(-2px, -4px);
}
:where(media-community-skin [part='start-duration'] media-time[type='duration']) {
position: absolute;
right: 8px;
bottom: 8px;
margin-right: 8px;
margin-bottom: 8px;
z-index: 2;
padding: var(--video-mobile-start-duration-padding, 3px 6px);
color: var(--video-mobile-start-duration-color, var(--video-controls-color));
background-color: var(--video-mobile-start-duration-bg, rgba(0 0 0 / 0.64));
}
:where(
media-player[data-started]
media-community-skin
[part='start-duration']
media-time[type='duration']
) {
display: none;
}
:where(
media-player:not([data-can-play]) media-community-skin[data-video] media-time[type='duration']
) {
opacity: 0;
}
:where(media-community-skin[data-video][data-mobile] media-time[type='current']) {
margin-left: 8px;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Fullscreen
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(
media-player[data-fullscreen]
media-community-skin[data-video]
div[part='controls-group']:nth-last-child(2)
) {
margin-bottom: -16px;
}
@media (orientation: portrait) {
:where(
media-player[data-iphone][data-fullscreen]
media-community-skin[data-video]
div[part='controls-group']:first-child
) {
margin-top: 48px;
padding-inline: 4px;
}
:where(
media-player[data-iphone][data-fullscreen]
media-community-skin[data-video]
div[part='controls-group']:nth-last-child(2)
) {
padding-inline: 8px;
}
:where(
media-player[data-iphone][data-fullscreen]
media-community-skin[data-video]
div[part='controls-group']:last-child
) {
margin-inline: 8px;
margin-bottom: 52px;
}
:where(media-player[data-fullscreen] media-community-skin[data-video] media-captions) {
bottom: 30vh;
}
}
@media (orientation: landscape) {
:where(
media-player[data-iphone][data-fullscreen][data-user-idle]
media-community-skin[data-video]
media-captions
) {
bottom: 32px;
}
:where(
media-player[data-fullscreen]
media-community-skin[data-video]
div[part='controls-group']:nth-last-child(2)
) {
margin-bottom: -12px;
}
:where(
media-player[data-iphone][data-fullscreen]
media-community-skin[data-video]
div[part='controls-group']:last-child
) {
margin-bottom: 12px;
}
}