Aligner l'image au centre et au milieu dans div

302

J'ai suivant div

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

Comment aligner l'image pour se situer au milieu et au centre de div?

Dro1n2
la source
12
Dupliqué demandé il y a 2 minutes: CSS: image middle
Pekka
1
Sujet similaire ici: stackoverflow.com/questions/18516317/…
Hashem Qolami
Pensez à sélectionner une réponse comme correcte.
McSonk

Réponses:

406

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

Gurpreet Singh
la source
4
display: block;était mon écueil. TnX
Ujjwal Singh
2
Suivre ne fonctionne pas. Quelle est l'erreur que je fais. <html> <head> <style> #over img {display: block; marge gauche: auto; marge droite: auto; } </style> </head> <body> <div id = "over" style = "position: absolue; largeur: 100%; hauteur: 100%"> <img src = " img8a.flixcart.com/image/ tablette / f / k / t /… "> </div> </body> </html>
nizam.sp
1
Si nous n'utilisons pas display: blockla valeur par défaut, c'est display: inlineselon w3schools.com/cssref/pr_class_display.asp . Pourquoi avons-nous besoin d'utiliser un bloc? J'ai travaillé pour moi, mais je ne sais pas pourquoi le bloc centrera l'img et l'inline ne le fera pas.
user3731622
parce que inline ne bouge pas dans la ligne, il est en effet en ligne. la marge automatique est donc inefficace.
netalex
12
Cela ne s'aligne pas verticalement
alpadev
170
<div style="display:table-cell; vertical-align:middle; text-align:center">
<img src="img.png">
</div>
John K.
la source
6
top réponse, très utile!
Ilian Andreev
1
Solution très courte et facile, mais elle ne semble fonctionner qu'avec une largeur et une hauteur fixes et sans pourcentage. Cela fonctionne avec des flotteurs, alors donc +1 pour cela. - jsfiddle.net/2s2nY/2
magnetronnie
1
mais cela ne fait que l'alignement vertical mais pas le droit horizontal?
V-SHY
1
Cela ne fonctionnera pas si la largeur de l'image est supérieure à la largeur de la div.
Davuz
5
Si nous supprimons display: table-cell; cela fonctionne parfaitement.
Ahesanali Suthar
103

Cela peut également être fait en utilisant la disposition 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 cet article , qui explique très bien comment utiliser la mise en page.

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

Il me semble que vous vouliez également que cette image soit centrée verticalement dans le conteneur. (Je n'ai vu aucune réponse à condition que)

Violon de travail:

  1. Solution CSS pure
  2. Ne pas interrompre le flux de documents (pas de flottants ni de positionnement absolu)
  3. Compatibilité entre navigateurs (même IE6)
  4. Complètement 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;
}

Remarque: cette solution est bonne pour aligner n'importe quel élément dans n'importe quel élément. pour IE7, lors de l'application de la .Centeredclasse sur des éléments de bloc, vous devrez utiliser une autre astuce pour faire inline-blockfonctionner. (parce que IE6 / IE7 ne fonctionnent pas bien avec les éléments de bloc en ligne sur bloc)

avrahamcool
la source
Au lieu d'en avoir plus span, vous pouvez utiliser le pseudo-élément :before: jsfiddle.net/xaliber/cj6zhtp0
deathlock
@deathlock c'est bien connu. mais je visais les anciens navigateurs IE (qui ne prenaient pas en charge les pseudo-éléments).
avrahamcool
1
Ce n'est pas le cas, mais HTML ne doit être utilisé que pour la structure, pas pour la présentation. Ce travail est laissé au CSS, d'où le pseudo-élément.
deathlock
1
Que voulez-vous dire "Ne pas interrompre le flux de documents (pas de flotteurs ou de positionnement absolu)" ?? C'est quoi #over { position:absolute; width:100%; height:100%;?
Rodrigo
1
@Rodrigo en effet, si vous n'avez pas besoin de cibler des navigateurs plus anciens, cette flexbox est l'approche recommandée.
avrahamcool
62
img.centered {
   display: block;
   margin: auto auto;
}
Nitine
la source
1
c'est très similaire à cette réponse
suhailvs
32

