J'ai besoin de faire étirer cette image à la taille maximale possible sans la faire déborder <div>
ou biaiser l'image.
Je ne peux pas prédire le rapport hauteur / largeur de l'image, il n'y a donc aucun moyen de savoir s'il faut utiliser:
<img src="url" style="width: 100%;">
ou
<img src="url" style="height: 100%;">
Je ne peux pas utiliser les deux (c.-à-d. Style = "largeur: 100%; hauteur: 100%;") car cela étirera l'image pour l'adapter à <div>
.
Le <div>
a une taille définie en pourcentage de l'écran, ce qui est également imprévisible.
Réponses:
Mise à jour 2016:
Le navigateur moderne se comporte beaucoup mieux. Tout ce que vous devez faire est de régler la largeur de l'image à 100% ( démo )
Puisque vous ne connaissez pas le rapport hauteur / largeur, vous devrez utiliser des scripts. Voici comment je le ferais avec jQuery ( démo ):
CSS
HTML
Scénario
la source
width:auto
ouheight:auto
n'affecte pas l'affichage de vos images. En fait, de toutes les propriétés que vous appliquez à l'image, celamax-width: 100%
n'a aucun effet, et cela n'affecte que l'image du paysage. Mais surtout, votre réponse n'aide pas à étirer une petite image pour remplir un plus grand récipient.Il existe un moyen beaucoup plus simple de le faire en utilisant uniquement
CSS
etHTML
:HTML:
CSS:
Cela placera votre image comme arrière-plan et l'étirera pour l'adapter à la
div
taille sans distorsion.la source
background-size: cover;
est la vraie magie ici, et c'est CSS3 mais a un support de navigateur raisonnable sur les versions les plus récentes (voir: w3schools.com/cssref/css3_pr_background-size.asp )<div style="background-image: url('path/to/image.jpg');" class="fill"></div>
background-size: cover
ne conserve pas le rapport hauteur / largeur, les parties de l'image qui ne sont pas proportionnelles à l'élément sont rognées. Reportez-vous iciPas une solution parfaite, mais ce CSS pourrait aider. Le zoom est ce qui fait que ce code fonctionne, et le facteur devrait théoriquement être infini pour fonctionner idéalement pour les petites images - mais 2, 4 ou 8 fonctionnent très bien dans la plupart des cas.
la source
zoom
amour de Firefox!?zoom
implémenté, mais voici le lien de bogue pour référence future: bugzilla.mozilla.org/show_bug.cgi?id=390936Si vous le pouvez, utilisez des images d'arrière-plan et définissez
background-size: cover
. Cela fera que l'arrière-plan couvrira tout l'élément.CSS
Si vous êtes coincé avec l'utilisation d'images en ligne, il existe quelques options. Tout d'abord, il y a
ajustement aux objets
Cette propriété agit sur les images, vidéos et autres objets similaires à
background-size: cover
.CSS
Malheureusement, la prise en charge du navigateur n'est pas terrible avec IE jusqu'à la version 11 qui ne la prend pas en charge du tout. L'option suivante utilise jQuery
CSS + jQuery
HTML
CSS
Douane Plugin jQuery
Utilisez le plugin comme celui-ci
Il prendra une image, la définira comme image d'arrière-plan sur l'élément wrapper de l'image et supprimera le
img
balise du document. Enfin, vous pouvez utiliserCSS pur
Vous pouvez l'utiliser comme solution de rechange. L'image s'agrandira pour couvrir son conteneur, mais elle ne diminuera pas.
CSS
J'espère que cela pourrait aider quelqu'un, codage heureux!
la source
min-
et modifiéwidth: 100%; height: 100%;
et travaillé! solution géniale! +1 Merci!background-size: contain
est également utile si vous souhaitez qu'aucune image ne soit jamais écrêtée.zoom:0.001
à la solution Pure CSS pour réduire.Merci à CSS3
https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit
IE et EDGE comme toujours des étrangers: http://caniuse.com/#feat=object-fit
la source
Mise à jour 2019.
Vous pouvez maintenant utiliser la
object-fit
propriété css qui accepte les valeurs suivantes:fill | contain | cover | none | scale-down
https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit
Par exemple, vous pourriez avoir un conteneur contenant une image.
la source
C'est impossible avec juste HTML et CSS, ou du moins follement exotique et compliqué. Si vous êtes prêt à ajouter du javascript, voici une solution utilisant jQuery:
Cela redimensionnera l'image afin qu'elle tienne toujours à l'intérieur de l'élément parent, quelle que soit sa taille. Et comme il est lié à l'
$(window).resize()
événement, lorsque l'utilisateur redimensionne la fenêtre, l'image s'ajuste.Cela n'essaie pas de centrer l'image dans le conteneur, ce serait possible mais je suppose que ce n'est pas ce que vous recherchez.
la source
Réglez la largeur et la hauteur du
container
div extérieur . Ensuite, utilisez le style ci-dessous sur img:Cela vous aidera à garder un rapport d'aspect de votre img
la source
Si vous souhaitez définir une largeur ou une hauteur maximale (afin qu'elle ne soit pas très grande) tout en conservant le rapport hauteur / largeur des images, vous pouvez le faire:
la source
Je suis tombé sur cette question à la recherche d'un problème similaire. Je crée une page Web avec un design réactif et la largeur des éléments placés sur la page est définie sur un pourcentage de la largeur de l'écran. La hauteur est définie avec une valeur vw.
Puisque j'ajoute des articles avec PHP et un backend de base de données, le CSS pur était hors de question. Cependant, j'ai trouvé la solution jQuery / javascript un peu difficile, alors j'ai trouvé une solution soignée (donc je me pense au moins).
HTML (ou php)
En utilisant style = "", il est possible que PHP mette à jour ma page dynamiquement et le style CSS avec style = "" se retrouvera dans une image parfaitement couverte, mise à l'échelle pour couvrir la balise div dynamique.
la source
Vous pouvez utiliser
object-fit: cover;
sur le div parent.https://css-tricks.com/almanac/properties/o/object-fit/
la source
Pour étirer cette image à la taille maximale possible sans déborder ni l'incliner.
Appliquer...
styles à l'image.
la source
En utilisant cette méthode, vous pouvez remplir votre div avec le rapport variable d'image des divs et des images.
jQuery:
HTML:
CSS:
la source
Cela a fait l'affaire pour moi
la source
si vous travaillez avec le tag IMG, c'est facile.
J'ai fabriqué ça:
mais je n'ai pas trouvé comment le faire fonctionner avec #pic {background: url (img / menu.png)} Enyone? Merci
la source
J'ai eu un problème similaire. Je l'ai résolu avec seulement CSS .
Fondamentalement
Object-fit: cover
vous aide à réaliser la tâche de maintenir le rapport d'aspect tout en positionnant une image à l'intérieur d'un div.Mais le problème était
Object-fit: cover
ne fonctionnait pas dans IE et il prenait 100% de largeur et 100% de hauteur et le rapport d'aspect était déformé. En d'autres termes, l'effet de zoom d'image n'était pas là, ce que je voyais en chrome.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
HTML:
JSFiddle
... Et si vous souhaitez définir ou modifier l'image (en utilisant #foo comme exemple):
jQuery:
JavaScript:
la source
La plupart des solutions trouvées ici ont certaines limites: certaines ne fonctionnent pas dans IE (object-fit) ou dans des navigateurs plus anciens, d'autres solutions ne mettent pas à l'échelle les images (les rétrécissent uniquement), de nombreuses solutions ne prennent pas en charge le redimensionnement de la fenêtre et beaucoup le sont non générique, attendez-vous à une résolution ou à une mise en page fixes (portrait ou paysage)
Si l'utilisation de javascript et de jquery n'est pas un problème, j'ai cette solution basée sur le code de @Tatu Ulmanen. J'ai corrigé quelques problèmes et ajouté du code au cas où l'image serait chargée de manière dynamique et ne serait pas disponible au début. Fondamentalement, l'idée est d'avoir deux règles CSS différentes et de les appliquer si nécessaire: une lorsque la limitation est la hauteur, nous devons donc afficher des barres noires sur les côtés, et l'autre règle CSS lorsque la limitation est la largeur, nous devons donc afficher des barres noires en haut / en bas.
Pour un élément HTML comme:
la source