Existe-t-il une solution css uniquement pour mettre à l'échelle une image dans un cadre de sélection (en conservant les proportions)? Cela fonctionne si l'image est plus grande que le conteneur:
img {
max-width: 100%;
max-height: 100%;
}
Exemple:
- Cas d'utilisation 1 (fonctionne): http://jsfiddle.net/Jp5AQ/2/
- Cas d'utilisation 2 (fonctionne): http://jsfiddle.net/Jp5AQ/3/
Mais je veux agrandir l'image jusqu'à ce qu'une dimension soit 100% du conteneur.
- Cas d'utilisation 3 (ne fonctionne pas): http://jsfiddle.net/Jp5AQ/4/
Réponses:
Remarque: Même s'il s'agit de la réponse acceptée, la réponse ci - dessous est plus précise et est actuellement prise en charge dans tous les navigateurs si vous avez la possibilité d'utiliser une image d'arrière-plan.
Non, il n'y a pas de moyen CSS uniquement pour le faire dans les deux sens. Vous pourriez ajouter
Pour que l'élément an ait toujours une largeur de 100% et ajuste automatiquement la hauteur au rapport hauteur / largeur, ou à l'inverse:
pour toujours mettre à l'échelle la hauteur maximale et la largeur relative. Pour faire les deux, vous devrez déterminer si le rapport hauteur / largeur est supérieur ou inférieur à celui de son conteneur, et CSS ne peut pas le faire.
La raison en est que CSS ne sait pas à quoi ressemble la page. Il définit les règles à l'avance, mais ce n'est qu'après que les éléments sont rendus et que vous savez exactement à quelles tailles et à quels rapports vous avez affaire. Le seul moyen de détecter cela est d'utiliser JavaScript.
Bien que vous ne cherchiez pas de solution JS, j'en ajouterai quand même une si quelqu'un en a besoin. Le moyen le plus simple de gérer cela avec JavaScript est d'ajouter une classe basée sur la différence de ratio. Si le rapport largeur / hauteur de la boîte est supérieur à celui de l'image, ajoutez la classe "fillwidth", sinon ajoutez la classe "fillheight".
Afficher l'extrait de code
la source
Grâce à CSS3, il existe une solution!
La solution consiste à mettre l'image en tant que
background-image
, puis à définir lebackground-size
surcontain
.HTML
CSS
Testez-le ici: http://www.w3schools.com/cssref/playit.asp?filename=playcss_background-size&preval=contain
Compatibilité totale avec les derniers navigateurs: http://caniuse.com/background-img-opts
Pour aligner le div au centre, vous pouvez utiliser cette variante:
la source
<div class=image style="background-image: url('/images/foo.jpg');"></div>
. Tous les autres styles doivent être appliqués avec CSS.Voici une solution hackish que j'ai découverte:
Cela agrandira l'image dix fois, mais la limitera à 10% de sa taille finale, la liant ainsi au conteneur.
Contrairement à la
background-image
solution, cela fonctionnera également avec<video>
éléments.Exemple interactif:
Afficher l'extrait de code
la source
transform-origin: top left
pour arrêter le recadrage. / ZombieAujourd'hui, dites simplement object-fit: contenir. Le support est tout sauf IE: http://caniuse.com/#feat=object-fit
la source
object-fit
est encore en cours de développement pour cela.object-fit
: stackoverflow.com/a/46456673/474031html:
css:
la source
Vous pouvez accomplir cela avec du CSS pur et une prise en charge complète du navigateur, à la fois pour des images verticales et horizontales en même temps.
Voici un extrait de code qui fonctionne dans Chrome, Firefox et Safari (à la fois en utilisant
object-fit: scale-down
et sans l'utiliser):la source
Une autre solution sans image de fond et sans besoin de conteneur (bien que les tailles maximales du cadre de sélection doivent être connues):
Si l'utilisation d'un conteneur est requise, alors la largeur maximale et la hauteur maximale peuvent être définies sur 100%:
Pour cela, vous auriez quelque chose comme:
la source
Cet exemple permet d'étirer l'image proportionnellement pour l'adapter à toute la fenêtre. Une improvisation au code correct ci-dessus consiste à ajouter
$( window ).resize(function(){});
Il y a deux conditions si. Le premier vérifie si la hauteur de l'image est inférieure au div et applique la
.fillheight
classe tandis que le suivant vérifie la largeur et applique la.fillwidth
classe. Dans les deux cas, l'autre classe est supprimée en utilisant.removeClass()
Voici le CSS
Vous pouvez remplacer
100vh
par100%
si vous souhaitez étirer l'image par dans un div. Cet exemple permet d'étirer l'image proportionnellement pour l'adapter à toute la fenêtre.la source
Cherchez-vous à évoluer vers le haut mais pas vers le bas?
Cependant, cela ne verrouille pas le rapport hauteur / largeur.
la source
J'ai utilisé une table pour centrer l'image à l'intérieur de la boîte. Il conserve le rapport hauteur / largeur et redimensionne l'image d'une manière totalement à l'intérieur de la boîte. Si l'image est plus petite que la boîte, elle est affichée telle qu'elle est au centre. Le code ci-dessous utilise une largeur de 40 px et une zone de hauteur de 40 px. (Je ne sais pas si cela fonctionne bien car je l'ai supprimé d'un autre code plus complexe et l'ai simplifié un peu)
CSS:
HTML:
la source
Le moyen le plus propre et le plus simple de le faire:
Tout d'abord un peu de CSS:
Le HTML:
Cela devrait faire l'affaire!
la source
Cela m'a aidé:
Ensuite sur l'élément (vous pouvez utiliser javascript ou media queries pour ajouter de la réactivité):
J'espère que cela t'aides!
la source
J'édite ma réponse pour expliquer davantage ma soluton car j'ai un vote négatif.
Avec les styles définis comme indiqué ci-dessus en css, maintenant le div html suivant montrera que l'image s'ajustera toujours dans le sens de la largeur et ajustera le rapport hauteur / largeur élevé. Ainsi, l'image sera mise à l' échelle pour s'adapter à une boîte englobante comme demandé dans la question.
la source