Réponse originale:
Si vous êtes prêt à opter pour CSS3, vous pouvez utiliser la propriété de translation css3. Redimensionner en fonction de ce qui est plus grand. Si votre hauteur est plus grande et la largeur est plus petite que le conteneur, la largeur sera étirée à 100% et la hauteur sera rognée des deux côtés. Le même principe s'applique également pour une largeur plus grande.
Votre besoin, HTML :
Et CSS :
.img-wrap {
width: 200px;
height: 150px;
position: relative;
display: inline-block;
overflow: hidden;
margin: 0;
}
div > img {
display: block;
position: absolute;
top: 50%;
left: 50%;
min-height: 100%;
min-width: 100%;
transform: translate(-50%, -50%);
}
Voilà! Fonctionne : http://jsfiddle.net/shekhardesigner/aYrhG/
Explication
Le DIV est positionné en relative
. Cela signifie que tous les éléments enfants recevront les coordonnées de départ (origines) à partir desquelles ce DIV commence.
L'image est définie comme un élément BLOC, min-width/height
tous les deux réglés sur 100%, ce qui signifie que pour redimensionner l'image indépendamment de sa taille pour qu'elle soit au minimum de 100% de son parent. min
est le mot clé. Si en min-hauteur, la hauteur de l'image dépasse la hauteur du parent, pas de problème. Il cherchera si la min-largeur et essayera de définir la hauteur minimale à 100% des parents. Les deux vont dans les deux sens. Cela garantit qu'il n'y a pas d'espaces autour de la div mais que l'image est toujours un peu plus grande et est rognée par overflow:hidden;
Maintenant, image
, celle-ci est positionnée en absolute
avec left:50%
et top:50%
. Cela signifie pousser l'image de 50% vers le haut et la gauche en veillant à ce que l'origine soit prise depuis le DIV. Les unités left/top sont mesurées à partir du parent.
Le moment magique:
transform: translate(-50%, -50%);
Ensuite, cette fonction translate
de la propriété transform
de CSS3 déplace/repositionne un élément en question. Cette propriété traite l'élément appliqué donc les valeurs (x, y) OU (-50%, -50%) signifient déplacer l'image vers la gauche négative de 50% de sa taille d'image et la déplacer vers le haut négatif de 50% de sa taille d'image.
Par exemple, si la taille de l'image était de 200px × 150px, transform:translate(-50%, -50%)
calculera translate(-100px, -75px). L'unité % est utile lorsque nous avons diverses tailles d'images.
Il s'agit simplement d'une astuce pour trouver le centre de l'image et du DIV parent et les faire correspondre.
Désolé pour avoir pris trop de temps pour expliquer!
Ressources pour en savoir plus: