Centrer l'image en utilisant le centre d'alignement du texte?

511

La propriété est-elle text-align: center;un bon moyen de centrer une image à l'aide de CSS?

img {
    text-align: center;
}
Web_Designer
la source
jsfiddle.net/j6q4d810/1 Cela fonctionne très bien avec n'importe quelle largeur et hauteur
gmarsi

Réponses:

1087

Cela ne fonctionnera pas car la text-alignpropriété s'applique aux conteneurs de blocs, pas aux éléments en ligne, et imgest un élément en ligne. Voir la spécification W3C .

Utilisez-le à la place:

img.center {
    display: block;
    margin: 0 auto;
}
<div style="border: 1px solid black;">
<img class="center" src ="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a">

</div>

Mrchief
la source
5
j'ai essayé cette méthode et ça marche! mais quand j'ai essayé 2 images, cela n'a pas fonctionné, il s'est simplement empilé les uns sur les autres comme un totem, des idées pour aligner 2 images sur la même ligne au milieu?
PatrickGamboa
1
Comment n'est-il pas pris en charge par le W3C? Pouvez-vous fournir des liens pour appuyer cette réclamation?
Madara's Ghost
1
@SecondRikudo: text-alignsert au centrage du texte, comme son nom l'indique. Pour les éléments de bloc, margin: 0 auto;c'est l' approche recommandée .
Mrchief
4
@Mrchief Les images sont des éléments en ligne, pas des blocs. text-alignfonctionne aussi bien sur eux.
Madara's Ghost
4
Cette explication est un peu bizarre, non? Vous dites que «text-align» s'applique aux blocs et non aux inserts, ce qui, je crois, puis vous le changez littéralement en élément de bloc tout en évitant d'utiliser text-align. Je veux dire que votre code fonctionne, mais ce paragraphe doit être complètement reformulé, imo.
Octopus
118

Cela ne fonctionne pas toujours ... sinon, essayez:

img {
    display: block;
    margin: 0 auto;
}
codecraftnap
la source
87

Je suis tombé sur ce post , et cela a fonctionné pour moi:

img {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
}
<div style="border: 1px solid black; position:relative; min-height: 200px">
  <img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a">

</div>

(Alignement vertical et horizontal)

Shai Reznik - HiRez.io
la source
48

Une autre façon de procéder serait de centrer un paragraphe englobant:

<p style="text-align:center; border:1px solid black"><img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a"></p>

EssamSoft
la source
19
Je ne suis pas d'accord, je pense que cela répond à la question. Le PO a demandé si la propriété text-align: centerétait un bon moyen de centrer une image et n'a pas précisé que la propriété devait faire partie de la balise img. Cette réponse utilise la propriété en question dans le but de fournir une solution (qui fonctionne).
MandM
2
Cela a fonctionné pour moi lorsque l'affichage: bloc, etc. ne fonctionnerait pas.
matthewsheets
14

Tu peux faire:

<center><img src="..." /></center>

Dimitris Maniatis
la source
9
malheureusement, <center>n'est pas supporté en html5, mais bon sang, ça marche.
Ayrat
13

En fait, le seul problème avec votre code est que l' text-alignattribut s'applique au texte (oui, les images comptent comme du texte) à l'intérieur de la balise. Vous souhaitez placer une spanbalise autour de l'image et définir son style text-align: centercomme suit:

span.centerImage {
     text-align: center;
}
<span class="centerImage"><img src="http://placehold.it/60/60" /></span>

L'image sera centrée. En réponse à votre question, c'est la manière la plus simple et la plus infaillible de centrer des images, tant que vous vous souvenez d'appliquer la règle au contenant de l'image span(ou div).

Code Monkey
la source
2
Un spanélément est display: inline;par défaut, donc cela pose le même problème que de le placer text-align: center;sur imglui - même. Vous devez définir le spanpour display: block;ou le remplacer par un divpour que cela fonctionne.
Web_Designer
10