Vous pouvez le faire facilement en utilisant la propriété display: flex css

#over {
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}
tanveer ahmad dar
la source
C'est celui qui travaille pour moi. Image profondément imbriquée dans PUG / SCSS. Merci.
Mogens TrasherDK
29
#over {position:relative; text-align:center; 
       width:100%; height:100%; background:#CCC;}

#over img{
    position: absolute;
    margin: auto;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}
dhir
la source
C'est la bonne réponse, qui se centre en fait à la fois verticalement et horizontalement.
Alexander Kim
Jusqu'à présent, la meilleure réponse.
kiran puppala
13

J'avais encore quelques problèmes avec une autre solution présentée ici. Enfin, cela a fonctionné le mieux pour moi:

<div class="parent">
    <img class="child" src="image.png"/>
</div>

css3:

.child {
 display: block;
 position: absolute;
 top: 50%;
 left: 50%;
 transform: translate(-50%, -50%);
 -webkit-transform: translate(-50%, -50%); /* Safari and Chrome */
 -moz-transform: translate(-50%, -50%); /* Firefox */
 -ms-transform: translate(-50%, -50%); /* IE 9 */
 -o-transform: translate(-50%, -50%); /* Opera */
 // I suppose you may like those too:
 // max-width: 80%;
 // max-height: 80%;
}

Vous pouvez en savoir plus sur cette approche sur cette page .

pawel7318
la source
J'ai également dû ajouter le parent css mais votre code fonctionnait parfaitement! position: relative; largeur: 100%; flotteur: gauche; débordement caché; hauteur min: 189px;
user2593040
10

Fondamentalement, le réglage de la marge droite et gauche sur auto entraînera l'alignement du centre de l'image.

<div id="over" style="position:absolute; width:100%; height:100%>
<img src="img.png" style="display: block; margin: 0 auto;">
</div>
Garconis
la source
8

Ce serait une approche plus simple

#over > img{
    display: block;
    margin:0 auto; 
}
Sujay sreedhar
la source
7

La réponse de Daaawx fonctionne, mais je pense que ce serait plus propre si nous éliminions le CSS en ligne.

body {
	margin: 0;
}

#over img {
	margin-left: auto;
	margin-right: auto;
	display: block;
}
div.example {
  position: absolute;
  width: 100%;
  height: 100%;
}
<div class="example" id="over">
	<img src="http://www.garcard.com/images/garcard_symbol.png">
</div>

LizardKG
la source
6

définition de l' img pour afficher: inline-block tout en ayant défini la division supérieure sur text-align: center fera également le travail

EDIT: à ceux qui jouent avec display: inline-block >>> n'oubliez pas que par exemple deux divs comme

<div>Div1 content</div>NOSPACEHERE<div>Div2 content</div>

n'ont vraiment aucun espace entre eux (comme on le voit ici).

Juste basique pour éviter ces écarts (inline block inhérents) entre eux. Ces écarts sont visibles entre tous les deux mots que j'écris en ce moment! :-) Alors .. j'espère que cela aide certains d'entre vous.

sasha
la source
6

FACILE. 2018. FlexBox. Pour vérifier la prise en charge du navigateur - Puis-je utiliser une

solution minimale:

div#over { 
   display: flex; 
   justify-content: center; 
   align-items: center; 
}


Pour obtenir la prise en charge de navigateur la plus large possible:

div#over { 
   display: -webkit-flex;
   display: -ms-flex; 
   display: flex; 
   justify-content: center; 
   -ms-align-items: center; 
   align-items: center; 
}
Nadav
la source
5

J'ai essayé de nombreuses approches, mais seule celle-ci fonctionne pour plusieurs éléments en ligne dans une div de conteneur. Voici le code pour tout aligner en div au milieu.

CSS

.divContainer
{
    vertical-align: middle;
    text-align: center; <!-- If you want horizontal center alignment -->
}
.divContainer > *
{
    vertical-align: middle;
}

HTML

<div class="divContainer">
    <span>Middle Text</span>
    <img src="test.png"/>
</div>

Un exemple de code est ici: https://jsfiddle.net/yogendrasinh/2vq0c68m/

Yogee
la source
5

Fichier CSS

.over {
    display : block;
    margin : 0px auto;
Sabarish R
la source
3

Essayez ce code minimal:

<div class="outer">
    <img src="image.png"/>
</div>

Et CSS:

.outer{
  text-align: center;
}
.outer img{
  display: inline-block;
}
luchopintado
la source
3

Eh bien, nous sommes en 2016 ... pourquoi ne pas utiliser la flexbox? Il est également réactif. Prendre plaisir.

#over{
display:flex;
align-items:center;
justify-content:center;
}
<div id="over">
	<img src="http://www.garcard.com/images/garcard_symbol.png">
</div>

GabMic
la source
1
J'adore CSS3! Je vous remercie. Cependant, il est bon de noter que cela ne fonctionnera que dans les navigateurs modernes (sauf IE). Tous les autres navigateurs n'auront aucun effet.
Neel
2

de nombreuses réponses suggèrent d'utiliser, margin:0 automais cela ne fonctionne que lorsque l'élément que vous essayez de centrer ne flotte pas à gauche ou à droite, c'est-à-dire que l' floatattribut css n'est pas défini. Pour ce faire, appliquez l' displayattribut à table-cellpuis appliquez la marge de gauche et de droite à auto pour que votre style ressemble àstyle="display:table-cell;margin:0 auto;"

vikas devde
la source
2
    <div>
    <p style="text-align:center; margin-top:0px; margin-bottom:0px; padding:0px;">
    <img src="image.jpg" alt="image"/>
    </p>    
    </div>
betty.88
la source
2

HTML:

<div id="over">
    <img src="img.png">
</div>

CSS:

#over {
  text-align: center;
}

#over img {
  vertical-align: middle;
}
Lahori
la source
Il est préférable d'ajouter des commentaires et de ne pas simplement jeter du code.
Parkash Kumar du
2

Pour le centre horizontalement

#over img {
    display: block;
    margin: 0 auto;
    clear:both;
}

Une autre méthode:

#over img {
    display: inline-block;
    text-align: center;
}

Pour centrer verticalement Il suffit de mettre:

   #over img {

           vertical-align: middle;
        }
Sanjib Debnath
la source
2

Cela a fonctionné pour moi:

#image-id {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    width: auto;
    margin: 0 auto;
}
Sileria
la source
2

cela a fait l'affaire pour moi.

<div class="CenterImage">
         <asp:Image ID="BrandImage" runat="server" />
</div>

'Remarque: aucune classe CSS n'est associée à' BrandImage 'dans ce cas

CSS:

.CenterImage {
    position:absolute; 
    width:100%; 
    height:100%
}

.CenterImage img {
    margin: 0 auto;
    display: block;
}
julian9876
la source
2

Cela a fonctionné pour moi lorsque vous devez aligner l'image au centre et que votre div parent à l'image couvre tout l'écran. soit hauteur: 100% et largeur: 100%

#img{
    position:absolute;
    top:50%;
    left:50%;
    transform:translate(-50%,-50%);
}
Akshay Bande
la source
1

Utilisez le positionnement. Ce qui suit a fonctionné pour moi ...

Avec zoom au centre de l'image (l'image remplit la div):

div{
    display:block;
    overflow:hidden;
    width: 70px; 
    height: 70px;  
    position: relative;
}
div img{
    min-width: 70px; 
    min-height: 70px;
    max-width: 250%; 
    max-height: 250%;    
    top: -50%;
    left: -50%;
    bottom: -50%;
    right: -50%;
    position: absolute;
}

