Resizing <video> element to parent div
You can use the object-fit property to solve this. HTML:
<div class="parentDiv">
<video class="cam_video" autoplay></video>
</div>
CSS:
.cam_video {
object-fit: fill;
}
This would make the video stretch to occupy the entire parent div.
object-fit: cover;
That did the trick for me.
I was just in a similar situation, came to a solution not already mentioned:
html
and body
filling the viewport, #header
and #footer
with a content-defined height and #content
taking the remaining space in between.
#content
already was position: relative
for other reasons, so adding position: absolute
to the <video>
was enough to make it fit snugly.
Now object-fit: contain
crops the top and bottom when the viewport's height isn't enough to fit the entire video, just like it does left and right when the viewport is too narrow.
html, body {
height: 100%;
margin: 0;
}
body {
display: flex;
flex-direction: column;
}
#content {
height: 100%;
position: relative; /* magic sauce II */
}
video {
width: 100%;
height: 100%;
object-fit: cover;
position: absolute; /* magic sauce */
}
/* colors for demonstration */
#header, #footer { background: green; }
video { background: blue; }
<html>
<body>
<div id="header">...</div>
<div id="content">
<video src="http://www.w3schools.com/html/movie.mp4"></video>
</div>
<div id="footer">...</div>
<body>
</html>
1) CSS only
Demo
HTML
<div class="wrapper">
<video class="videoInsert">
<source src="http://www.w3schools.com/html/movie.mp4" type="video/mp4">
<source src="movie.ogg" type="video/ogg">
Your browser does not support the video tag.
</video>
</div>
css
.videoInsert {
position: absolute;
right: 0;
bottom: 0;
min-width: 100%;
min-height: 100%;
width: auto;
height: auto;
z-index: -100;
background-size: cover;
overflow: hidden;
}
2) jQuery
Demo
HTML
<div id="video-viewport">
<video autoplay preload width="640" height="360">
<source src="https://s3.amazonaws.com/whiteboard.is/videos/bg-loop-new.mp4" />
</video>
</div>
css
#video-viewport {
position: absolute;
top: 0;
left:0;
overflow: hidden;
z-index: -1; /* for accessing the video by click */
}
body{
margin:0;
}
jquery
from this answer - simulate background-size:cover on <video> or <img>
var min_w = 300; // minimum video width allowed var vid_w_orig; // original video dimensions var vid_h_orig; jQuery(function() { // runs after DOM has loaded vid_w_orig = parseInt(jQuery('video').attr('width')); vid_h_orig = parseInt(jQuery('video').attr('height')); $('#debug').append("<p>DOM loaded</p>"); jQuery(window).resize(function () { resizeToCover(); }); jQuery(window).trigger('resize'); }); function resizeToCover() { // set the video viewport to the window size jQuery('#video-viewport').width(jQuery(window).width()); jQuery('#video-viewport').height(jQuery(window).height()); // use largest scale factor of horizontal/vertical var scale_h = jQuery(window).width() / vid_w_orig; var scale_v = jQuery(window).height() / vid_h_orig; var scale = scale_h > scale_v ? scale_h : scale_v; // don't allow scaled width < minimum video width if (scale * vid_w_orig < min_w) {scale = min_w / vid_w_orig;}; // now scale the video jQuery('video').width(scale * vid_w_orig); jQuery('video').height(scale * vid_h_orig); // and center it by scrolling the video viewport jQuery('#video-viewport').scrollLeft((jQuery('video').width() - jQuery(window).width()) / 2); jQuery('#video-viewport').scrollTop((jQuery('video').height() - jQuery(window).height()) / 2); };
3) using iframe css only
Demo
HTML
<div class="wrapper">
<div class="h_iframe">
<iframe src="//www.youtube.com/embed/9KunP3sZyI0" frameborder="0" allowfullscreen></iframe>
</div>
</div>
css
.h_iframe iframe {
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
}