Il existe trois méthodes pour centrer un élément que je peux suggérer:

  1. Utilisation de la text-alignpropriété

        .parent {
        text-align: center;
    }
        <div class="parent">
        <img src="https://placehold.it/60/60" />
    </div>

  2. Utilisation de la marginpropriété

    img {
        display: block;
        margin: 0 auto;
    }
    <img src="https://placehold.it/60/60" />

  3. Utilisation de la positionpropriété

    img {
        display: block;
        position: relative;
        left: -50%;
    }
    .parent {
        position: absolute;
        left: 50%;
    }
    <div class="parent">
        <img src="https://placehold.it/60/60" />
    </div>


Les première et deuxième méthodes ne fonctionnent que si le parent est au moins aussi large que l'image. Lorsque l'image est plus large que son parent, l'image ne restera pas centrée !!!

Mais: La troisième méthode est un bon moyen pour cela!

Voici un exemple:

img {
    display: block;
    position: relative;
    left: -50%;
}
.parent {
    position: absolute;
    left: 50%;
}
<div class="parent">
    <img src="http://imgsv.imaging.nikon.com/lineup/lens/zoom/normalzoom/af-s_dx_18-140mmf_35-56g_ed_vr/img/sample/img_01.jpg" />
</div>

Amin Fazlali
la source
# 3 est si précis que j'ai pu centrer un imgintérieur justifié divdans une WebViewinjection CSS. Je vous remercie!
JorgeAmVF
8

Uniquement si vous devez prendre en charge les anciennes versions d'Internet Explorer.

L'approche moderne consiste à faire margin: 0 autodans votre CSS.

Exemple ici: http://jsfiddle.net/bKRMY/

HTML:

<p>Hello the following image is centered</p>
<p class="pic"><img src="https://twimg0-a.akamaihd.net/profile_images/440228301/StackoverflowLogo_reasonably_small.png"/></p>
<p>Did it work?</p>

CSS:

p.pic {
    width: 48px;
    margin: 0 auto;
}

Le seul problème ici est que la largeur du paragraphe doit être la même que la largeur de l'image . Si vous ne mettez pas de largeur sur le paragraphe, cela ne fonctionnera pas, car il supposera 100% et votre image sera alignée à gauche, sauf si vous utilisez bien sûrtext-align:center .

Essayez le violon et expérimentez-le si vous le souhaitez.

Ray Toal
la source
6
img{
    display: block;
    margin-right: auto;
    margin-left: auto;      
 }
Chasseur de rêves - hashADH
la source
1
chasseur de rêves, si vous proposez une autre façon de centrer une image en utilisant css, alors vous devez développer un peu votre question. Vous pourriez expliquer comment et pourquoi cette alternative proposée serait un meilleur moyen d'atteindre l'objectif de l'interrogateur, peut-être en incluant un lien vers la documentation pertinente. Cela les rendrait plus utiles pour eux, et aussi plus utiles aux autres lecteurs de sites qui recherchent des solutions à des problèmes similaires.
Vince Bowdren
6

Si vous utilisez une classe avec une image, alors ce qui suit fera l'affaire

class {
    display: block;
    margin: 0 auto;
}

Si c'est seulement une image dans une classe spécifique que vous souhaitez aligner au centre, alors ce qui suit fera:

class img {
    display: block;
    margin: 0 auto;
}
Baig
la source
Je changerais celui du bas pour être img.classou ajouterais une img.classversion aussi. Merci pour cela.
Chuck Savage
6

Sur le conteneur contenant l'image, vous pouvez utiliser une Flexbox CSS 3 pour centrer parfaitement l'image à l'intérieur, à la fois verticalement et horizontalement.

Supposons que vous avez <div class = "container"> comme support d'image:

Ensuite, en tant que CSS, vous devez utiliser:

.container {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
}

Et cela rendra tout votre contenu à l'intérieur de cette div parfaitement centré.

