Bild mit Textmitte zentrieren?

511

Ist die Eigenschaft text-align: center;eine gute Möglichkeit, ein Bild mithilfe von CSS zu zentrieren?

img {
    text-align: center;
}
Webdesigner
quelle
jsfiddle.net/j6q4d810/1 Dies funktioniert gut mit jeder Breite und Höhe
gmarsi

Antworten:

1087

Dies funktioniert nicht, da die text-alignEigenschaft für Blockcontainer und nicht für Inline-Elemente gilt und imgein Inline-Element ist. Siehe die W3C-Spezifikation .

Verwenden Sie stattdessen Folgendes:

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
quelle
5
Ich habe diese Methode ausprobiert und es funktioniert! Aber als ich 2 Bilder ausprobiert habe, hat es nicht funktioniert. Es wurde einfach wie ein Totem übereinander gestapelt. Gibt es Ideen, wie man 2 Bilder in derselben Zeile in der Mitte ausrichtet?
PatrickGamboa
1
Wie wird es vom W3C nicht unterstützt? Können Sie Links zur Untermauerung dieser Behauptung bereitstellen?
Madaras Geist
1
@SecondRikudo: text-aligndient zum Zentrieren von Text, wie der Name schon sagt. Für Blockelemente margin: 0 auto;ist der empfohlene Ansatz.
Mrchief
4
@ Mrchief Bilder sind Inline-Elemente, keine Blöcke. text-alignfunktioniert genauso gut bei ihnen.
Madaras Geist
4
Diese Erklärung ist irgendwie komisch, nicht wahr? Sie sagen, 'Textausrichtung' gilt für Blöcke und nicht für Inlines, was meiner Meinung nach der Fall ist. Dann ändern Sie es buchstäblich in ein Blockelement, vermeiden jedoch die Verwendung von Textausrichtung. Ich meine, Ihr Code funktioniert, aber dieser Absatz muss komplett umformuliert werden, imo.
Octopus
118

Das funktioniert nicht immer ... wenn nicht, versuchen Sie:

img {
    display: block;
    margin: 0 auto;
}
Codecraftnap
quelle
87

Ich bin auf diesen Beitrag gestoßen und er hat bei mir funktioniert:

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>

(Vertikale und horizontale Ausrichtung)

Shai Reznik - HiRez.io
quelle
48

Eine andere Möglichkeit wäre, einen einschließenden Absatz zu zentrieren:

<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
quelle
19
Ich würde nicht zustimmen, ich denke, das beantwortet die Frage. Das OP fragte, ob die Eigenschaft text-align: centereine gute Möglichkeit ist, ein Bild zu zentrieren, und gab nicht an, dass die Eigenschaft Teil des img-Tags sein muss. Diese Antwort verwendet die betreffende Eigenschaft, um eine Lösung bereitzustellen (die funktioniert).
MandM
2
Dies funktionierte bei mir, wenn Anzeige: Block usw. nicht würde.
Matthewsheets
14

Du kannst tun:

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

Dimitris Maniatis
quelle
9
wird leider <center>in html5 nicht unterstützt, aber verdammt, es funktioniert.
Ayrat
13

Tatsächlich besteht das einzige Problem mit Ihrem Code darin, dass das text-alignAttribut für Text (ja, Bilder zählen als Text) innerhalb des Tags gilt. Sie möchten ein spanTag um das Bild setzen und seinen Stil wie folgt festlegen text-align: center:

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

Das Bild wird zentriert. Als Antwort auf Ihre Frage ist dies die einfachste und narrensicherste Methode, um Bilder zu zentrieren, solange Sie daran denken, die Regel auf das Bild span(oder div) des Bildes anzuwenden .

Code Affe
quelle
2
Ein spanElement ist display: inline;standardmäßig aktiviert, daher tritt das gleiche Problem auf wie das Platzieren text-align: center;auf dem imgselbst. Sie müssen das spanauf setzen display: block;oder durch ein ersetzen, damit divdies funktioniert.
Web_Designer
10

Es gibt drei Methoden zum Zentrieren eines Elements, die ich vorschlagen kann:

  1. Verwenden der text-alignEigenschaft

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

  2. Verwenden der marginEigenschaft

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

  3. Verwenden der positionEigenschaft

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


Die erste und die zweite Methode funktionieren nur, wenn das übergeordnete Element mindestens so breit wie das Bild ist. Wenn das Bild breiter als das übergeordnete Bild ist, bleibt das Bild nicht zentriert !!!

Aber: Die dritte Methode ist ein guter Weg dafür!

Hier ist ein Beispiel:

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
quelle
# 3 ist so präzise , dass ich in der Lage gewesen , eine zum Zentrum imgin einem gerechtfertigten divin einem WebViewmit CSS - Injektion. Vielen Dank!
JorgeAmVF
8

Nur wenn Sie alte Versionen von Internet Explorer unterstützen müssen.

Der moderne Ansatz ist margin: 0 autoin Ihrem CSS zu tun .

Beispiel hier: 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;
}

Das einzige Problem hierbei ist, dass die Breite des Absatzes mit der Breite des Bildes übereinstimmen muss . Wenn Sie dem Absatz keine Breite hinzufügen, funktioniert dies nicht, da 100% davon angenommen werden und Ihr Bild nach links ausgerichtet wird, es sei denn, Sie verwenden es text-align:center.

Probieren Sie die Geige aus und experimentieren Sie damit, wenn Sie möchten.

Ray Toal
quelle
6
img{
    display: block;
    margin-right: auto;
    margin-left: auto;      
 }
Traumjäger - HashADH
quelle
1
Traumjäger, wenn Sie eine alternative Methode zum Zentrieren eines Bildes mit CSS vorschlagen, müssen Sie Ihre Frage ein wenig erweitern. Sie könnten erklären, wie und warum diese vorgeschlagene Alternative ein besserer Weg wäre, um das Ziel des Fragestellers zu erreichen, möglicherweise einschließlich eines Links zu der entsprechenden Dokumentation. Dies würde es für sie nützlicher machen und auch für andere Site-Leser, die nach Lösungen für ähnliche Probleme suchen.
Vince Bowdren
6

Wenn Sie eine Klasse mit einem Bild verwenden, reicht Folgendes aus

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

Wenn es sich nur um ein Bild in einer bestimmten Klasse handelt, das Sie zentrieren möchten, reicht Folgendes aus:

class img {
    display: block;
    margin: 0 auto;
}
Baig
quelle
Ich würde die unterste ändern img.classoder auch eine img.classVersion hinzufügen . Danke dafür.
Chuck Savage
6

Auf dem Container mit dem Bild können Sie eine CSS 3- Flexbox verwenden, um das Bild sowohl vertikal als auch horizontal perfekt zu zentrieren .

Angenommen, Sie haben <div class = "container"> als Bildhalter:

Dann müssen Sie als CSS Folgendes verwenden:

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

Und dies wird all Ihre Inhalte in diesem Div perfekt zentrieren.

Santoni
quelle
Was im Rechtfertigungsinhalt kann für das Set Align in <p> verwendet werden?
Manjitha Teshara
Das wollte ich. Vielen Dank.
Dionne Kim
5

Die einfachste Lösung, die ich gefunden habe, war, dies meinem img-Element hinzuzufügen:

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

Es scheint, dass ich nicht "0" vor dem "Auto" hinzufügen muss, wie von anderen vorgeschlagen. Vielleicht ist das der richtige Weg, aber es funktioniert gut genug für meine Zwecke auch ohne die "0". Zumindest auf den neuesten Versionen von Firefox, Chrome und Edge .

Panu Logic
quelle
nur auto mean auto auto auto autound 0 automeans 0 auto 0 auto... und standardmäßig ist auto für den unteren und oberen Rand 0so, dass das Hinzufügen von 0 oder nicht genau das gleiche ist, was Sie dazu
bringt,
Ihr Kommentar erklärt, warum es funktioniert. Großartig. Aber welche der vorherigen Antworten besagt, dass "Auto" ohne "0" auch funktioniert? Ist diese Tatsache nicht erwähnenswert?
Panu Logic
In diesem Fall sollte es sich um einen Kommentar handeln, da in diesem speziellen Fall beide gleich sind. Ich glaube nicht , dass wir eine Antwort für alle die entsprechenden Werte, in diesem Fall sollten wir schreiben: auto, auto auto, auto auto auto, auto auto auto auto, 0 auto 0, 0 auto, 0 auto 0 auto, und so weiter ... denken Sie , jeder eine andere Antwort verdient? Das glaube ich nicht.
Temani Afif
Ich würde nicht sagen, dass wenn zwei verschiedene CSS-Segmente das gleiche Endergebnis erzielen, diese beiden CSS-Segmente "gleich" sind. Ihre Ausgabe ist dieselbe, aber ihr Quellcode ist nicht dieselbe. Wie im Allgemeinen können Sie eine beliebige Anzahl verschiedener Programme schreiben, die dieselbe Ausgabe erzeugen. Dann ist es wertvoll zu wissen (und Leuten zu sagen, die fragen), welches dieser "äquivalenten" Programme am einfachsten und am kürzesten zu schreiben scheint.
Panu Logic
und all dies sollte in einer Antwort geschrieben werden. Deshalb eignet sich diese Antwort eher als Kommentar als als ganz neue Antwort. Wir sollten alle äquivalenten Dinge zusammen präsentieren und sie nicht zu getrennten Merkmalen machen, was möglicherweise so klingt, als wären sie völlig anders, weil dies nicht der Fall ist [meine Meinung übrigens, keine Notwendigkeit, dem zuzustimmen oder das Gegenteil zu argumentieren]. Und ich spreche nicht von verschiedenen Programmen, die dieselbe Ausgabe erzeugen, es ist eine völlig andere Sache, da die Logik möglicherweise nicht dieselbe ist. Hier sprechen wir über die gleiche Eigenschaft und den gleichen Wert (wie i++sind die gleichen wie i+=1)
Temani Afif
4

