Quelqu'un a-t-il réussi à redimensionner un élément video
en div parent?
Mon élément vidéo contient un flux webcam qui vient avec un ratio of 4:3
. Je voudrais casser le rapport et l'ajuster à la taille div. J'ai essayé ce qui suit:
width and height 100%
> cela ne fait rien, 4: 3 restemin-height and min-width 100%
> cela fait redimensionner la vidéo à quelque chose de vraiment énorme qui déborde le divposition:absolute, bottom, top, left and right: 0px
aussi un énorme flux sur la div parentComment faire?
[~ # ~] modifier [~ # ~] : Merci Gaurav pour cette réponse très détaillée. Il a l'air bien, je souhaite que cela fonctionne pour moi.
.parentDiv // Results in around 400x400 pixels for me
{
position: absolute;
top: 11px;
right: 10px;
left: 10px;
height: -webkit-calc(50% - 18px);
height: calc(50% - 18px);
display: block;
}
Mon élément vidéo est là, je lui ai donné votre solution CSS. Malheureusement, il est seulement devenu blanc. Mon parentDiv css pourrait-il avoir quelque chose à voir avec cela?
EDIT 2 : Voici le HTML:
<div class="parentDiv">
<video class="cam_video" autoplay></video>
</div>
C'est principalement ça. L'attribut src de la vidéo est défini sur mon flux webcam.
EDIT 3 :
Si je clique avec le bouton droit de la souris et inspecte la partie blanche (maintenant rouge griffonnée) de cette capture d'écran https://s22.postimg.cc/th4ha8nmp/ratio2.png , Chrome = me montre que le blanc appartient aussi au flux.
Il semble que le flux de la webcam s'accompagne de rayures blanches en haut et en bas. C'est énervant.
1) CSS uniquement
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
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
de cette réponse - simuler la taille de l'arrière-plan: couvrir sur <video> ou <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) en utilisant uniquement iframe css
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%;
}
Vous pouvez utiliser la propriété fit-fit pour résoudre ce problème. HTML:
<div class="parentDiv">
<video class="cam_video" autoplay></video>
</div>
CSS:
.cam_video {
object-fit: fill;
}
Cela ferait étirer la vidéo pour occuper la division parent entière.
object-fit: cover;
Cela a fait l'affaire pour moi.