diff --git a/src/sass/docs.scss b/src/sass/docs.scss new file mode 100644 index 00000000..666474ae --- /dev/null +++ b/src/sass/docs.scss @@ -0,0 +1,140 @@ +// ========================================================================== +// HTML5 Video Player Demo Page +// ========================================================================== + +// Reset +@import "docs/normalize"; +// Mixins +@import "docs/mixins"; + +// Variables +// --------------------------------------- +// Colors +$blue: #3498DB; +$gray-dark: #343f4a; +$gray: #565d64; +$gray-light: #cbd0d3; + +// Elements +$link-color: $blue; +$padding-base: 20px; + +// Breakpoints +$screen-md: 768px; + +// BORDER-BOX ALL THE THINGS! +// http://paulirish.com/2012/box-sizing-border-box-ftw/ +*, *::after, *::before { + box-sizing: border-box; +} + +// Base +html { + //font-size: 62.5%; +} +body { + font-family: "Avenir", "Helvetica Neue", Helvetica, Arial, sans-serif; + background: #fff; + line-height: 1.5; + text-align: center; + color: #6D797F; +} + +// Type +h1, +h2 { + letter-spacing: -.025em; + color: #2E3C44; + margin: 0 0 ($padding-base / 2); + line-height: 1.2; + @include font-smoothing(); +} +h1 { + @include font-size(64); + color: #3498DB; +} +p, +small { + margin: 0 0 $padding-base; +} +small { + display: block; + padding: 0 ($padding-base / 2); + @include font-size(14); +} + +// Header +header { + padding: $padding-base; + margin-bottom: $padding-base; + + p { + @include font-size(18); + } + @media (min-width: 560px) { + padding-top: ($padding-base * 3); + padding-bottom: ($padding-base * 3); + } +} + +// Sections +section { + padding-bottom: $padding-base; + + @media (min-width: 560px) { + padding-bottom: ($padding-base * 2); + } +} + +// Links & Buttons +a { + text-decoration: none; + color: $link-color; + border-bottom: 1px solid currentColor; + transition: all .3s ease; + + &:hover, + &:focus { + color: #000; + } + &:focus { + @include tab-focus(); + } +} +.btn { + display: inline-block; + padding: ($padding-base / 2) ($padding-base * 1.5); + background: $link-color; + border: 0; + color: #fff; + @include font-smoothing(on); + font-weight: 600; + border-radius: 3px; + + &:hover, + &:focus { + color: #fff; + background: darken($link-color, 5%); + } +} + +// Players +.example-audio .player { + max-width: 480px; +} +.example-video .player { + max-width: 1200px; +} +.example-audio .player, +.example-video .player { + margin: 0 auto $padding-base; + + &-fullscreen, + &.fullscreen-active { + max-width: none; + } +} + +// Fonts +// Last to not block rendering +@import "docs/fontface.less"; diff --git a/src/sass/docs/fontface.scss b/src/sass/docs/fontface.scss new file mode 100644 index 00000000..6cd9eb68 --- /dev/null +++ b/src/sass/docs/fontface.scss @@ -0,0 +1,16 @@ +@font-face { + font-family: "Avenir"; + src: url("../../src/fonts/AvenirLTStd-Medium.woff2") format("woff2"), + url("../../src/fonts/AvenirLTStd-Medium.woff") format("woff"), + url("../../src/fonts/AvenirLTStd-Medium.ttf") format("truetype"); + font-style: normal; + font-weight: 400; +} +@font-face { + font-family: "Avenir"; + src: url("../../src/fonts/AvenirLTStd-Heavy.woff2") format("woff2"), + url("../../src/fonts/AvenirLTStd-Heavy.woff") format("woff"), + url("../../src/fonts/AvenirLTStd-Heavy.ttf") format("truetype"); + font-style: normal; + font-weight: 600; +} \ No newline at end of file diff --git a/src/sass/docs/mixins.scss b/src/sass/docs/mixins.scss new file mode 100644 index 00000000..24412575 --- /dev/null +++ b/src/sass/docs/mixins.scss @@ -0,0 +1,47 @@ +// ========================================================================== +// Mixins +// ========================================================================== + +// Contain floats: nicolasgallagher.com/micro-clearfix-hack/ +// --------------------------------------- +@mixin clearfix() +{ + zoom: 1; + &:before, + &:after { content: ""; display: table; } + &:after { clear: both; } +} + +// Webkit-style focus +// --------------------------------------- +@mixin tab-focus() +{ + // Default + outline: thin dotted $gray-dark; + // Webkit + //outline: 5px auto -webkit-focus-ring-color; + outline-offset: 1px; +} + +// Use rems for font sizing +// Leave at 100%/16px +// --------------------------------------- +@mixin font-size($font-size: 16) +{ + $rem: round(($font-size / 16), 1); + font-size: ($font-size * 1px); + font-size: #{"${rem}rem"}; +} + +// Font smoothing +// --------------------------------------- +@mixin font-smoothing($mode: on) when ($mode = on) +{ + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; +} +@mixin font-smoothing($mode: on) when ($mode = off) +{ + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: subpixel-antialiased; +} \ No newline at end of file diff --git a/src/sass/docs/normalize.scss b/src/sass/docs/normalize.scss new file mode 100644 index 00000000..562891ab --- /dev/null +++ b/src/sass/docs/normalize.scss @@ -0,0 +1,406 @@ +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */ + +/* ========================================================================== + HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined in IE 8/9. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * Correct `inline-block` display not defined in IE 8/9. + */ + +audio, +canvas, +video { + display: inline-block; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9. + * Hide the `template` element in IE, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* ========================================================================== + Base + ========================================================================== */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* ========================================================================== + Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background: transparent; +} + +/** + * Address `outline` inconsistency between Chrome and other browsers. + */ + +a:focus { + outline: thin dotted; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + ========================================================================== */ + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari 5, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9, Safari 5, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari 5 and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Correct font family set oddly in Safari 5 and Chrome. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + */ + +pre { + white-space: pre-wrap; +} + +/** + * Set consistent quote types. + */ + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9. + */ + +img { + border: 0; +} + +/** + * Correct overflow displayed oddly in IE 9. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari 5. + */ + +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * 1. Correct font family not being inherited in all browsers. + * 2. Correct font size not being inherited in all browsers. + * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. + */ + +button, +input, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 8/9. + * 2. Improve readability and alignment in all browsers. + */ + +textarea { + overflow: auto; /* 1 */ + vertical-align: top; /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/src/sass/plyr.scss b/src/sass/plyr.scss new file mode 100644 index 00000000..f0d74989 --- /dev/null +++ b/src/sass/plyr.scss @@ -0,0 +1,442 @@ +// ========================================================================== +// HTML5 Media Player +// ========================================================================== + +// Variables +// ------------------------------- +// Colors +$blue: #3498DB; +$gray-dark: #343f4a; +$gray: #565d64; +$gray-light: #cbd0d3; + +// Font sizes +$font-size-small: 14px; +$font-size-base: 16px; +$font-size-large: ceil(($font-size-base * 1.5)); + +// Controls +$control-spacing: 10px; +$controls-bg: $gray-dark; +$control-bg-hover: $blue; +$control-color: $gray-light; +$control-color-inactive: $gray; +$control-color-focus: #fff; +$control-color-hover: #fff; + +// Progress +$progress-bg: lighten($gray, 10%); +$progress-playing-bg: $blue; +$progress-buffered-bg: $gray; + +// Range +$range-track-height: 6px; +$range-track-bg: $gray; +$range-thumb-height: ($range-track-height * 2); +$range-thumb-width: ($range-track-height * 2); +$range-thumb-bg: $control-color; +$range-thumb-bg-focus: $control-bg-hover; + +// Breakpoints +$bp-control-split: 560px; // When controls split into left/right +$bp-captions-large: 768px; // When captions jump to the larger font size + +// Utility classes & mixins +// ------------------------------- +// Screen reader only +.sr-only { + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); + padding: 0 !important; + border: 0 !important; + height: 1px !important; + width: 1px !important; + overflow: hidden; +} +// Contain floats: nicolasgallagher.com/micro-clearfix-hack/ +@mixin clearfix() +{ + zoom: 1; + &:before, + &:after { content: ""; display: table; } + &:after { clear: both; } +} + +// Tab focus styles +@mixin tab-focus() +{ + outline: thin dotted #000; + outline-offset: 1px; +} + +// Range styling +// --------------------------------------- +@mixin range-thumb() +{ + height: $range-thumb-height; + width: $range-thumb-width; + background: $range-thumb-bg; + border: 0; + border-radius: ($range-thumb-height / 2); + transition: background .3s ease; + cursor: ew-resize; +} +@mixin range-track() +{ + height: $range-track-height; + background: $range-track-bg; + border: 0; + border-radius: ($range-track-height / 2); +} + +// Font smoothing +// --------------------------------------- +@mixin font-smoothing($mode: on) when ($mode = on) +{ + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; +} +@mixin font-smoothing($mode: on) when ($mode = off) +{ + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: subpixel-antialiased; +} + +// Styles +// ------------------------------- +// Base +.player { + position: relative; + max-width: 100%; + min-width: 290px; + overflow: hidden; // For the controls + + // border-box everything + // http://paulirish.com/2012/box-sizing-border-box-ftw/ + &, + *, + *::after, + *::before { + box-sizing: border-box; + } + + // For video + &-video-wrapper { + position: relative; + } + video { + width: 100%; + height: auto; + vertical-align: middle; + } + + // Captions + &-captions { + display: none; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + padding: 20px; + min-height: 2.5em; + color: #fff; + font-size: $font-size-base; + font-weight: 600; + text-shadow: + -1px -1px 0 $gray, + 1px -1px 0 $gray, + -1px 1px 0 $gray, + 1px 1px 0 $gray; + text-align: center; + @include font-smoothing(); + + @media (min-width: $bp-captions-large) { + font-size: $font-size-large; + } + } + &.captions-active &-captions { + display: block; + } + + // Player controls + &-controls { + @include clearfix(); + @include font-smoothing(); + position: relative; + padding: ($control-spacing * 2) $control-spacing $control-spacing; + background: $controls-bg; + line-height: 1; + text-align: center; + + // Layout + &-sound { + display: block; + margin: $control-spacing auto 0; + } + @media (min-width: $bp-control-split) { + &-playback { + float: left; + } + &-sound { + float: right; + margin-top: 0; + } + } + + input + label, + button { + display: inline-block; + vertical-align: middle; + margin: 0 2px; + padding: ($control-spacing / 2) $control-spacing; + + transition: background .3s ease; + border-radius: 3px; + cursor: pointer; + + svg { + width: 18px; + height: 18px; + display: block; + fill: currentColor; + transition: fill .3s ease; + } + } + input + label, + input.inverted:checked + label { + color: $control-color-inactive; + } + button, + input.inverted + label, + input:checked + label { + color: $control-color; + } + button { + border: 0; + background: transparent; + overflow: hidden; + } + input:focus + label, + button:focus { + @include tab-focus(); + color: $control-color-focus; + } + button:hover, + input + label:hover { + background: $control-bg-hover; + color: $control-color-hover; + } + .icon-exit-fullscreen, + .icon-muted { + display: none; + } + .player-time { + display: inline-block; + vertical-align: middle; + margin-left: $control-spacing; + color: $control-color; + font-weight: 600; + font-size: $font-size-small; + @include font-smoothing(); + } + } + + // Player progress + // element + &-progress { + position: absolute; + top: 0; + left: 0; + right: 0; + width: 100%; + height: $control-spacing; + background: $progress-bg; + + &-buffer, + &-played { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + margin: 0; + vertical-align: top; + + &[value] { + -webkit-appearance: none; + border: none; + background: transparent; + + &::-webkit-progress-bar { + background: transparent; + } + + // Inherit from currentColor; + &::-webkit-progress-value { + background: currentColor; + } + &::-moz-progress-bar { + background: currentColor; + } + } + } + &-played { + z-index: 2; + } + &-played[value] { + cursor: pointer; + color: $progress-playing-bg; + } + &-buffer[value] { + color: $progress-buffered-bg; + } + } + + // States + &-controls [data-player='pause'], + &.playing .player-controls [data-player='play'] { + display: none; + } + &.playing .player-controls [data-player='pause'] { + display: inline-block; + } + + // Muted + &.muted .player-controls .icon-muted { + display: block; + + & + svg { + display: none; + } + } + + // Volume control + // element + &-volume { + vertical-align: middle; + -webkit-appearance: none; + -moz-appearance: none; + width: 100px; + margin: 0 $control-spacing 0 0; + padding: 0; + cursor: pointer; + background: none; + + // Webkit + &::-webkit-slider-runnable-track { + @include range-track(); + } + &::-webkit-slider-thumb { + -webkit-appearance: none; + margin-top: -(($range-thumb-height - $range-track-height) / 2); + @include range-thumb(); + } + + // Mozilla + &::-moz-range-track { + @include range-track(); + } + &::-moz-range-thumb { + @include range-thumb(); + } + + // Microsoft + &::-ms-track { + height: $range-track-height; + background: transparent; + border-color: transparent; + border-width: (($range-thumb-height - $range-track-height) / 2) 0; + color: transparent; + } + &::-ms-fill-lower, + &::-ms-fill-upper { + @include range-track(); + } + &::-ms-thumb { + @include range-thumb(); + } + + &:focus { + outline: 0; + + &::-webkit-slider-thumb { + background: $range-thumb-bg-focus; + } + &::-moz-range-thumb { + background: $range-thumb-bg-focus; + } + &::-ms-thumb { + background: $range-thumb-bg-focus; + } + } + } + + // Full screen mode + &-fullscreen, + &.fullscreen-active { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + height: 100%; + width: 100%; + z-index: 10000000; + background: #000; + + .player-video-wrapper { + height: 100%; + width: 100%; + + video { + height: 100%; + } + .player-captions { + top: auto; + bottom: 90px; + + @media (min-width: $bp-control-split) and (max-width: ($bp-captions-large - 1)) { + bottom: 60px; + } + @media (min-width: $bp-captions-large) { + bottom: 80px; + } + } + } + .player-controls { + position: absolute; + bottom: 0; + left: 0; + right: 0; + } + } + + // When true full screen, show exit fullscreen icon + &.fullscreen-active .icon-exit-fullscreen { + display: block; + + & + svg { + display: none; + } + } + + // Some options are hidden by default + [data-player='captions'], + [data-player='captions'] + label, + [data-player='fullscreen'], + [data-player='fullscreen'] + label { + display: none; + } + &.captions-enabled [data-player='captions'], + &.captions-enabled [data-player='captions'] + label, + &.fullscreen-enabled [data-player='fullscreen'], + &.fullscreen-enabled [data-player='fullscreen'] + label { + display: inline-block; + } + + // Full browser view hides toggle + &-fullscreen [data-player='fullscreen'], + &-fullscreen [data-player='fullscreen'] + label { + display: none !important; + } +}