Einfach die Elternausrichtung ändern :)

Versuchen Sie dies in den übergeordneten Eigenschaften:

text-align:center
Mo.
quelle
3

Sie können text-align: centerdas übergeordnete Element verwenden und das imgin display: inline-block→ ändern. Es verhält sich daher wie ein Textelement und wird zentriert, wenn das übergeordnete Element eine Breite hat!

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

Ich würde ein div verwenden, um ein Bild zentriert auszurichten. Wie in:

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

Wenn Sie das Bild als Hintergrund festlegen möchten, habe ich eine Lösung:

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

Das Zentrieren eines Nicht-Hintergrundbilds hängt davon ab, ob Sie das Bild als Inline- (Standardverhalten) oder Blockelement anzeigen möchten.

Fall von Inline

Wenn Sie das Standardverhalten der Anzeige-CSS-Eigenschaft des Bildes beibehalten möchten, müssen Sie Ihr Bild in ein anderes Blockelement einschließen, auf das Sie festlegen müssen text-align: center;

Fall von Block

Wenn Sie das Bild als eigenes Blockelement betrachten möchten, macht die text-alignEigenschaft keinen Sinn, und Sie sollten stattdessen Folgendes tun:

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

Die Antwort auf Ihre Frage:

Ist die Eigenschaft text-align: center; eine gute Möglichkeit, ein Bild mit CSS zu zentrieren?

Ja und nein.

  • Ja, wenn das Bild das einzige Element in seinem Wrapper ist.
  • Nein, falls sich andere Elemente im Wrapper des Bildes befinden, da alle untergeordneten Elemente, die Geschwister des Bildes sind, die text-alignEigenschaft erben. Möglicherweise möchten Sie diesen Nebeneffekt nicht.

Verweise

  1. Liste der Inline-Elemente
  2. Dinge zentrieren
Billal Begueradj
quelle
1

Eine weitere Möglichkeit zur Skalierung - Anzeige:

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
quelle
1

Verwenden Sie dies für Ihr imgCSS:

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

display: blockmit margin: 0hat bei mir nicht funktioniert, auch nicht mit einem text-align: centerElement umwickelt .

Das ist meine Lösung:

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

translateX wird von den meisten Browsern unterstützt

OverCoder
quelle
1
meinst du margin: 0 auto;? Der Schlüssel ist Einstellen margin-leftund margin-rightzu auto. margin: 0 auto;ist nur eine Abkürzung dafür.
Web_Designer
1
@Web_Designer Ich habe versucht margin: 0 auto, margin: 0und margin: autokeiner arbeitete. Beachten Sie, dass im Chrome-Inspektor bei Verwendung margin: 0 autodie Eigenschaft mit einem Ausrufezeichen versehen ist invalid property value(oder was auch immer das bedeutet)
OverCoder
Ich denke, Sie meinten "Position: absolut"; anstelle von "display: absolute;"
WebDevDaniel
Vielen Dank an @WebDevDaniel für den Hinweis auf den Tippfehler. Übrigens, vielleicht möchten Sie relativelieber die Positionierung verwenden, als dass absolutebeide ziemlich gut funktionieren.
OverCoder
0

Ich habe festgestellt, dass ich ein Bild und einen Text in einem verwenden divkanntext-align:center den Text und das Bild auf einen Schlag ausrichten .

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
quelle
0

Manchmal fügen wir den Inhalt und die Bilder direkt dem WordPress-Administrator innerhalb der Seiten hinzu. Wenn wir die Bilder in den Inhalt einfügen und diese Mitte ausrichten möchten. Der Code wird angezeigt als:

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

In diesem Fall können Sie CSS-Inhalte wie folgt hinzufügen:

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

Verwenden:

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

Ich denke, dies ist der Weg, um ein Bild im Laravel-Framework zu zentrieren.

Manjitha Teshara
quelle
0
.img-container {
  display: flex;
}

img {
  margin: auto;
}

Dadurch wird das Bild sowohl vertikal als auch horizontal zentriert

Anupama
quelle