424 votes

CSS affiche une image redimensionnée et recadrée

Je veux afficher une image à partir d'une URL avec une certaine largeur et hauteur, même si elle a un rapport de taille différent. Je veux donc redimensionner (en conservant le rapport) puis couper l'image à la taille que je souhaite.

Je peux redimensionner avec html img et je peux couper avec background-image .
Comment puis-je faire les deux ?

Exemple :

Cette image :

enter image description here

A la taille 800x600 pixels et je veux montrer comme une image de 200x100 pixels

Avec img Je peux redimensionner l'image 200x150px :

<img 
    style="width: 200px; height: 150px;" 
    src="http://i.stack.imgur.com/wPh0S.jpg">

Ça me donne ça :

<img style="width: 200px; height: 150px;" src="https://i.stack.imgur.com/wPh0S.jpg">

Et avec background-image Je peux couper l'image 200x100 pixels.

<div 
    style="background-image:
           url('https://i.stack.imgur.com/wPh0S.jpg'); 
    width:200px; 
    height:100px; 
    background-position:center;">&nbsp;</div>

Donne-moi :

    <div style="background-image:url('https://i.stack.imgur.com/wPh0S.jpg'); width:200px; height:100px; background-position:center;">&nbsp;</div>

Comment puis-je faire les deux ?
Redimensionner l'image puis la couper à la taille que je souhaite ?

547voto

sanchothefat Points 6402

Vous pouvez utiliser une combinaison des deux méthodes, par exemple.

    .crop {
        width: 200px;
        height: 150px;
        overflow: hidden;
    }

    .crop img {
        width: 400px;
        height: 300px;
        margin: -75px 0 0 -100px;
    }

    <div class="crop">
        <img src="https://i.stack.imgur.com/wPh0S.jpg" alt="Donald Duck">
    </div>

Vous pouvez utiliser le négatif margin pour déplacer l'image à l'intérieur du <div/> .

9 votes

Notez que si vous définissez position:relative sur l'image contenue, vous devrez définir position:relative sur la div qui la contient. Si vous ne le faites pas, j'ai constaté qu'IE ne coupe pas réellement l'image.

0 votes

Supprimez également la hauteur de la classe .crop img

0 votes

@waqar-alamgir Cela ne fonctionnerait pas si vous supprimiez la déclaration de la hauteur.

154voto

Joel Purra Points 7366

Grâce à CSS3, il est possible de modifier la taille d'une icône background-image con background-size en remplissant les deux objectifs à la fois.

Hay une série d'exemples sur css3.info .

Mis en œuvre sur la base de votre exemple en utilisant donald_duck_4.jpg . Dans ce cas, background-size: cover; est exactement ce que vous voulez - il correspond à la background-image pour couvrir la totalité de la surface du contenant <div> et clipser l'excédent (en fonction du ratio).

.with-bg-size {
  background-image: url('https://i.stack.imgur.com/wPh0S.jpg');
  width: 200px;
  height: 100px;
  background-position: center;
  /* Make the background image cover the area of the <div>, and clip the excess */
  background-size: cover;
}

<div class="with-bg-size">Donald Duck!</div>

css3 image d'arrière-plan taille de fond

1 votes

Excellente solution, mais un bémol : elle n'est pas compatible avec IE <9 (si cela compte encore pour quelqu'un). De plus, je voulais mentionner que si vous remplacez cover par contain pour background-size, l'image sera mise à l'échelle, mais pas rognée.

5 votes

Pour <img /> balises, regardez object-fit: cover et les valeurs connexes de l Valeurs d'image CSS et spécification du module de contenu remplacé de niveau 3 .

22voto

Kelly Anderson Points 200
.imgContainer {
  overflow: hidden;
  width: 200px;
  height: 100px;
}
.imgContainer img {
  width: 200px;
  height: 120px;
}

<div class="imgContainer">
  <img src="imageSrc" />
</div>

Le div contenant recadre essentiellement l'image en masquant le débordement.

14voto

user3164927 Points 11
img {
  position: absolute;
  clip: rect(0px, 140px, 140px, 0px);
}

<img src="w3css.gif" width="100" height="140" />

9voto

ralgh Points 131

Essayez ça : http://dabblet.com/gist/4711695

Centre l'image verticalement dans son conteneur. Pas de javascript nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X