Comment faire en sorte qu'une image reste centrée lorsque son conteneur de largeur de fluide (en pourcentage) est trop petit pour afficher l'image entière?
Comment puis-je centrer l'image à l'intérieur de son conteneur
Cela signifie que le milieu de l'image devrait apparaître au lieu des côtés lorsque le conteneur est trop petit.
Vous pouvez avoir un conteneur qui contient du contenu, tel que deux <div>
D'une largeur de 50% chacun, assis l'un à côté de l'autre. Pour cet exemple, nous pouvons illustrer un seul enfant du conteneur:
Nous nommerons le rectangle extérieur .container
, Le rectangle intérieur .content
Et l'image img
. Cet arrangement est parfaitement correct, tant que .content
Est toujours plus large que img
.
Puisque nous avons affaire à des pourcentages et que nous travaillons probablement avec un design réactif, cela peut ne pas toujours être le cas. Si .content
Est plus fin que img
, le recadrage aura lieu:
Si la partie la plus intéressante de img
se trouve au centre, nous devons obliger le navigateur à rogner les deux bords de manière uniforme - en laissant la meilleure partie visible, quelle que soit la largeur de .content
.
Heureusement, une solution est possible. Mieux encore, aucun balisage supplémentaire n'est requis.
.content {
width: 90%; /* or whatever is required */
text-align: center; /* ensures the image is always in the h-middle */
overflow: hidden; /* hide the cropped portion */
}
img {
position: relative; /* allows repositioning */
left: 100%; /* move the whole width of the image to the right */
margin-left: -200%; /* magic! */
}
Pour les nouveaux navigateurs, vous pouvez le traduire
figure{
width: 100%;
text-align: center;
overflow: hidden;
}
img{
position: relative;
left: 50%;
transform: translate(-50%,0)
}
Pour supporter IE8, vous pouvez toujours utiliser la technique présentée ci-dessus par @BryceHanscomb.
.no-csstransforms figure img {
left: 100%; /* move the whole width of the image to the right */
margin-left: -200%; /* magic! */
}
Si vous prévoyez que l'image à afficher sera beaucoup plus longue que le conteneur d'affichage, définissez le paramètre à gauche: 100%; et marge gauche: -200%; (d'après la réponse de Bryce) pourrait ne pas suffire pour obtenir la partie centrale de l'image. Il suffit de mettre un pourcentage plus élevé pour les deux. Assurez-vous que l'autre est la moitié de l'autre cependant.
left: 500%;
margin-left: -1000%;