Sans zoom au centre de l'image (l'image ne remplit pas la div):

   div{
        display:block;
        overflow:hidden;
        width: 100px; 
        height: 100px;  
        position: relative;
    }
    div img{
        width: 70px; 
        height: 70px; 
        top: 50%;
        left: 50%;
        bottom: 50%;
        right: 50%;
        position: absolute;
    }
ThomasAFink
la source
1

La réponse marquée pour cela n'alignera pas verticalement l'image. Flexbox est une solution appropriée pour les navigateurs modernes. Un conteneur flexible peut être configuré pour aligner ses éléments à la fois horizontalement et verticalement.

<div id="over" style="position:absolute; width:100%; height:100%; display: flex; align-items: center; justify-content: center;">
    <img src="img.png">
</div>
WDuffy
la source
Cette solution répond à la question et fonctionne, contrairement à la réponse marquée. Peut-être que le votant pourrait détailler sa décision de voter contre?
WDuffy
6
De la file d'attente de révision : Puis-je vous demander de bien vouloir ajouter du contexte autour de votre code source. Les réponses uniquement codées sont difficiles à comprendre. Cela aidera le demandeur et les futurs lecteurs à la fois si vous pouvez ajouter plus d'informations dans votre message.
RBT
1
Cela ne justifie pas le downvote. La réponse est techniquement correcte et aiderait les futurs lecteurs. J'ai mis à jour le corps de la réponse pour respecter les règles de la maison, mais peut-être qu'une solution plus directe devrait être mise en œuvre par l'équipe principale, car l'identification des réponses uniquement par code est une tâche triviale.
WDuffy
0

Vous pouvez jeter un œil à cette solution:

Centrage horizontal et vertical d'une image dans une boîte

<style type="text/css">
.wraptocenter {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
    width: ...;
    height: ...;
}
.wraptocenter * {
    vertical-align: middle;
}
.wraptocenter {
    display: block;
}
.wraptocenter span {
    display: inline-block;
    height: 100%;
    width: 1px;
}
</style>
<!--[if lt IE 8]-->
<style>
.wraptocenter span {
    display: inline-block;
    height: 100%;
}
</style>
<!--[endif]-->

<div class="wraptocenter"><span></span><img src="..." alt="..."></div>
fpauer
la source
0

Un moyen simple serait de créer des styles distincts pour la div et l'image, puis de les positionner indépendamment. Disons que si je veux définir ma position d'image à 50%, alors j'aurais du code qui ressemble à ce qui suit ....

#over{
  position:absolute;
  width:100%;
  height:100%;
}
#img{
  position:absolute;
  left:50%;
  right:50%;
}
<div id="over">
 <img src="img.png" id="img">
</div>

KSJ10
la source
Dites-moi simplement si cela fonctionne avec toutes sortes de navigateurs, même si c'est une chose de base que chaque navigateur doit prendre en charge (sinon ne l'appelez pas un navigateur)
KSJ10
0
#over {
    display: table-cell; 
    vertical-align: middle; 
    text-align: center;
    height: 100px;
}

Modifiez la valeur de la hauteur selon vos besoins.

Terry Lin
la source
0

Cela devrait fonctionner.

IMPORTANT TEST POUR: Pour exécuter du code extrait cliquez sur le bouton gauche extrait de code RUN , puis lien à droite pleine page

#fader{
position:fixed;z-index: 10;
top:0;right:0;bottom:0;left:0;
opacity: 0.8;background: black;
width:100%;height:100%;
text-align: center;
}
.faders{display:inline-block;height:100%;vertical-align:middle;}
.faderi{display:inline-block;vertical-align:middle;}
<div id="fader">
<span class="faders"></span>
<img class="faderi" src="https://i.stack.imgur.com/qHF2K.png" />
</div>

Intacto
la source