vue-h5-video
Version:
A vue component for h5 video
221 lines (200 loc) • 4.44 kB
CSS
.video-wrapper {
position: relative;
overflow: hidden;
}
.video-wrapper>.poster {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
background-repeat: no-repeat ;
background-size: cover ;
background-position: center ;
}
.video-wrapper>.error {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
position: absolute;
top: 0;
color: #eee;
font-size: 12px;
background-color: rgba(0, 0, 0, 0.6);
background-repeat: no-repeat ;
background-size: cover ;
background-position: center ;
}
.loading:after {
position: absolute;
content: "";
display: block;
width: 120px;
height: 120px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-image: url('../img/loading.svg');
background-size: contain;
}
.video-wrapper>video {
width: 100%;
}
.video-wrapper>.control {
display: flex;
align-items: flex-end;
position: absolute;
top: 0px;
left: 0px;
width: inherit;
height: 100%;
background: rgba(0, 0, 0, 0.35);
}
.video-wrapper>.control>.play-icon,
.video-wrapper>.control>.pause-icon {
position: inherit;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.topbar {
position: absolute;
top: 10px;
left: 10px;
z-index: 1;
display: flex;
width: calc(100% - 20px);
}
.topbar .title {
font-size: 15px;
text-align: left;
color: #DDD;
margin-left: 10px;
padding-right: 10px;
margin-top: 0px;
box-sizing: border-box;
white-space: normal;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
/* autoprefixer: off */
-webkit-box-orient: vertical;
/* autoprefixer: on */
}
.topbar>.watermark {
vertical-align: top;
}
.video-wrapper>.control>.progress {
display: flex;
align-items: center;
width: 100%;
box-sizing: border-box;
padding: 0 5px;
background: rgba(0, 0, 0, 0.4);
height: 40px;
color: #fff;
cursor: pointer;
}
.video-wrapper>.control>.progress>.progress-bar {
height: inherit;
display: flex;
align-items: center;
width: calc(100% - 260px);
margin-right: 10px;
position: relative;
}
.video-wrapper>.control>.progress>.progress-bar:after {
background: #fff;
content: "";
display: block;
height: 5px;
width: 100%;
position: absolute;
top: 50%;
transform: translateY(-50%);
}
.video-wrapper>.control>.progress>.progress-bar>.has-play {
height: 5px;
background: #bbb;
width: 0px;
position: absolute;
z-index: 1;
top: 50%;
transform: translateY(-50%);
}
.video-wrapper>.control>.progress>.icon {
position: relative;
width: 50px;
height: inherit;
cursor: pointer;
}
.video-wrapper>.control>.progress>.icon>.play-icon::after {
display: block;
content: "";
width: 0px;
height: 0px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border: 10px solid transparent;
border-left: 15px solid #aaa;
}
.video-wrapper>.control>.progress>.icon>.pause-icon::after {
display: block;
content: "";
width: 4px;
height: 15px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: #aaa;
}
.video-wrapper>.control>.progress>.icon>.pause-icon::before {
display: block;
content: "";
width: 4px;
height: 15px;
position: absolute;
top: 50%;
left: 50%;
margin-left: -10px;
transform: translate(-50%, -50%);
background: #aaa;
}
.video-wrapper>.control>.progress>.icon>button,
.video-wrapper>.control>.progress>.screen-btn>button {
outline: none;
border: none;
height: inherit;
width: 100%;
background: none;
cursor: pointer;
}
.video-wrapper>.control>.progress>.time {
width: 160px;
}
.video-wrapper>.control>.progress>.screen-btn {
width: 50px;
height: inherit;
cursor: pointer;
position: relative;
}
.video-wrapper>.control>.progress>.screen-btn:after {
position: absolute;
top: 50%;
left: 50%;
transform: translate(0%, -50%);
content: "";
display: block;
width: 20px;
height: 20px;
background-image: url('../img/full.png');
background-size: contain;
background-repeat: no-repeat;
background-position: 0 0;
}