simple-video-controls
Version:
A simple custom video player.
253 lines (226 loc) • 5.75 kB
text/less
:root {
--svcAccentColor: #4d9dff;
}
.svcContainer {
overflow: hidden;
height: 100%;
width: 100%;
}
.svcContainer video {
position: relative;
}
.svcControls.svcControlsHidden {
opacity: 0;
transition: opacity 0.1s 1.3s ease;
}
.svcControls.svcControlsHidden[data-state="paused"] {
opacity: 1;
transition: opacity 0.1s 0s ease;
}
.svcControls.svcControlsHidden:hover {
opacity: 1;
transition: opacity 0.1s 0.1s ease;
}
.scvVideo:hover ~ .svcControls.svcControlsHidden {
opacity: 1;
transition: opacity 0.1s 0.1s ease;
}
.svcControls {
position: absolute;
height: 60px;
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
user-select: none;
bottom: 0;
padding: 12px;
box-sizing: border-box;
}
.svcControls > * {
user-select: none;
}
input[type=range].svcProgress {
display: block;
width: 100%;
height: 100%;
margin: auto 0;
border: none;
border-radius: 50px;
padding: unset;
background: none;
box-shadow: none;
}
.svcBtnArea {
display: flex;
}
.svcProgressDiv {
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
flex-basis: 100%;
height: 5px;
padding: 0 5px;
transition: height 0.1s 1s ease;
}
.svcBtn {
background: none;
border: none;
border-radius: 3px;
cursor: pointer;
min-width: 20px;
margin: 3px;
text-align: center;
transition: background-color .1s .5s ease-in-out;
padding: 3px;
}
button.svcBtn {
transition: background-color .1s 0s ease-in-out;
}
button.svcBtn:hover {
transition: background-color .1s ease-in-out;
background-color: var(--svcAccentColor);
}
div.svcBtn:hover {
transition: background-color .1s ease-in-out;
background-color: var(--svcAccentColor);
}
.svcBtn:active {
opacity: 1;
}
.svcBtn[data-state="pause"] {
display: block;
}
.svcBtn[data-state="play"] {
display: none;
}
.svcControls[data-state="paused"] .svcBtn[data-state="pause"] {
display: none;
}
.svcControls[data-state="paused"] .svcBtn[data-state="play"] {
display: block;
}
.svcControls input[type=range] {
-webkit-appearance: none;
background: rgba(240, 240, 240, 0.4);
border-radius: 50px;
}
.svcControls input[type=range]::before {
content: unset;
margin: 0;
padding: 0;
display: none;
}
.svcControls input[type=range]::after {
content: unset;
margin: 0;
padding: 0;
display: none;
}
.svcControls input[type=range]:focus {
outline: none;
}
.svcControls input[type=range]::-webkit-slider-runnable-track {
width: 100%;
height: 6px;
cursor: pointer;
border-radius: 50px;
box-shadow: inset 0 0 2px 1px rgba(0, 0, 0, 0.1), 0 0 6px 0 rgba(0, 0, 0, 0.1);
}
.svcControls input[type=range]::-moz-range-track {
width: 100%;
height: 6px;
cursor: pointer;
border-radius: 50px;
box-shadow: inset 0 0 2px 1px rgba(0, 0, 0, 0.1), 0 0 6px 0 rgba(0, 0, 0, 0.1);
}
.svcControls input[type=range]::-webkit-slider-thumb {
-webkit-appearance: none;
height: 12px;
width: 12px;
margin-top: -3px;
outline: none;
border: none;
border-radius: 50%;
background: #fff;
cursor: pointer;
box-shadow: 0 0 0 2px rgba(255, 255, 255, 0);
transition: box-shadow .2s ease-in-out;
}
.svcControls input[type=range]::-moz-range-thumb {
-moz-appearance: none;
height: 12px;
width: 12px;
margin-top: -3px;
outline: none;
border: none;
border-radius: 50%;
background: #fff;
cursor: pointer;
box-shadow: 0 0 0 2px rgba(255, 255, 255, 0);
transition: box-shadow .2s ease-in-out;
}
.svcControls input[type=range]::-webkit-slider-thumb:hover,
.svcControls input[type=range]:hover::-webkit-slider-thumb {
box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.1);
}
.svcControls input[type=range]::-moz-range-thumb:hover,
.svcControls input[type=range]:hover::-moz-range-thumb {
box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.1);
}
.svcControls input[type=range]::-webkit-slider-thumb:active,
.svcControls input[type=range]:active::-webkit-slider-thumb {
transition: box-shadow .2s ease;
box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.4);
}
.svcControls input[type=range]::-moz-range-thumb:active,
.svcControls input[type=range]:active::-moz-range-thumb {
transition: box-shadow .2s ease;
box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.4);
}
.svcControls .verticalSlider {
position: relative;
cursor: pointer;
min-width: 20px;
display: flex;
align-items: center;
text-align: center;
justify-content: center;
margin: 3px;
}
.svcControls .verticalSlider input[type=range] {
position: absolute;
cursor: pointer;
display: block;
-webkit-appearance: none;
transition: bottom 0.3s 0.5s ease, opacity 0.1s 0.5s ease;
width: 65px;
bottom: 0;
left: unset;
opacity: 0;
margin: 0;
padding: unset;
transform: rotate(270deg);
}
.svcControls .verticalSlider:hover input[type=range] {
transition: bottom 0.3s ease, opacity 0.1s 0.1s ease;
opacity: 1;
bottom: 75px;
}
.svcControls .verticalSlider input[type=range]:hover {
display: block;
}
.svcControls .verticalSlider.scvNoAudio:hover input[type=range] {
display: none;
opacity: 0;
}
svg.svcIcon {
width: 18px;
height: 18px;
padding: 3px;
}
.svcProgressTime {
padding: 16px;
font-size: 16px;
}