J'ai trouvé ce fil - Comment étirer une image pour remplir une <div> tout en conservant le rapport hauteur / largeur de l'image? - ce n'est pas tout à fait ce que je veux.
J'ai un div avec une certaine taille et une image à l'intérieur. je veux toujours remplir le div avec l'image, que l'image soit en mode paysage ou portrait. Et peu importe si l'image est coupée (le div lui-même a le débordement caché).
Donc, si l'image est portrait, je veux width
qu'elle soit 100%
et height:auto
ainsi elle reste proportionnée. Si l'image est en paysage, je veux height
qu'elle soit 100%
et que l' width to be
auto`. Cela semble compliqué, non?
<div class="container">
<img src="some-image.jpg" alt="Could be portrait or landscape"/>
</div>
Comme je ne sais pas comment faire, j'ai simplement créé une image rapide de ce que je veux dire. Je ne peux même pas le décrire correctement.
Donc, je suppose que je ne suis pas le premier à poser cette question. Cependant, je n'ai pas vraiment trouvé de solution à cela. Il y a peut-être une nouvelle façon CSS3 de faire cela - je pense à flex-box. Une idée? Peut-être que c'est encore plus facile que ce à quoi je m'attendais?
Réponses:
Si je comprends correctement ce que vous voulez, vous pouvez laisser les attributs de largeur et de hauteur hors de l'image pour conserver les proportions et utiliser flexbox pour effectuer le centrage à votre place.
JSFiddle ici
J'ai testé cela avec succès dans IE9, Chrome 31 et Opera 18. Mais aucun autre navigateur n'a été testé. Comme toujours, vous devez tenir compte de vos besoins d'assistance particuliers.
la source
.fill img { min-height:100%; min-width: 100%; object-fit: cover; }
Il est un peu tard, mais j'ai juste eu le même problème et je l'ai finalement résolu avec l'aide d'un autre post stackoverflow ( https://stackoverflow.com/a/29103071 ).
J'espère que cela aide encore quelqu'un.
Ps: Fonctionne également avec les propriétés css max-height , max-width , min-width et min-height . Il est particulièrement pratique d'utiliser des unités de longueur comme 100% ou 100vh / 100vw pour remplir le conteneur ou toute la fenêtre du navigateur.
la source
object-position
règle à cette classe sera utile ici. Juste un petit mot.Une vieille question mais qui mérite une mise à jour car il existe maintenant un moyen.
La bonne réponse basée sur CSS est d'utiliser
object-fit: cover
, ce qui fonctionne commebackground-size: cover
. Le positionnement serait pris en charge par l'object-position
attribut, qui par défaut est centré.Mais il n'y a pas de support pour cela dans les navigateurs IE / Edge, ou Android <4.4.4. De plus,
object-position
n'est pas pris en charge par Safari, iOS ou OSX. Les polyfills existent, les images ajustées aux objets semblent offrir le meilleur support.Pour plus de détails sur le fonctionnement de la propriété, consultez l' article CSS Tricks sur
object-fit
pour obtenir des explications et une démonstration.la source
Cela devrait le faire:
la source
Toutes les réponses ci-dessous ont une largeur et une hauteur fixes, ce qui rend la solution «non réactive».
Pour obtenir le résultat mais garder l'image réactive, j'ai utilisé ce qui suit:
HTML:
la source
Vous pouvez y parvenir en utilisant les propriétés css flex. Veuillez consulter le code ci-dessous
la source
Pensez à utiliser
background-size: cover
(IE9 +) en conjonction avecbackground-image
. Pour IE8-, il existe un polyfill .la source
background-size
sens qu'avecbackground-image
spécifié aussi (j'ai mis à jour ma réponse en conséquence). Cela ne s'applique pas auxIMG
éléments.Essaye ça:
J'espère que cela t'aides
la source
Vous pouvez utiliser div pour y parvenir. sans balise img :) j'espère que cela vous aidera.
la source
La seule façon dont j'ai réalisé le scénario du «meilleur des cas» décrit, a été de mettre l'image en arrière-plan:
la source
Voici une réponse avec prise en charge de l'utilisation d'IE
object-fit
pour ne pas perdre de ratioUtilisation d'un simple extrait de code JS pour détecter si le
object-fit
est pris en charge, puis remplacez leimg
par unsvg
Remarque: il existe également quelques
object-fit
polyfills qui ferontobject-fit
fonctionneront.Voici quelques exemples:
la source
Ici vous avez mon exemple de travail. J'ai utilisé une astuce qui consiste à définir l'image comme arrière-plan du conteneur div avec background-size: cover et background-position: center center
J'ai placé l'image avec une largeur: 100% et une opacité: 0 la rendant invisible. Notez que j'affiche mon image uniquement parce que j'ai un intérêt particulier à appeler l'événement de clic enfant.
Veuillez noter que bien que j'utilise angulaire, cela n'a aucune importance.
Le résultat est celui que vous définissez comme optimal dans tous les cas
la source
Le CSS
object-fit: cover
etobject-position: left center
les valeurs de propriété résolvent désormais ce problème.la source
la source
Fixez simplement la hauteur de l'image et indiquez width = auto
la source