Je travaille avec des images et j'ai rencontré un problème de rapport hauteur / largeur.
<img src="big_image.jpg" width="900" height="600" alt="" />
Comme vous pouvez le voir, height
et width
sont déjà spécifiés. J'ai ajouté une règle CSS pour les images:
img {
max-width:500px;
}
Mais pour big_image.jpg
, je reçois width=500
et height=600
. Comment définir des images à redimensionner, tout en conservant leurs proportions.
css
image
aspect-ratio
Moonvader
la source
la source
<img>
qui comprend lui-même une largeur et une hauteur et je pense que cela signifie que vous devez utiliser!important
pour contourner les informations de largeur / hauteur du tag.!important
n'est pas nécessaire.J'ai eu du mal avec ce problème, et j'ai finalement trouvé cette solution simple:
Vous pouvez ajuster la largeur et la hauteur en fonction de vos besoins, et la propriété d'ajustement d'objet fera le recadrage pour vous.
À votre santé.
la source
object-fit
est fantastique, super astuce! Il existe de belles bibliothèques polyfill si quelqu'un se pose des questions sur la compatibilité IE.object-fit: contain
et spécifier une largeur ou une hauteur!Les solutions ci-dessous permettront d'augmenter et de réduire l'échelle de l'image , selon la largeur de la boîte parent.
Toutes les images ont un conteneur parent avec une largeur fixe à des fins de démonstration uniquement . En production, ce sera la largeur de la boîte parent.
Meilleure pratique (2018):
Cette solution indique au navigateur de rendre l'image avec la largeur maximale disponible et d'ajuster la hauteur en pourcentage de cette largeur.
Solution plus sophistiquée:
Avec la solution plus sophistiquée, vous pourrez recadrer l'image quelle que soit sa taille et ajouter une couleur d'arrière-plan pour compenser le recadrage.
Pour la ligne spécifiant le remplissage, vous devez calculer le rapport d'aspect de l'image, par exemple:
Ainsi, le rembourrage supérieur = 34,37%.
la source
!important
soit nécessaire ici.La propriété background-size est ie> = 9 seulement, mais si cela vous convient, vous pouvez utiliser un div avec
background-image
et définirbackground-size: contain
:Maintenant, vous pouvez simplement définir la taille de votre div à tout ce que vous voulez et non seulement l'image gardera son rapport d'aspect, elle sera également centralisée à la fois verticalement et horizontalement dans le div. N'oubliez pas de définir les tailles sur le CSS, car les divs n'ont pas l'attribut width / height sur la balise elle-même.
Cette approche est différente de la réponse des setecs, en utilisant cela, la zone d'image sera constante et définie par vous (en laissant des espaces vides horizontalement ou verticalement en fonction de la taille div et du rapport hauteur / largeur de l'image), tandis que la réponse des setecs vous donnera une boîte qui exactement taille de l'image mise à l'échelle (sans espaces vides).
Modifier: selon la documentation de taille d'arrière-plan MDN, vous pouvez simuler la propriété de taille d'arrière-plan dans IE8 à l'aide d'une déclaration de filtre propriétaire:
la source
Très similaire à certaines réponses ici, mais dans mon cas, j'avais des images qui étaient parfois plus hautes, parfois plus grandes.
Ce style a fonctionné comme un charme pour s'assurer que toutes les images utilisent tout l'espace disponible, gardent le rapport et non les coupes:
la source
object-fit
fonctionne pour moi ça marche dans tous les navigateurs?.img
classe est-elle sur le parent ou l'image? Pourriez-vous faire un jsfiddle avec un exemple pour les images portrait et paysage?Supprimez la propriété "height".
En spécifiant les deux, vous modifiez le rapport d'aspect de l'image. Le simple fait d'en définir un redimensionnera mais conservera le rapport hauteur / largeur.
Facultativement, pour limiter les surdimensionnements:
la source
height
attribut dans laimg
balise est que le navigateur ne peut pas calculer la quantité d'espace que l'image prendra avant de télécharger l'image. Cela rend la page plus lente à rendre et cela peut conduire à plus de "saut".Ajoutez simplement ceci à votre css, il se rétrécira et s'élargira automatiquement en conservant le rapport d'origine.
la source
100%
au lieu d'une valeur de pixel spécifique.display: block;
est inutile.Il n’existe aucun moyen standard de conserver le rapport d’aspect des images avec
width
,height
etmax-width
spécifié en même temps.Nous sommes donc obligés soit de préciser
width
etheight
d’empêcher les sauts de page lors du chargement des images, soit d’utilisermax-width
et non de spécifier les dimensions des images.Spécifier juste
width
(sansheight
) n'a généralement pas beaucoup de sens, mais vous pouvez essayer de remplacer l'height
attribut HTML en ajoutant une règle commeIMG {height: auto; }
dans votre feuille de style.Voir aussi le bug Firefox 392261 associé .
la source
!important
en CSS. C'est un hack qui finira par revenir vous hanter.!important
ici.Voici une solution:
Cela garantira que l'image couvre toujours l'ensemble du parent (mise à l'échelle vers le bas et vers le haut) et conserve le même rapport hauteur / largeur.
la source
Définissez la classe CSS de votre balise de conteneur d'image sur
image-class
:et ajoutez ceci à votre feuille de style CSS.
la source
Pour conserver une image réactive tout en imposant à l'image un certain rapport d'aspect, vous pouvez effectuer les opérations suivantes:
HTML:
Et SCSS:
Cela peut être utilisé pour appliquer un certain rapport d'aspect, quelle que soit la taille de l'image que les auteurs téléchargent.
Merci à @Kseso sur http://codepen.io/Kseso/pen/bfdhg . Vérifiez cette URL pour plus de ratios et un exemple de travail.
la source
border-radius
. Mais malheureusement, cela recadre l'image et ne fait pas si bien avec la création d'une bordure pour l'image dans la div autant que j'ai essayé.Pour forcer une image qui tient dans une taille exacte, vous n'avez pas besoin d'écrire trop de codes. C'est si simple
la source
https://jsfiddle.net/sot2qgj6/3/
Voici la réponse si vous voulez mettre une image avec un pourcentage de largeur fixe , mais pas un pixel de largeur fixe .
Et cela sera utile pour gérer différentes tailles d'écran .
Les astuces sont
padding-top
pour régler la hauteur à partir de la largeur.position: absolute
pour placer l'image dans l'espace de remplissage.max-height and max-width
pour vous assurer que l'image ne dépassera pas l'élément parent.display:block and margin: auto
pour centrer l'image.J'ai également commenté la plupart des astuces à l'intérieur du violon.
Je trouve également d'autres moyens d'y parvenir. Il n'y aura pas d'image réelle en html, donc je personnalise personnellement la première réponse quand j'ai besoin de l'élément "img" en html.
css simple en utilisant le fond http://jsfiddle.net/4660s79h/2/
image de fond avec mot en haut http://jsfiddle.net/4660s79h/1/
le concept pour utiliser la position absolue est d'ici http://www.w3schools.com/howto/howto_css_aspect_ratio.asp
la source
Vous pouvez utiliser ceci:
la source
Vous pouvez créer un div comme ceci:
Et utilisez ce CSS pour le styliser:
la source
Je suggérerais que pour une approche réactive, la meilleure pratique serait d'utiliser les unités de fenêtre et les attributs min / max comme suit:
la source
Cela fera rétrécir l'image si elle est trop grande pour la zone spécifiée (comme inconvénient, cela n'agrandira pas l'image).
La solution de setec est très bien pour "Shrink to Fit" en mode automatique. Mais, pour AGRANDIR de manière optimale pour tenir en mode 'auto', vous devez d'abord mettre l'image reçue dans un identifiant temporaire, vérifiez si elle peut être agrandie en hauteur ou en largeur (en fonction de son rapport d'aspect v / s le rapport d'aspect de votre bloc d'affichage),
Cette approche est utile lorsque les images reçues sont plus petites que la zone d'affichage. Vous devez les enregistrer sur votre serveur en taille originale petite plutôt que dans leur version étendue pour remplir votre boîte d'affichage plus grande afin d'économiser sur la taille et la bande passante.
la source
la source
Que diriez-vous d'utiliser un pseudo-élément pour l'alignement vertical? Ce moins de code est pour un carrousel mais je suppose que cela fonctionne sur tous les conteneurs de taille fixe. Il conservera le rapport hauteur / largeur et insérera @ barres gris-foncé en haut / en bas ou à gauche / écrire pour la dimension la plus courte. En attendant, l'image est centrée horizontalement par l'alignement du texte et verticalement par le pseudo-élément.
la source
Présentation plein écran:
Gardez à l'esprit que si la hauteur du port de vue est supérieure à l'image, l'image se dégradera naturellement par rapport à la différence.
la source
Je pense, enfin que c'est la meilleure solution, simple et simple :
la source