344 votes

Aligner l'image au centre et au milieu de la division

J'ai la division suivante

<div id="over" style="position:absolute; width:100%; height:100%>
 <img src="img.png">
</div>

Comment aligner l'image de manière à ce qu'elle soit située au milieu et au centre de la division ?

13 votes

Duplicate a demandé il y a 2 minutes : CSS : image au milieu

1 votes

0 votes

Pensez à sélectionner une seule réponse comme étant correcte.

438voto

Gurpreet Singh Points 1175
body {
  margin: 0;
}

#over img {
  margin-left: auto;
  margin-right: auto;
  display: block;
}

<div id="over" style="position:absolute; width:100%; height:100%">
  <img src="http://www.garcard.com/images/garcard_symbol.png">
</div>

JSFiddle

4 votes

display: block; a été mon écueil. TnX

2 votes

Following doesn't work. What's the mistake i am doing. <html> <head> <style> #over img { display: block; margin-left: auto; margin-right: auto; } </style> </head> <body> <div id="over" style="position:absolute; width:100%; height:100%"> <img src=" img8a.flixcart.com/image/tablet/f/k/t/ "> </div> </body> </html>

1 votes

Si nous n'utilisons pas display: block la valeur par défaut est display: inline en fonction de w3schools.com/cssref/pr_class_display.asp . Pourquoi devons-nous utiliser block ? Cela a fonctionné pour moi, mais je ne sais pas pourquoi block va centrer l'image et pas inline.

182voto

John K. Points 2747
<div style="display:table-cell; vertical-align:middle; text-align:center">
<img src="img.png">
</div>

2 votes

Solution très courte et facile, mais il semble qu'elle ne fonctionne qu'avec une largeur et une hauteur fixes, sans pourcentage. Elle fonctionne cependant avec les flottants, donc +1 pour cela. - jsfiddle.net/2s2nY/2

1 votes

Mais cela ne fait que l'alignement vertical mais pas l'horizontal, n'est-ce pas ?

1 votes

Cela ne fonctionnera pas si la largeur de l'image est supérieure à la largeur de la division.

117voto

aerdman Points 76

Cela peut également être fait en utilisant la mise en page Flexbox :

TAILLE STATIQUE

.parent {
    display: flex;
    height: 300px; /* Or whatever */
    background-color: #000;
}

.child {
    width: 100px;  /* Or whatever */
    height: 100px; /* Or whatever */
    margin: auto;  /* Magic! */
}

<div class="parent">
    <img class="child" src="https://i.vimeocdn.com/portrait/58832_300x300"/>
</div>

TAILLE DYNAMIQUE

html, body {
  width: 100%;
  height: 100%;
  display: flex;
  background-color: #999;
}

* {
  margin: 0;
  padding: 0;
}

.parent {
  margin: auto;
  background-color: #000;
  display: flex;
  height: 80%;
  width: 80%;
}

.child {
  margin: auto;  /* Magic! */
  max-width: 100%;
  max-height: 100%;
}

<div class="parent">
  <img class="child" src="https://i.vimeocdn.com/portrait/58832_300x300"/>
</div>

J'ai trouvé l'exemple dans ce artículo qui explique très bien le mode d'emploi de la mise en page.

0 votes

Dans la taille statique, il n'y a pas besoin de largeur et de hauteur pour l'enfant (du moins dans ma version de Firefox).

91voto

avrahamcool Points 4651

Il me semble que vous vouliez également que l'image soit centrée verticalement dans le conteneur. (Je n'ai pas vu de réponse qui fournisse cela)

Violon de travail :

  1. Solution purement CSS
  2. Ne pas rompre le flux du document (pas de flottants ni de positionnement absolu)
  3. Compatibilité avec tous les navigateurs (même IE6)
  4. Entièrement réactif.

HTML

<div id="over">
    <span class="Centerer"></span>
    <img class="Centered" src="http://th07.deviantart.net/fs71/200H/f/2013/236/d/b/bw_avlonas_a5_beach_isles_wallpaper_image_by_lemnosexplorer-d6jh3i7.jpg" />
</div>

CSS

*
{
    padding: 0;
    margin: 0;
}
#over
{
    position:absolute;
    width:100%;
    height:100%;
    text-align: center; /*handles the horizontal centering*/
}
/*handles the vertical centering*/
.Centerer
{
    display: inline-block;
    height: 100%;
    vertical-align: middle;
}
.Centered
{
    display: inline-block;
    vertical-align: middle;
}

Nota: cette solution est bonne pour aligner tout élément dans tout élément. Pour IE7, lorsque l'on applique le .Centered sur les éléments de bloc, vous devrez utiliser une autre astuce pour obtenir la classe inline-block fonctionnement. (cela parce que IE6/IE7 ne joue pas bien avec inline-block sur les éléments de bloc)

0 votes

Au lieu d'avoir des span vous pouvez utiliser le pseudo-élément :before : jsfiddle.net/xaliber/cj6zhtp0

0 votes

@deathlock c'est bien connu. mais je visais les anciens navigateurs IE (qui ne supportaient pas les pseudo éléments).

0 votes

@avrahamcool Je vois, je n'avais pas réalisé cela. Alors pourquoi ne pas envelopper la conditionnelle <!--[if lt IE 8]> autour de la span ?

66voto

Nitin Points 101
img.centered {
   display: block;
   margin: auto auto;
}

1 votes

Ce qui est très similaire à cette réponse

0 votes

Ça marche, et c'est simple !

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