Comment redimensionner automatiquement une grande image afin qu'elle tienne dans un conteneur div de plus petite largeur tout en conservant son rapport largeur: hauteur?
Exemple: stackoverflow.com - lorsqu'une image est insérée dans le panneau de l'éditeur et que l'image est trop grande pour tenir sur la page, l'image est automatiquement redimensionnée.
html
css
image
autoresize
001
la source
la source
Réponses:
N'appliquez pas de largeur ou de hauteur explicite à la balise d'image. Donnez-lui plutôt:
Aussi,
height: auto;
si vous souhaitez spécifier une largeur uniquement.Exemple: http://jsfiddle.net/xwrvxser/1/
la source
<a>
balise englobante , l'image n'a pas été redimensionnée. L'application des règles à la balise A a résolu ce problème.ajustement aux objets
Il s'avère qu'il existe une autre façon de procéder.
fera le travail. C'est des trucs CSS 3.
Violon: http://jsfiddle.net/mbHB4/7364/
la source
object-fit: cover
Actuellement, il n'y a aucun moyen de le faire correctement de manière déterministe, avec des images de taille fixe telles que des fichiers JPEG ou PNG.
Pour redimensionner une image proportionnellement, vous devez définir soit la hauteur ou la largeur à « 100% », mais pas les deux. Si vous définissez les deux sur "100%", votre image sera étirée.
Le choix de la hauteur ou de la largeur dépend de l'image et des dimensions du conteneur:
height="100%"
l'image.width="100%"
l'image.Si votre image est un SVG, qui est un format d'image vectorielle de taille variable, vous pouvez faire en sorte que l'extension pour s'adapter au conteneur se produise automatiquement.
Vous devez juste vous assurer que le fichier SVG n'a aucune de ces propriétés définies dans la
<svg>
balise:La plupart des programmes de dessin vectoriel définissent ces propriétés lors de l'exportation d'un fichier SVG, vous devrez donc modifier manuellement votre fichier à chaque exportation ou écrire un script pour le faire.
la source
background-size: contain
.Voici une solution qui alignera verticalement et horizontalement votre img dans un div sans aucun étirement, même si l'image fournie est trop petite ou trop grande pour tenir dans le div.
Le contenu HTML:
Le contenu CSS:
La partie jQuery:
la source
Faites simple!
Donnez au conteneur une valeur fixe
height
, puis pour laimg
balise à l'intérieur, définissezwidth
etmax-height
.La différence est que vous définissez
width
100%, pas lemax-width
.la source
Un beau hack.
Vous avez deux façons de rendre l'image réactive.
Exécutez-le ici
Mais il faut utiliser la
img
balise pour mettre des images car c'est mieux qu'enbackground-image
termes de référencement car vous pouvez écrire des mots clés dansalt
laimg
balise. Voici donc que vous pouvez rendre l'image réactive.Exécutez-le ici
la source
Vous pouvez définir l'image comme arrière-plan sur un div, puis utiliser la propriété CSS background-size :
Il "redimensionnera l'image d'arrière-plan pour qu'elle soit aussi grande que possible afin que la zone d'arrière-plan soit entièrement recouverte par l'image d'arrière-plan. Certaines parties de l'image d'arrière-plan peuvent ne pas être visibles dans la zone de positionnement d'arrière-plan" - W3Schools
la source
alt
valeurs et de telles choses (bien que vous puissiez également ajouter une image factice qui est invisible pour les technologies non assistantes), ou vous devrez peut-être la rendre cliquable.background-size: contain
et je pense que j'irais personnellement sur l'image factice simplement parce qu'il n'y a pas vraiment de moyen facile de faire ce qui est décrit ici sans JavaScriptDécouvrez ma solution: http://codepen.io/petethepig/pen/dvFsA
Il est écrit en CSS pur, sans code JavaScript. Il peut gérer des images de toute taille et de toute orientation.
Étant donné un tel HTML:
le code CSS serait:
la source
Je viens de publier un plugin jQuery qui fait exactement ce dont vous avez besoin avec beaucoup d'options:
https://github.com/GestiXi/image-scale
Usage:
HTML
Javascript
la source
Cette solution n'étire pas l'image et remplit tout le conteneur, mais elle coupe une partie de l'image.
HTML:
CSS:
la source
Je vois que beaucoup de gens ont suggéré l' ajustement d'objet, ce qui est une bonne option. Mais si vous souhaitez que cela fonctionne également dans les anciens navigateurs , il existe une autre façon de le faire facilement.
C'est assez simple. L'approche que j'ai prise était de positionner l'image à l'intérieur du conteneur avec de l' absolu puis de la placer directement au centre en utilisant la combinaison:
Une fois au centre, je donne à l'image,
Cela donne à l'image l'effet de l'ajustement d'objet: couverture.
Voici une démonstration de la logique ci-dessus.
https://jsfiddle.net/furqan_694/s3xLe1gp/
Cette logique fonctionne dans tous les navigateurs.
la source
Ce qui suit fonctionne parfaitement pour moi:
la source
J'ai une bien meilleure solution sans avoir besoin de JavaScript. Il est entièrement réactif et je l'utilise beaucoup. Vous devez souvent adapter une image de n'importe quel rapport hauteur / largeur à un élément conteneur avec un rapport hauteur / largeur spécifié. Et avoir tout cela pleinement réactif est un must.
Vous pouvez définir la largeur max et la hauteur max indépendamment; l'image respectera la plus petite (en fonction des valeurs et du rapport hauteur / largeur de l'image). Vous pouvez également définir l'image pour qu'elle soit alignée comme vous le souhaitez (par exemple, pour une image de produit sur un fond blanc infini, vous pouvez la positionner facilement au centre en bas).
la source
Donnez la hauteur et la largeur dont vous avez besoin pour votre image au div qui contient la balise <img>. N'oubliez pas d'indiquer la hauteur / largeur dans la bonne balise de style.
Dans la balise <img>, donnez le
max-height
etmax-width
comme 100%.Vous pouvez ajouter les détails dans les classes appropriées après avoir bien compris.
la source
Le code ci-dessous est adapté des réponses précédentes et est testé par mes soins à l'aide d'une image appelée
storm.jpg
.Il s'agit du code HTML complet d'une page simple qui affiche l'image. Cela fonctionne parfaitement et a été testé par moi avec www.resizemybrowser.com. Mettez le code CSS en haut de votre code HTML, sous votre section head. Mettez le code d'image où vous voulez que l'image.
la source
la source
Vous devez indiquer au navigateur la hauteur de l'endroit où vous le placez:
la source
Modifier: le positionnement d'image basé sur une table précédente avait des problèmes dans Internet Explorer 11 (
max-height
ne fonctionne pas dans lesdisplay:table
éléments). Je l'ai remplacé par un positionnement en ligne qui fonctionne non seulement correctement dans Internet Explorer 7 et Internet Explorer 11, mais il nécessite également moins de code.Voici mon point de vue sur le sujet. Cela ne fonctionnera que si le conteneur a une taille spécifiée (
max-width
etmax-height
ne semble pas s'entendre avec des conteneurs qui n'ont pas de taille concrète), mais j'ai écrit le contenu CSS d'une manière qui permet de le réutiliser (ajouter unepicture-frame
classe etpx125
classe de taille à votre conteneur existant).En CSS:
Et en HTML:
DEMO
Afficher l'extrait de code
Edit: Amélioration supplémentaire possible en utilisant JavaScript (mise à l'échelle des images):
la source
line-height
. Si le texte alternatif a plus d'une ligne, il commencera à avoir l'air vraiment mauvais ...J'ai résolu ce problème en utilisant le code suivant:
la source
Comme indiqué ici , vous pouvez également utiliser des
vh
unités plutôt quemax-height: 100%
si cela ne fonctionne pas sur votre navigateur (comme Chrome):la source
vh
? et qu'est-ce qui ne fonctionne pas dans Chrome?max-height: xx%
(unité de pourcentage) ne fonctionne pas dans Chrome avec certains éléments commeimg
, mais l'vh
unité fonctionne. Cependant, les pourcentages travaillent avecheight
,width
,max-width
, etc.J'ai centré et mis à l'échelle proportionnellement une image à l'intérieur d'un lien hypertexte à la fois horizontalement et verticalement de cette façon:
Il a été testé dans Internet Explorer, Firefox et Safari.
Vous trouverez plus d'informations sur le centrage ici .
la source
La réponse acceptée de Thorn007 ne fonctionne pas lorsque l'image est trop petite .
Pour résoudre ce problème, j'ai ajouté un facteur d'échelle . De cette façon, il agrandit l'image et remplit le conteneur div.
Exemple:
Remarques:
-webkit-transform:scale(4); -webkit-transform-origin:left top;
dans le style.la source
Si vous utilisez Bootstrap, il vous suffit d'ajouter la
img-responsive
classe à laimg
balise:Images Bootstrap
la source
Une solution simple (correction en 4 étapes !!) qui semble fonctionner pour moi, est ci-dessous. L'exemple utilise la largeur pour déterminer la taille globale, mais vous pouvez également la retourner pour utiliser la hauteur à la place.
%
pour la taille relative ou la mise à l'échelle automatique (en fonction du conteneur d'images ou de l'affichage)px
(ou autre) pour une dimension statique ou définiePar exemple,
la source
Toutes les réponses fournies, y compris la réponse acceptée, ne fonctionnent que dans l'hypothèse où le
div
wrapper est de taille fixe. Voici donc comment le faire quelle que soit la taille dudiv
wrapper et c'est très utile si vous développez une page responsive:Écrivez ces déclarations dans votre
DIV
sélecteur:Mettez ensuite ces déclarations dans votre
IMG
sélecteur:TRÈS IMPORTANT:
La valeur de
maxHeight
doit être la même pour les sélecteursDIV
etIMG
.la source
Une solution simple consiste à utiliser flexbox. Définissez le CSS du conteneur pour:
Ajustez la largeur de l'image contenue à 100% et vous devriez obtenir une belle image centrée dans le conteneur avec les dimensions préservées.
la source
La solution est simple avec un peu de maths ...
Placez simplement l'image dans un div, puis dans le fichier HTML où vous spécifiez l'image. Définissez les valeurs de largeur et de hauteur en pourcentages à l'aide des valeurs de pixels de l'image pour calculer le rapport exact de la largeur à la hauteur.
Par exemple, supposons que vous ayez une image qui a une largeur de 200 pixels et une hauteur de 160 pixels. Vous pouvez dire en toute sécurité que la valeur de largeur sera de 100%, car il s'agit de la plus grande valeur. Pour calculer ensuite la valeur de la hauteur, il vous suffit de diviser la hauteur par la largeur qui donne la valeur en pourcentage de 80%. Dans le code, cela ressemblera à ceci ...
la source
La façon la plus simple de le faire est d'utiliser
object-fit
:Si vous utilisez Bootstrap, ajoutez simplement la
img-responsive
classe et passez àla source
Vérifiez ma réponse, Rendez une image réactive - la manière la plus simple -
la source
Ou vous pouvez simplement utiliser:
Maintenant, l'image prendra tout l'espace du div.
la source