J'ai trouvé un moyen de le faire en utilisant les CSS, mais il faut faire attention car cela peut changer en fonction du flux de votre propre site web. Je l'ai fait pour intégrer une vidéo avec un rapport d'aspect constant dans une partie de mon site Web à largeur variable.
Disons que vous avez une vidéo intégrée comme celle-ci :
<object>
<param ... /><param ... />...
<embed src="..." ...</embed>
</object>
Vous pouvez ensuite placer le tout dans un div avec une classe "vidéo". Cette classe vidéo sera probablement l'élément fluide de votre site Web, c'est-à-dire qu'il n'a pas de contraintes de hauteur directes, mais que lorsque vous redimensionnez le navigateur, sa largeur change en fonction du flux du site Web. Il s'agit probablement de l'élément dans lequel vous essayez d'intégrer votre vidéo tout en maintenant un certain rapport d'aspect de la vidéo.
Pour ce faire, je place une image avant l'objet incorporé dans le div de la classe "vidéo".
! !! L'important est que l'image ait le bon rapport d'aspect que vous souhaitez conserver. En outre, assurez-vous que la taille de l'image est AU MOINS aussi grande que la plus petite que vous attendez de la vidéo (ou de ce que vous maintenez le rapport hauteur/largeur) en fonction de votre mise en page. Cela évitera tout problème potentiel de résolution de l'image lorsqu'elle est redimensionnée en pourcentage. Par exemple, si vous souhaitez conserver un rapport hauteur/largeur de 3:2, n'utilisez pas simplement une image de 3px par 2px. Cela peut fonctionner dans certaines circonstances, mais je ne l'ai pas testé, et ce serait probablement une bonne idée à éviter.
Vous devriez probablement avoir déjà défini une largeur minimale comme celle-ci pour les éléments fluides de votre site Web. Si ce n'est pas le cas, c'est une bonne idée de le faire afin d'éviter de couper des éléments ou d'avoir des chevauchements lorsque la fenêtre du navigateur devient trop petite. Il est préférable d'avoir une barre de défilement à un moment donné. La plus petite largeur d'une page Web devrait se situer autour de ~600px (y compris les colonnes à largeur fixe), car les résolutions d'écran ne sont pas plus petites, sauf s'il s'agit de sites adaptés aux téléphones. ! !!
J'utilise un png complètement transparent mais je ne pense pas que cela ait une importance si vous le faites correctement. Comme ceci :
<div class="video">
<img class="maintainaspectratio" src="maintainaspectratio.png" />
<object>
<param ... /><param ... />...
<embed src="..." ...</embed>
</object>
</div>
Vous devriez maintenant être en mesure d'ajouter un CSS semblable à celui qui suit :
div.video { ...; position: relative; }
div.video img.maintainaspectratio { width: 100%; }
div.video object { position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; }
div.video embed {width: 100%; height: 100%; }
Veillez également à supprimer toute déclaration explicite de hauteur ou de largeur dans l'objet et les balises d'intégration qui accompagnent généralement le code d'intégration copié/collé.
La façon dont cela fonctionne dépend des propriétés de position de l'élément de classe vidéo et de l'élément que vous souhaitez voir conserver un certain rapport d'aspect. Il tire parti de la manière dont une image conserve son rapport d'aspect correct lorsqu'elle est redimensionnée dans un élément. Il indique à ce qui se trouve dans l'élément de classe vidéo de profiter pleinement de l'espace fourni par l'image dynamique en forçant sa largeur/hauteur à 100 % de l'élément de classe vidéo ajusté par l'image.
Plutôt cool, hein ?
Vous devrez peut-être jouer un peu avec pour que cela fonctionne avec votre propre design, mais cela fonctionne étonnamment bien pour moi. Le concept général est là.
4 votes
J'ai abordé différentes approches à cet égard dans mon article CSS-Tricks sur le thème mise à l'échelle des animations réactives
5 votes
Je suis arrivé très tard à cette Q&R, mais je dois faire un commentaire. Bien qu'il soit très discipliné et conforme aux règles de l'OS que chaque personne qui répond fasse de son mieux pour satisfaire à l'exigence "uniquement CSS" de la question, il est assez surprenant qu'à l'exception de la réponse de user007 En bas de la page, personne n'a mentionné l'évidence : il n'existe pas de solution fiable uniquement en CSS, ce problème nécessite Javascript. Un néophyte arrivant sur cette page pourrait perdre un temps précieux à passer d'un ensemble d'avantages et d'inconvénients à un autre avant que l'ampoule ne se déclenche : Les CSS ne suffiront pas.
1 votes
J'ai écrit un petit outil qui permet de prévisualiser et de calculer facilement les rapports d'aspect, aspectrat.io . Il génère également le code CSS/Sass/Less approprié que vous pouvez copier et coller dans vos projets. J'espère que les gens le trouveront utile.
0 votes
voir cet exemple : w3schools.com/howto/howto_css_aspect_ratio.asp ..... qui m'a fait travailler
3 votes
Cette question est destinée à définir hauteur sur la base de largeur . Si vous voulez le contraire, consultez Définir la largeur d'un élément en fonction de sa hauteur via CSS .
1 votes
Toutes les solutions CSS proposées ici ont des limites. Il n'existe actuellement aucune solution générale sans javascript. @Web_Designer a une bonne solution, mais elle ne conserve le rapport que sur la base de la largeur. Si vous voulez maintenir ce rapport pour un conteneur où la largeur ET la hauteur comptent, cela ne fonctionnera pas. Vous rencontrerez également des problèmes similaires en utilisant vw et vh, car vous devez vous verrouiller sur l'un ou l'autre. Ces limitations ne sont probablement pas un problème pour le contenu défilant, mais pour les autres applications qui dépendent d'une hauteur limitée, vous aurez besoin de javascript.
1 votes
La nouvelle propriété Css aspect ratio est maintenant disponible. web.dev/aspect-ratio