CSS: largeur ou hauteur 100% tout en conservant le rapport hauteur / largeur?
174
Actuellement, avec STYLE, je peux utiliser width: 100%et autosur la hauteur (ou vice versa), mais je ne peux toujours pas contraindre l'image dans une position spécifique, soit trop large ou trop haute, respectivement.
pouvez-vous publier un lien ou une capture d'écran pour montrer un exemple du problème?
Mauro
Réponses:
138
Si vous ne définissez qu'une seule dimension sur une image, le rapport hauteur / largeur de l'image sera toujours conservé.
Le problème est-il que l'image est plus grande / plus haute que vous préférez?
Vous pouvez le placer dans un DIV défini sur la hauteur / largeur maximale souhaitée pour l'image, puis définir overflow: hidden. Cela recadrerait tout ce que vous voulez.
Si une image est 100% large et hauteur: auto et que vous pensez qu'elle est trop haute, c'est précisément parce que le rapport hauteur / largeur est préservé. Vous devrez recadrer ou modifier le rapport hauteur / largeur.
Veuillez fournir plus d'informations sur ce que vous essayez d'accomplir et j'essaierai de vous aider davantage!
--- MODIFIER EN FONCTION DE LA RÉTROACTION ---
Connaissez-vous les propriétés max-width et max-height ? Vous pouvez toujours les définir à la place. Si vous ne définissez aucun minimum et que vous définissez une hauteur et une largeur maximales, votre image ne sera pas déformée (le rapport hauteur / largeur sera préservé) et ne sera pas plus grande que la dimension la plus longue et atteindra son maximum.
si l'image est plus haute que large, j'utiliserais height = 100% et width = auto, si l'image est plus large que haute, j'utiliserais width = 100%, height = auto. je ne sais simplement jamais quel est le cas? le recadrage par hauteur / largeur maximale fonctionnerait - mais s'il y a un moyen de ne pas - je préférerais l'utiliser ...
Weston Watson
2
Eh bien, concevez-vous une mise en page fluide ou à largeur fixe? Si vous êtes dans une mise en page à largeur fixe, vous pouvez toujours définir votre largeur à 100% et l'image sera mise à l'échelle de manière appropriée, mais elle peut être très haute. Essayez-vous de positionner une image dans un bloc de texte, ou de l'utiliser comme bannière ou comme arrière-plan? Si vous pouviez montrer la page où vous prévoyez de l'utiliser ou décrire le contexte, je pourrais vous aider davantage. Voir également les modifications ci-dessus.
Andrew
l'utilisation de max-height sur mon img m'a permis de contraindre les images tout en conservant leur rapport hauteur / largeur
northamerican
2
object-fitpas d'Utilisation?
LeeGee
77
Quelques années plus tard, à la recherche de la même exigence, j'ai trouvé une option CSS utilisant background-size.
Il est censé fonctionner dans les navigateurs modernes (IE9 +).
#container{
width:100px;/*or 70%, or what you want*/
height:200px;/*or 70%, or what you want*/
background-size: cover;
background-position: center;
background-repeat:no-repeat;}
la solution idéale, qui n'est malheureusement pas prise en charge par IE8 :(
japrescott
C'est la solution idéale, mais si vous faites cela dans des carrousels, les images deviennent vierges pendant une seconde après chaque diapositive.
kloddant
58
En définissant la max-widthpropriété CSS sur 100%, une image remplira la largeur de son élément parent, mais ne sera pas rendue plus grande que sa taille réelle, préservant ainsi la résolution.
La définition de la heightpropriété sur autoconserve le rapport hauteur / largeur de l'image, l'utilisation de cette technique permet de remplacer la hauteur statique et permet à l'image de fléchir proportionnellement dans toutes les directions.
Merci de me le rappeler object-fit. Exactement ce dont j'avais besoin.
Ash Clarke
5
C'est une solution idéale, mais malheureusement elle object-fitn'est prise en charge dans aucune version d'IE ni d'Edge à partir du 28 mars 2017.
Simon G
2
Depuis mars 2019, cette fonctionnalité est prise en charge à 90% - cela devrait donc être considéré comme la bonne réponse.
Hampus Ahlgren
Notez également que object-fit: containet que vous object-fit: covern'aimez pas width100% - vous devriez utiliser des unités en béton commepx
FlameStorm
J'ai essayé object-fitavec max-widthet max-heightcomme utilisé dans d'autres réponses, mais cela n'a pas fonctionné. cela fonctionne parfaitement pour les tailles d'image aléatoires même avec widthetheight 100%
Halfacht
27
Eu le même problème. Le problème pour moi était que la propriété height était également déjà définie ailleurs, corrigée comme ceci:
Exactement ce que je cherchais. Merci un million de mec.
London Smith
Parfait là où la taille de l'image peut être plus petite ou plus grande que le div parent, et elle sera redimensionnée en un centre parfait avec une largeur maximale OU une hauteur maximale. Vous n'êtes pas obligé d'utiliser l'image comme arrière-plan qui ne fera que surcharger le parent s'il est réglé sur "cover".
a voté pour la première partie. la deuxième partie n'a pas fonctionné pour moi ... :(
Vikas Bansal
Juste un problème - si l'image est plus grande que 100% du conteneur, elle se répandra et nécessitera des barres de défilement ou un recadrage. Je ne sais pas comment obtenir la même chose tout en limitant la taille maximale du conteneur. Si vous définissez la largeur et la hauteur maximales, cela ne préserve plus le rapport hauteur / largeur.
JustAMartin
5
L'une des réponses comprend la taille de fond: contenir instruction contain css que j'aime beaucoup car c'est une déclaration simple de ce que vous voulez faire et le navigateur le fait simplement.
Malheureusement, tôt ou tard, vous devrez appliquer une ombre qui ne fonctionnera malheureusement pas bien avec les solutions d'image d'arrière-plan.
Disons que vous avez un conteneur qui est réactif mais qui a des limites bien définies pour la largeur et la hauteur min et max.
Et le conteneur a une image qui doit être consciente des pixels de la hauteur du conteneur afin d'éviter d'obtenir une image très haute qui déborde ou est rognée.
L'img doit également définir une largeur maximale de 100% afin d'abord de permettre le rendu de plus petites largeurs et d'autre part d'être basé sur un pourcentage, ce qui le rend paramétrique.
Merci pour ces solutions et lien jsdfiddle. Cela a fonctionné pour ma galerie d'images de réaction où j'utilise les deux: des images avec une plus grande hauteur et des images avec une plus grande largeur. :)
Eugenijus S.
4
Je l'utilise pour un conteneur rectangulaire avec une hauteur et une largeur fixes, mais avec des images de tailles différentes.
Il est préférable d'utiliser auto sur la dimension qui doit respecter le rapport hauteur / largeur. Si vous ne définissez pas l'autre propriété sur auto, la plupart des navigateurs supposeront de nos jours que vous voulez respecter le rapport d'aspect, mais pas tous (IE10 sur Windows Phone 8 ne le fait pas, par exemple)
C'est une solution très simple que j'ai trouvée après avoir suivi le lien de conca et examiné la taille de l'arrière-plan. Il fait sauter l'image vers le haut, puis la place au centre du conteneur extérieur sans la mettre à l'échelle.
Même si ce n'est pas correct car vous utilisez le remplacement important de la hauteur, si vous utilisez un CMS comme WordPress qui définit la hauteur et la largeur pour vous, cela fonctionne bien.
... rendra l'image aussi large que possible, en conservant le rapport hauteur / largeur, mais sans être plus large ou plus haut que 100% de la fenêtre.
Utilisez JQuery ou quelque chose comme ça, car CSS est une idée fausse générale (les innombrables questions et discussions ici sur les objectifs de conception simples le montrent).
Il n'est pas possible avec CSS de faire ce que vous semblez souhaiter: l'image doit avoir une largeur de 100%, mais si cette largeur entraîne une hauteur trop grande, une hauteur maximale doit s'appliquer - et bien sûr les proportions correctes doivent être conservé.
Réponses:
Si vous ne définissez qu'une seule dimension sur une image, le rapport hauteur / largeur de l'image sera toujours conservé.
Le problème est-il que l'image est plus grande / plus haute que vous préférez?
Vous pouvez le placer dans un DIV défini sur la hauteur / largeur maximale souhaitée pour l'image, puis définir overflow: hidden. Cela recadrerait tout ce que vous voulez.
Si une image est 100% large et hauteur: auto et que vous pensez qu'elle est trop haute, c'est précisément parce que le rapport hauteur / largeur est préservé. Vous devrez recadrer ou modifier le rapport hauteur / largeur.
Veuillez fournir plus d'informations sur ce que vous essayez d'accomplir et j'essaierai de vous aider davantage!
--- MODIFIER EN FONCTION DE LA RÉTROACTION ---
Connaissez-vous les propriétés max-width et max-height ? Vous pouvez toujours les définir à la place. Si vous ne définissez aucun minimum et que vous définissez une hauteur et une largeur maximales, votre image ne sera pas déformée (le rapport hauteur / largeur sera préservé) et ne sera pas plus grande que la dimension la plus longue et atteindra son maximum.
la source
object-fit
pas d'Utilisation?Quelques années plus tard, à la recherche de la même exigence, j'ai trouvé une option CSS utilisant background-size.
Il est censé fonctionner dans les navigateurs modernes (IE9 +).
Et le style:
Le référence: http://www.w3schools.com/cssref/css3_pr_background-size.asp
Et la démo: http://www.w3schools.com/cssref/playit.asp?filename=playcss_background-size
la source
En définissant la
max-width
propriété CSS sur100%
, une image remplira la largeur de son élément parent, mais ne sera pas rendue plus grande que sa taille réelle, préservant ainsi la résolution.La définition de la
height
propriété surauto
conserve le rapport hauteur / largeur de l'image, l'utilisation de cette technique permet de remplacer la hauteur statique et permet à l'image de fléchir proportionnellement dans toutes les directions.la source
height
àauto
cause refusion lorsque l' image est flottanteSolution de travail simple et élégante:
la source
object-fit
. Exactement ce dont j'avais besoin.object-fit
n'est prise en charge dans aucune version d'IE ni d'Edge à partir du 28 mars 2017.object-fit: contain
et que vousobject-fit: cover
n'aimez paswidth
100% - vous devriez utiliser des unités en béton commepx
object-fit
avecmax-width
etmax-height
comme utilisé dans d'autres réponses, mais cela n'a pas fonctionné. cela fonctionne parfaitement pour les tailles d'image aléatoires même avecwidth
etheight 100%
Eu le même problème. Le problème pour moi était que la propriété height était également déjà définie ailleurs, corrigée comme ceci:
la source
Solution simple:
En passant, si vous souhaitez le centrer dans un conteneur div parent, vous pouvez ajouter ces propriétés css:
Cela devrait vraiment fonctionner comme prévu :)
la source
L'une des réponses comprend la taille de fond: contenir instruction contain css que j'aime beaucoup car c'est une déclaration simple de ce que vous voulez faire et le navigateur le fait simplement.
Malheureusement, tôt ou tard, vous devrez appliquer une ombre qui ne fonctionnera malheureusement pas bien avec les solutions d'image d'arrière-plan.
Disons que vous avez un conteneur qui est réactif mais qui a des limites bien définies pour la largeur et la hauteur min et max.
Et le conteneur a une image qui doit être consciente des pixels de la hauteur du conteneur afin d'éviter d'obtenir une image très haute qui déborde ou est rognée.
L'img doit également définir une largeur maximale de 100% afin d'abord de permettre le rendu de plus petites largeurs et d'autre part d'être basé sur un pourcentage, ce qui le rend paramétrique.
Notez qu'il a une belle ombre;)
Profitez d'un exemple en direct sur ce violon: http://jsfiddle.net/pligor/gx8qthqL/2/
la source
Je l'utilise pour un conteneur rectangulaire avec une hauteur et une largeur fixes, mais avec des images de tailles différentes.
la source
Il est préférable d'utiliser auto sur la dimension qui doit respecter le rapport hauteur / largeur. Si vous ne définissez pas l'autre propriété sur auto, la plupart des navigateurs supposeront de nos jours que vous voulez respecter le rapport d'aspect, mais pas tous (IE10 sur Windows Phone 8 ne le fait pas, par exemple)
la source
C'est une solution très simple que j'ai trouvée après avoir suivi le lien de conca et examiné la taille de l'arrière-plan. Il fait sauter l'image vers le haut, puis la place au centre du conteneur extérieur sans la mettre à l'échelle.
la source
background-size: contain;
pour adapter l'image dans un arrière-plan.Pas pour sauter dans un vieux problème, mais ...
Même si ce n'est pas correct car vous utilisez le remplacement important de la hauteur, si vous utilisez un CMS comme WordPress qui définit la hauteur et la largeur pour vous, cela fonctionne bien.
la source
De nos jours , on peut utiliser
vw
et lesvh
unités, ce qui représente 1% du v iewport a w idth et h huit , respectivement.https://css-tricks.com/fun-viewport-units/
Ainsi, par exemple:
... rendra l'image aussi large que possible, en conservant le rapport hauteur / largeur, mais sans être plus large ou plus haut que 100% de la fenêtre.
la source
Utilisez JQuery ou quelque chose comme ça, car CSS est une idée fausse générale (les innombrables questions et discussions ici sur les objectifs de conception simples le montrent).
Il n'est pas possible avec CSS de faire ce que vous semblez souhaiter: l'image doit avoir une largeur de 100%, mais si cette largeur entraîne une hauteur trop grande, une hauteur maximale doit s'appliquer - et bien sûr les proportions correctes doivent être conservé.
la source
Je pense que c'est ce que vous cherchez, je le cherchais moi-même, mais je m'en suis souvenu à nouveau avant de trouver le code.
l'évolution numérique est en marche.
la source