UNPKG

vidstack

Version:

Build awesome media experiences on the web.

563 lines (475 loc) 14.7 kB
/* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * 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; } }