Comment puis-je simuler la fonctionnalité d' background-size:cover
un élément html comme <video>
ou <img>
?
J'aimerais que ça marche comme
background-size: cover;
background-position: center center;
javascript
jquery
css
seron
la source
la source
cover
. Voir la taille de fond 101 sur le lien .Réponses:
C'est quelque chose sur lequel je me suis tiré les cheveux pendant un moment, mais je suis tombé sur une excellente solution qui n'utilise aucun script, et peut réaliser une simulation de couverture parfaite sur vidéo avec 5 lignes de CSS (9 si vous comptez les sélecteurs et les crochets ). Cela a 0 cas extrêmes dans lesquels cela ne fonctionne pas parfaitement, à moins de compatibilité CSS3 .
Vous pouvez voir un exemple ici
Le problème avec la solution de Timothy , c'est qu'elle ne gère pas correctement la mise à l'échelle. Si l'élément environnant est plus petit que le fichier vidéo, il n'est pas réduit. Même si vous donnez à la balise vidéo une taille initiale minuscule, comme 16px par 9px,
auto
finit par la forcer à un minimum de sa taille de fichier native. Avec la solution actuelle la plus votée sur cette page, il était impossible pour moi de réduire l'échelle du fichier vidéo, ce qui entraînerait un effet de zoom drastique.Si le rapport hauteur / largeur de votre vidéo est connu, par exemple 16: 9, vous pouvez effectuer les opérations suivantes:
Si l'élément parent de la vidéo est défini pour couvrir toute la page (par exemple
position: fixed; width: 100%; height: 100vh;
), la vidéo le sera également.Si vous souhaitez également centrer la vidéo, vous pouvez utiliser l'approche de centrage infaillible:
Bien sûr,
vw
,vh
ettransform
sont CSS3, donc si vous avez besoin d'une compatibilité avec les navigateurs beaucoup plus anciens , vous devez utilisez un script.la source
vh
etvw
a à voir avec quoi que ce soit?jsFiddle
L'utilisation de la couverture d'arrière-plan convient aux images, tout comme la largeur de 100%. Celles-ci ne sont pas optimales pour
<video>
, et ces réponses sont trop compliquées. Vous n'avez pas besoin de jQuery ou de JavaScript pour créer un arrière-plan vidéo pleine largeur.Gardez à l'esprit que mon code ne couvrira pas complètement un arrière-plan avec une vidéo comme la couverture le fera, mais au lieu de cela, il rendra la vidéo aussi grande que nécessaire pour maintenir les proportions et couvrir tout l'arrière-plan. Tout excès de vidéo saignera du bord de la page, dont les côtés dépendent de l'endroit où vous ancrez la vidéo.
La réponse est assez simple.
Utilisez simplement ce code vidéo HTML5, ou quelque chose du genre: (test en pleine page)
La hauteur min et la largeur min permettront à la vidéo de conserver le rapport hauteur / largeur de la vidéo, qui est généralement le rapport hauteur / largeur de tout navigateur normal à une résolution normale. Tout excès de vidéo saigne sur le côté de la page.
la source
min-width
ou demin-height
faire l'affaire.position: absolute; left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%);
.Pour certains navigateurs, vous pouvez utiliser
http://caniuse.com/object-fit
source
height: 100%; width: 100%;
. merci pour cette réponse moderneVoici comment j'ai fait ça. Un exemple de travail est dans ce jsFiddle .
source
video { min-width: 100%; min-height: 100%; }
et cela fonctionne comme un charme.background-size: cover
de la vidéo.Les autres réponses étaient bonnes mais elles impliquent du javascript ou elles ne centrent pas la vidéo horizontalement ET verticalement.
Vous pouvez utiliser cette solution CSS complète pour avoir une vidéo qui simule la propriété background-size: cover:
source
Sur la base de la réponse et des commentaires de Daniel de Wit , j'ai cherché un peu plus. Merci à lui pour la solution.
La solution est d'utiliser
object-fit: cover;
ce qui a un excellent support (tous les navigateurs modernes le supportent). Si vous voulez vraiment prendre en charge IE, vous pouvez utiliser un polyfill comme object-fit-images ou object-fit .Démos:
et avec un parent:
source
object-fit: cover
etwidth
etheight
réglé sur 100%, vous obtenez une mise à l'échelle proportionnelleimg
ou unvideo
zoom au centre sans aucun problème.La solution de M-Pixel est excellente en ce sens qu'elle résout le problème de mise à l'échelle de la réponse de Timothy (la vidéo augmentera mais pas vers le bas, donc si votre vidéo est vraiment grande, il y a de bonnes chances que vous ne voyiez qu'une petite partie agrandie). Cependant, cette solution repose sur de fausses hypothèses liées à la taille du conteneur vidéo, à savoir qu'il correspond nécessairement à 100% de la largeur et de la hauteur de la fenêtre. J'ai trouvé quelques cas où cela n'a pas fonctionné pour moi, alors j'ai décidé de m'attaquer moi-même au problème et je pense avoir trouvé la solution ultime .
HTML
CSS
Il est également basé sur le rapport de la vidéo, donc si votre vidéo a un rapport autre que 16/9, vous voudrez changer le% de remplissage en bas. À part cela, cela fonctionne hors de la boîte. Testé dans IE9 +, Safari 9.0.1, Chrome 46 et Firefox 41.
EDIT (17 mars 2016)
Depuis que j'ai publié cette réponse, j'ai écrit un petit module CSS pour simuler à la fois
background-size: cover
etbackground-size: contain
sur les<video>
éléments: http://codepen.io/benface/pen/NNdBMjIl prend en charge différents alignements pour la vidéo (similaire à
background-position
). A noter également que lacontain
mise en œuvre n'est pas parfaite. Contrairement àbackground-size: contain
cela, la vidéo ne sera pas mise à l'échelle au-delà de sa taille réelle si la largeur et la hauteur du conteneur sont plus grandes, mais je pense que cela peut toujours être utile dans certains cas. J'ai également ajouté des classes spécialesfill-width
etfill-height
que vous pouvez utiliser aveccontain
pour obtenir un mélange spécial decontain
etcover
... essayez-le, et n'hésitez pas à l'améliorer!source
object-fit: cover
pour FF et chrome et votre solution avec Modernizr pour IEobject-fit: cover
est la meilleure réponse avec cet IE, Safari polyfill.https://github.com/constancecchen/object-fit-polyfill
Il appuie
img
,video
et despicture
éléments.source
CSS et little js peuvent faire en sorte que la vidéo couvre l'arrière-plan et soit centrée horizontalement.
CSS:
JS: (liez ceci avec le redimensionnement de la fenêtre et appelez une fois séparément)
source
Juste après notre longue section de commentaires, je pense que c'est ce que vous recherchez, c'est basé sur jQuery:
HTML:
JS:
CSS:
Le code ci-dessus utilise la largeur et la hauteur du navigateur si vous le faites dans un div, vous devriez le changer en quelque chose comme ceci:
Pour Div:
HTML:
JS:
CSS:
Je dois également préciser que je n'ai testé que Google Chrome ... voici un jsfiddle: http://jsfiddle.net/ADCKk/
source
La réponse principale ne réduit pas la vidéo lorsque la largeur du navigateur est inférieure à la largeur de votre vidéo. Essayez d'utiliser ce CSS (avec #bgvid étant l'identifiant de votre vidéo):
source
z-index
nécessaire?Je suis gunna poster cette solution aussi, car j'ai eu ce problème mais les autres solutions n'ont pas fonctionné pour ma situation ...
Je pense que pour simuler correctement la
background-size:cover;
propriété css sur un élément au lieu d'une propriété background-image éléments, il vous faudrait comparer le rapport d'aspect des images à la fenêtre courante rapport d'aspect, donc peu importe la taille (et aussi au cas où l'image est plus haut que large) la fenêtre est l'élément qui remplit la fenêtre (et la centre également, même si je ne sais pas si c'était une exigence) ....en utilisant une image, juste pour des raisons de simplicité, je suis sûr qu'un élément vidéo fonctionnerait bien aussi.
obtenez d'abord le rapport hauteur / largeur des éléments (une fois qu'il est chargé), puis attachez le gestionnaire de redimensionnement de la fenêtre, déclenchez-le une fois pour le dimensionnement initial:
Ensuite, dans votre gestionnaire de redimensionnement, vous devez d'abord déterminer s'il faut remplir la largeur ou la hauteur de remplissage en comparant le rapport hauteur / largeur actuel de la fenêtre au rapport hauteur / largeur d'origine de l'image.
}
.gif
taille est beaucoup plus grande, tout en étant plus floue. Mon point de vue a changé depuis que j'ai écrit cette réponse. C'est dommage que vous ne puissiez pas combiner le meilleur des deux.Cette approche utilise simplement css et html. Vous pouvez en fait empiler facilement un div sous la vidéo. Il est couvert mais pas centré lors du redimensionnement.
HTML:
CCS:
la source
@ Hobbes cachés
Vous avez ouvert une prime sur cette question pour une solution CSS uniquement, je vais donc essayer. Ma solution à un problème comme celui-ci est d'utiliser un rapport fixe pour décider de la hauteur et de la largeur de la vidéo. J'utilise généralement Bootstrap, mais j'en ai extrait le CSS nécessaire pour le faire fonctionner sans. C'est un code que j'ai utilisé plus tôt pour, entre autres, centrer une vidéo intégrée avec le bon rapport. Il devrait fonctionner
<video>
et des<img>
éléments Il est trop haut qui est pertinent, mais je vous ai donné les deux autres aussi bien que je les avais déjà autour de la pose. Bonne chance! :)Exemple de plein écran jsfiddle
la source
Pour répondre au commentaire de weotch selon lequel la réponse de Timothy Ryan Carpenter ne tient pas compte du
cover
centrage de l'arrière-plan, je propose cette solution CSS rapide:CSS:
L'ajout de ces deux lignes centrera n'importe quel élément. Mieux encore, tous les navigateurs capables de gérer la vidéo HTML5 prennent également en charge les transformations CSS3, donc cela fonctionnera toujours.
Le CSS complet ressemble à ceci.
J'aurais commenté directement la réponse de Timothy, mais je n'ai pas assez de réputation pour le faire.
la source
Les gars, j'ai une meilleure solution, c'est court et fonctionne parfaitement pour moi. Je l'ai utilisé pour la vidéo. Et il émule parfaitement l'option de couverture en css.
Javascript
Si vous inversez le if, sinon vous obtiendrez contenir.
Et voici le css. (Vous n'avez pas besoin de l'utiliser si vous ne voulez pas de positionnement central, le div parent doit être " position: relative ")
CSS
la source
Je viens de résoudre ce problème et je voulais partager. Cela fonctionne avec Bootstrap 4. Cela fonctionne avec
img
mais je ne l'ai pas testé avecvideo
. Voici le HAML et le SCSSHAML
SCSS
la source
Ancienne question, mais au cas où quelqu'un verrait cela, la meilleure réponse à mon avis est de convertir la vidéo en un GIF animé. Cela vous donne beaucoup plus de contrôle et vous pouvez simplement le traiter comme une image. C'est également le seul moyen de fonctionner sur mobile, car vous ne pouvez pas lire automatiquement les vidéos. Je sais que la question est de le faire dans une
<img>
balise, mais je ne vois pas vraiment l'inconvénient d'utiliser<div>
et de fairebackground-size: cover
la source
.gif
taille est beaucoup plus grande, tout en étant plus floue. Mon point de vue a changé depuis que j'ai écrit cette réponse. C'est dommage que vous ne puissiez pas combiner le meilleur des deux.