Santoni
la source
ce que le contenu justifié peut utiliser pour définir l'alignement dans <p> ??
Manjitha teshara, le
Voilà ce que je voulais. Je vous remercie.
Dionne Kim
5

La solution la plus simple que j'ai trouvée était d'ajouter ceci à mon élément img:

style="display:block;margin:auto;"

Il semble que je n'ai pas besoin d'ajouter "0" avant "auto" comme suggéré par d'autres. C'est peut-être la bonne façon, mais cela fonctionne assez bien pour moi sans le "0". Au moins sur les derniers Firefox, Chrome et Edge .

Panu Logic
la source
seulement auto signifie auto auto auto autoet 0 autosignifie 0 auto 0 auto... et par défaut, l'auto pour la marge inférieure et supérieure est 0donc ajouter 0 ou non est exactement le même dans ce cas qui vous fait répondre à un nième double de ceux déjà fournis
Temani Afif
Votre commentaire explique pourquoi cela fonctionne. Génial. Mais laquelle des réponses précédentes a dit que "auto" sans "0" fonctionne aussi? Ce fait ne vaut-il pas la peine d'être mentionné?
Panu Logic
dans ce cas, il doit s'agir d'un commentaire, car dans ce cas particulier, les deux sont identiques. Je ne pense pas que nous devrions avoir une réponse pour toutes les valeurs équivalentes, dans ce cas , nous pouvons écrire: auto, auto auto, auto auto auto, auto auto auto auto, 0 auto 0, 0 auto, 0 auto 0 auto, et ainsi de suite ... vous pensez que chacun méritent une réponse différente? Je ne pense pas.
Temani Afif
Je ne dirais pas que si deux segments différents de CSS produisent le même résultat final, ces deux segments CSS "sont les mêmes". Leur sortie est la même mais leur code source n'est pas le même. Tout comme en général, vous pouvez écrire n'importe quel nombre de programmes différents qui produisent la même sortie. Ensuite, il est utile de savoir (et de dire aux personnes qui demandent) lequel de ces programmes "équivalents" semble être le plus simple et le plus court à écrire.
Panu Logic
et tout cela devrait être écrit dans une seule réponse. C'est pourquoi cette réponse est plus appropriée en tant que commentaire qu'une toute nouvelle réponse. Nous devons présenter toutes les choses équivalentes ensemble et ne pas en faire des fonctionnalités distinctes, ce qui peut sembler complètement différent, car ce n'est pas le cas [à mon avis, pas besoin d'être d'accord avec lui ou d'argument contraire]. Et je ne parle pas de différents programmes qui produisent la même sortie, c'est une chose complètement différente car la logique peut ne pas être la même. Ici, nous parlons de la même propriété et de la même valeur (comme i++sont les mêmes que i+=1)
Temani Afif
4

Changez simplement l'alignement des parents :)

Essayez celui-ci sur les propriétés parent:

text-align:center
Mo.
la source
3

Vous pouvez utiliser text-align: centersur le parent et changer le imgen display: inline-block→ il se comporte donc comme un élément de texte et sera centré si le parent a une largeur!

img {
    display: inline-block
}
Doml The-Bread
la source
2

J'utiliserais un div pour aligner au centre une image. Un péché:

<div align="center"><img src="your_image_source"/></div>
Rotimi
la source
2

Si vous souhaitez définir l'image comme arrière-plan, j'ai une solution:

.image {
    background-image: url(yourimage.jpg);
    background-position: center;
}
Wojciechu
la source
2

Le centrage d'une image non d'arrière-plan dépend de l'affichage de l'image en ligne (comportement par défaut) ou en bloc.

Cas de inline

Si vous souhaitez conserver le comportement par défaut de la propriété CSS d'affichage de l'image, vous devrez encapsuler votre image dans un autre élément de bloc sur lequel vous devez définir text-align: center;

Cas de bloc

Si vous voulez considérer l'image comme un élément de bloc à part entière, alors la text-alignpropriété n'a pas de sens, et vous devriez le faire à la place:

