Faire une image de remplissage div complètement sans l'étirer
J'ai de grandes images de dimensions variables que nécessaire pour remplir complètement 240px par 300px conteneurs dans les deux dimensions. Voici ce que j'ai en ce moment, qui ne fonctionne que pour une seule dimension:
HTML
<div class="container">
<img src="http://placehold.it/300x1500">
</div>
<div class="container">
<img src="http://placehold.it/1500x300">
</div
CSS
.container {
height: 300px;
width: 240px;
background-color: red;
float: left;
overflow: hidden;
margin: 20px;
}
img {
max-width: 100%;
height: auto;
}
Les proportions devrait rester la même. Essentiellement, à l'échelle des images doit être coupée dans la largeur, tandis que les images doivent être coupés à la hauteur. Donc, juste de zoomer autant que nécessaire pour remplir le récipient.
Ne sais pas pourquoi je ne peux pas le faire fonctionner, j'ai besoin de JavaScript pour cela?
Edit: Pour être clair. J'ai besoin de tout ce rouge sur le violon disparu. Les images sont dynamiques, donc je ne peux pas utiliser le fond des images. Je suis ouvert à l'aide de JavaScript. Merci! 🙂
- ce n'est pas sûr de la croix-prise en charge du navigateur - jsfiddle.net/HsE6H/2
- Désolé, pourraient ne pas avoir été clair: j'ai besoin de l'image pour remplir l'ensemble de la div, de sorte que tous les "rouges" disparaît. Des idées? 🙂
- Vous ne serez pas en mesure de prendre des "grandes images de dimensions variables" et s'adapter parfaitement à un conteneur de dimensions fixes sans mise à l'échelle les deux axes à différents ratios. Si vous redimensionnez une image proportionnellement, puis les proportions de la source sera la même que celle de la cible.
- Comme
Blaise Swanwick
a dit qu'il n'est pas possible que parcss
vous avez besoin de redimensionner les images à l'aide de certains de côté de serveur de code et de manipulation de l'image de la bibliothèque. - Des idées comment aller à ce sujet? Très ouvert à des solutions de JS.
- On dirait que vous êtes à la recherche de l'objet de l'ajustement de la propriété, mais seulement 1 navigateur prend en charge: dev.opera.com/articles/view/css3-object-fit-object-position
- Double Possible de stackoverflow.com/questions/1891857/...
- ce n'est pas faire le travail pour vous ? jsfiddle.net/HsE6H/181 coupe de l'image trop large ou trop haut
Vous devez vous connecter pour publier un commentaire.
Redimensionnement automatique des Images pour les Adapter à un Div - Rendre le Travail CSS
Ici est une façon de le faire, démarrer avec le code HTML suivant:
et le CSS:
et la démo de violon: http://jsfiddle.net/audetwebdesign/QEpJH/
Lorsque vous avez une image orientée comme un portrait, vous avez besoin à l'échelle de la largeur à 100%. A l'inverse, lorsque l'image est paysage orientée, vous avez besoin à l'échelle de la hauteur.
Malheureusement, il n'y a pas de combinaison de sélecteurs CSS qui cible le ratio d'aspect de l'image, de sorte que vous ne pouvez pas utiliser les CSS pour choisir le bon de mise à l'échelle.
En outre, vous n'avez pas de moyen facile de centrage de l'image depuis le coin supérieur gauche de l'image est épinglé en haut à gauche du bloc contenant.
jQuery Helper
Vous pouvez utiliser les éléments suivants jQuery action pour déterminer à quelle classe définir en fonction des
sur le ratio d'aspect de l'image.
Pour chaque image dans
.container
, obtenir la hauteur et la largeur, de tester siwidth<height
et puis définissez la catégorie appropriée.Aussi, j'ai ajouté une case à prendre en compte le rapport d'aspect du bloc contenant.
Avant, j'avais supposé un carré de panneau d'affichage.
max-width
définir si l'utilisation de cette méthode.Pour ceux qui cherchent à faire ce qui n'a pas de dynamique des images, voici un tout-CSS solution à l'aide de background-image.
Le "background-size: cover" fait en sorte que l'image des échelles de couvrir l'ensemble de la div, tout en maintenant le ratio d'aspect. Le CSS peut également être déplacé vers un fichier CSS. Bien que si c'est générée dynamiquement, la propriété background-image devra rester dans l'attribut style.
Prendre la ligne: max-width:100% dans votre fichier CSS semble faire l'affaire.
Vous pouvez également ajouter > votre la fermeture de div dans votre fichier HTML peut rendre le code plus lisible.
Ici est un travail JSFiddle lien: http://jsfiddle.net/HsE6H/19/
Arrière-plan peut faire ce
2.
ou
display: none
que certains lecteurs d'écran d'ignorer les éléments avec ces styles.Vous devriez essayer ceci:
J'ai utilisé ce plugin qui comptes pour n'importe quel rapport. Il exige également imagesloaded plugin fonctionne. Ce serait utile pour de nombreuses images sur un site ayant besoin de ce traitement. Simple pour initier trop.
https://github.com/johnpolacek/imagefill.js/
Il fonctionne si vous ajoutez ce qui suit à la div parent pour img style;
https://jsfiddle.net/yrrncees/10/
Cela pourrait faire l'affaire:
Nous sommes allés sur le chemin d'un rapporteur d'angle d'application de l'aide d'une variation sur le jQuery approche ci-dessus. Puis, un de nos brillants collègues est venu avec un pur CSS approche. Voir cet exemple ici: https://jsfiddle.net/jeffturner/yrrncees/1/.
Essentiellement à l'aide de la hauteur de la ligne a résolu le problème pour nous. Pour ceux qui ne veulent pas de frapper le violon, les fragments de code sont:
La clé est dans l'utilisation de la hauteur de la ligne et de configuration du conteneur à faire de même.
Je suis tombé sur ce sujet parce que j'essayais de résoudre un problème similaire. Puis une ampoule a explosé dans ma tête et je n'arrivais pas à croire que ça a marché parce que c'était tellement simple et tellement évident.
CSS
Il suffit de régler le min-width et min-height à 100% et il y aura toujours redimensionner automatiquement pour s'adapter à la div, couper l'excédent de l'image. Pas de muss pas de chichi.
Utilisation d'une image comme Div fond a de nombreux inconvénients (manque de ALT pour le RÉFÉRENCEMENT). Au lieu de cela, utilisez
object-fit: cover;
dans la balise d'image style!Voici une autre solution que j'ai trouvé, que pas besoin de séparer les portraid, du paysage ou de l'écriture de scripts.
CSS
Ici, il est, il fonctionne bien...
https://jsfiddle.net/efirat/17bopn2q/2/
La solution suivante est très court et nettoyez-les si vous avez besoin d'insérer la balise img dans la balise div:
CSS:
HTML:
Aussi, si vous n'avez pas besoin d'utiliser un div, vous pouvez simplement écrire un encore plus courte css: