Cela semble trivial, mais après toutes les recherches et le codage, je ne peux pas le faire fonctionner. Les conditions sont:
- La taille de la fenêtre du navigateur est inconnue. Ne proposez donc pas de solution impliquant des tailles de pixels absolues.
- Les dimensions d'origine de l'image sont inconnues et peuvent ou non correspondre déjà à la fenêtre du navigateur.
- L'image est centrée verticalement et horizontalement.
- Les proportions de l'image doivent être conservées.
- L'image doit être affichée dans son intégralité dans la fenêtre (pas de recadrage).
- Je ne souhaite pas que les barres de défilement apparaissent (et elles ne devraient pas si l'image correspond.)
- L'image se redimensionne automatiquement lorsque les dimensions de la fenêtre changent, pour occuper tout l'espace disponible sans être plus grande que sa taille d'origine.
En gros, ce que je veux, c'est ceci:
.fit {
max-width: 99%;
max-height: 99%;
}
<img class="fit" src="pic.png">
Le problème avec le code ci-dessus est qu'il ne fonctionne pas: la photo prend tout l'espace vertical dont elle a besoin en ajoutant une barre de défilement verticale.
A ma disposition se trouvent PHP, Javascript, JQuery mais je tuerais pour une solution CSS uniquement. Je m'en fiche si cela ne fonctionne pas dans IE.
Réponses:
Mise à jour 11/04/2018
Voici une solution sans Javascript et uniquement CSS . L'image sera dynamiquement centrée et redimensionnée pour s'adapter à la fenêtre.
La solution [other, old], à l'aide de JQuery, définit la hauteur du conteneur d'image (
body
dans l'exemple ci-dessous) afin que lamax-height
propriété de l'image fonctionne comme prévu. L'image sera également automatiquement redimensionnée lorsque la fenêtre du client est redimensionnée.Remarque: l'utilisateur gutierrezalex a présenté une solution très similaire à celle d'un plugin JQuery sur cette page.
la source
Voici une solution simple CSS uniquement ( JSFiddle ), fonctionne partout, mobile et IE inclus:
CSS 2.0:
HTML:
la source
CSS3 introduit de nouvelles unités qui sont mesurées par rapport à la fenêtre, qui est la fenêtre dans ce cas. Ce sont
vh
etvw
, qui mesurent respectivement la hauteur et la largeur de la fenêtre. Voici une solution simple CSS uniquement:La seule mise en garde à cela est que cela ne fonctionne que s'il n'y a pas d'autres éléments contribuant à la hauteur sur la page.
la source
100vh
image ne rentre pas mais97vh
fonctionne bien?vh
signifie littéralement la hauteur de la vue, donc si d'autres éléments ajoutent de la hauteur à votre page, la page entière sera> 100vh. Cela a-t-il du sens?.svg
fichier se rend bien, mais le renommer en.html
cause une inexactitude): le navigateur ajoute automatiquement la<body>
balise avec la valeur par défautmargin:8
même si le fichier n'a pas de<body>
balise. Donc, la solution ajoute<style>body{margin:0}</style>
Si vous souhaitez placer un élément conteneur autour de votre image, une solution CSS pure est simple. Vous voyez, 99% de hauteur n'a aucune signification lorsque l'élément parent s'étendra verticalement pour contenir ses enfants. Le parent doit avoir une hauteur fixe, disons ... la hauteur de la fenêtre.
HTML
CSS
Jouez avec le violon .
la source
<div>
au lieu d'un<img>
?Redimensionner l'image pour l'adapter à l'écran du côté le plus long en conservant son rapport hauteur / largeur
width: 100vw
- la largeur de l'image sera de 100% du port de vueheight: auto
- la hauteur de l'image sera mise à l'échelle proportionnellementmax-height: 100vw
- si la hauteur de l'image devenait supérieure au port de vue, elle sera réduite pour s'adapter à l'écran, par conséquent la largeur de l'image sera diminuée en raison de la propriété suivanteobject-fit: contain
- le contenu remplacé est mis à l'échelle pour conserver ses proportions tout en s'adaptant à la zone de contenu de l'élémentRemarque:
object-fit
est entièrement pris en charge uniquement depuis IE 16.0la source
object-fit
ou vous pouvez explicitement utiliserobject-fit: fill;
ce qui est par défaut .Ma règle CSS paresseuse générale:
Cela peut faire un zoom avant sur votre image si elle est en basse résolution pour commencer (c'est à voir avec la qualité de votre image et la taille en dimensions. Pour centrer votre image, vous pouvez également essayer (dans le CSS)
pour centrer votre image
dans votre HTML:
la source
Je sais qu'il y a déjà quelques réponses ici, mais voici ce que j'ai utilisé:
la source
J'avais une exigence similaire, et je devais le faire en CSS et JavaScript de base. Aucun JQuery disponible.
C'est ce que j'ai travaillé.
Remarque: je n'ai pas utilisé 100% pour la largeur de l'image car il y avait toujours un peu de remplissage à prendre en compte.
la source
img
balises dans lebody
de la page et définissezmax-height
sur49vh
. L'affichage de plus de deux images dans la zone de visualisation est laissé comme un exercice pour le lecteur.Faites simple. Merci
la source
Je pense que cela devrait faire l'affaire.
la source
Ou peut-être vérifier ceci: http://css-tricks.com/how-to-resizeable-background-image/
la source
En s'appuyant sur la réponse de @ Rohit, cela corrige les problèmes signalés par Chrome, redimensionne de manière fiable les images et fonctionne également pour plusieurs images empilées verticalement, par exemple,
<img src="foo.jpg"><br><img src="bar.jpg"><br><img src="baz.jpg">
il existe probablement une manière plus élégante de le faire.la source
Utilisez ce code dans votre balise de style
la source