IMG.display {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

La réponse à votre question:

La propriété text-align: center; une bonne façon de centrer une image en utilisant CSS?

Oui et non.

  • Oui, si l'image est le seul élément à l'intérieur de son enveloppe.
  • Non, au cas où vous auriez d'autres éléments dans le wrapper de l'image parce que tous les éléments enfants qui sont frères et sœurs de l'image hériteront de la text-alignpropriété: et peut-être que vous n'aimeriez pas cet effet secondaire.

Références

  1. Liste des éléments en ligne
  2. Centrer les choses
Billal Begueradj
la source
1

Une autre façon de mettre à l'échelle - affichez-le:

img {
  width: 60%; /* Or required size of image. */
  margin-left: 20% /* Or scale it to move image. */
  margin-right: 20% /* It doesn't matters much if using left and width */
}
Kishore Banala
la source
1

Utilisez ceci pour votre imgCSS:

img {
  margin-right: auto;
  margin-left: auto;
}
treb
la source
0

display: blockavec margin: 0n'a pas fonctionné pour moi, ni envelopper avec untext-align: center élément.

Voici ma solution:

img.center {
    position: absolute;
    transform: translateX(-50%);
    left: 50%;
}

translateX est pris en charge par la plupart des navigateurs

OverCoder
la source
1
tu voulais dire margin: 0 auto;? La clé est le réglage margin-leftet margin-rightle auto. margin: 0 auto;est juste un raccourci pour cela.
Web_Designer
1
@Web_Designer J'ai essayé margin: 0 auto, margin: 0et margin: auto, aucun travaillé. Notez que dans l'inspecteur de Chrome, lors de l'utilisation margin: 0 auto, est frappé la propriété avec un point d'exclamation disant invalid property value(ou quoi que cela signifie)
OverCoder
Je pense que vous vouliez dire "position: absolue;" au lieu de "affichage: absolu;"
WebDevDaniel
Merci @WebDevDaniel d'avoir souligné la faute de frappe. Oh, d'ailleurs, vous voudrez peut-être utiliser le relativepositionnement plutôt que absolute, les deux fonctionnent assez bien.
OverCoder
0

J'ai découvert que si j'ai une image et du texte à l'intérieur d'un div, alors je peux utilisertext-align:center pour aligner le texte et l'image d'un seul coup.

HTML:

    <div class="picture-group">
        <h2 class="picture-title">Picture #1</h2>
        <img src="http://lorempixel.com/99/100/" alt="" class="picture-img" />
        <p class="picture-caption">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Temporibus sapiente fuga, quia?</p>
    </div>

CSS:

.picture-group {
  border: 1px solid black;
  width: 25%;
  float: left;
  height: 300px;
  #overflow:scroll;
  padding: 5px;
  text-align:center;
}

CodePen: https://codepen.io/artforlife/pen/MoBzrL?editors=1100

MadPhysicist
la source
0

Parfois, nous ajoutons directement le contenu et les images sur l'administrateur WordPress à l'intérieur des pages. Lorsque nous insérons les images à l'intérieur du contenu et que nous voulons aligner ce centre. Le code est affiché comme:

 **<p><img src="https://abcxyz.com/demo/wp-content/uploads/2018/04/1.jpg" alt=""></p>**

Dans ce cas, vous pouvez ajouter du contenu CSS comme ceci:

article p img{
    margin: 0 auto;
    display: block;
    text-align: center;
    float: none;
}
Sangrai
la source
0

Utilisation:

<dev class="col-sm-8" style="text-align: center;"><img src="{{URL('image/car-trouble-with-clipping-path.jpg')}}" ></dev>

Je pense que c'est la façon de centrer une image dans le framework Laravel.

Manjitha teshara
la source
0
.img-container {
  display: flex;
}

img {
  margin: auto;
}

cela rendra le centre de l'image à la fois verticalement et horizontalement

Anupama
la source