Richten Sie das Bild in der Mitte und in der Mitte innerhalb von div aus


302

Ich habe folgendes div

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

Wie kann man das Bild so ausrichten, dass es sich in der Mitte und in der Mitte von div befindet?


12
Duplikat vor 2 Minuten gefragt: CSS: Bild Mitte
Pekka


Wählen Sie eine Antwort als richtig aus.
McSonk

Antworten:


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


4
display: block;war meine Falle. TnX
Ujjwal Singh

2
Das Folgen funktioniert nicht. Was ist der Fehler, den ich mache? <html> <head> <style> #over img {display: block; Rand links: Auto; Rand rechts: Auto; } </ style> </ head> <body> <div id = "over" style = "Position: absolut; Breite: 100%; Höhe: 100%"> <img src = " img8a.flixcart.com/image/ tablet / f / k / t /… "> </ div> </ body> </ html>
nizam.sp

1
Wenn wir nicht verwenden display: blockdie Standardeinstellung ist display: inlinegemäß w3schools.com/cssref/pr_class_display.asp . Warum müssen wir Block verwenden? Ich habe für mich gearbeitet, bin mir aber nicht sicher, warum Block das IMG zentriert und Inline nicht.
user3731622

Da sich Inline nicht in der Linie bewegt, ist es tatsächlich in der Linie. Margin Auto ist also unwirksam.
Netalex

12
Dies ist nicht vertikal ausgerichtet
Alpadev

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

6
Top Antwort, sehr hilfreich!
Ilian Andreev

1
Sehr kurze und einfache Lösung, aber es scheint nur mit einer festen, nicht prozentualen Breite und Höhe zu funktionieren. Es funktioniert zwar mit Floats, also +1 dafür. - jsfiddle.net/2s2nY/2
magnetronnie

1
aber das macht nur die vertikale Ausrichtung, aber nicht die horizontale richtig?
V-SHY

1
Es funktioniert nicht, wenn die Bildbreite größer als die Breite von div ist.
Davuz

5
Wenn wir die Anzeige entfernen: Tabellenzelle; es funktioniert perfekt.
Ahesanali Suthar

103

Dies kann auch über das Flexbox-Layout erfolgen:

STATISCHE GRÖSSE

.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>

DYNAMISCHE GRÖSSE

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>

Ich habe das Beispiel in diesem Artikel gefunden , das die Verwendung des Layouts hervorragend erklärt.


In der statischen Größe sind Breite und Höhe für das Kind nicht erforderlich (zumindest in meiner Version von Firefox).
Rodrigo

91

Mir scheint, Sie wollten auch, dass das Bild vertikal im Container zentriert wird. (Ich habe keine Antwort dafür gesehen)

Arbeitsgeige:

  1. Reine CSS-Lösung
  2. Den Dokumentenfluss nicht unterbrechen (keine Floats oder absolute Positionierung)
  3. Cross-Browser-Kompatibilität (auch IE6)
  4. Völlig reaktionsschnell.

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;
}

Hinweis: Mit dieser Lösung können Sie jedes Element innerhalb eines Elements ausrichten. Für IE7 müssen Sie beim Anwenden der .CenteredKlasse auf Blockelemente einen anderen Trick verwenden, um die inline-blockArbeit zu erledigen . (das, weil IE6 / IE7 nicht gut mit Inline-Block auf Blockelementen spielen)


Anstatt zusätzliche zu haben span, könnten Sie das Pseudo-Element verwenden :before: jsfiddle.net/xaliber/cj6zhtp0
Deathlock

@deathlock es ist bekannt. aber ich zielte auf alte IE-Browser (die keine Pseudoelemente unterstützten).
Avrahamcool

1
Es ist nicht so, aber HTML sollte nur für die Struktur verwendet werden, nicht für die Präsentation. Dieser Job bleibt für CSS übrig, daher das Pseudoelement.
Deathlock

1
Was meinst du mit "Den Dokumentenfluss nicht unterbrechen (keine Floats oder absolute Positionierung)"? Was ist das #over { position:absolute; width:100%; height:100%;?
Rodrigo

1
@Rodrigo in der Tat, wenn Sie nicht auf ältere Browser abzielen müssen, ist diese Flexbox der empfohlene Ansatz.
Avrahamcool


32

Sie können dies einfach tun, indem Sie die Eigenschaft display: flex css verwenden

#over {
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

Dies ist derjenige, der für mich arbeitet. Bild tief in PUG / SCSS verschachtelt. Vielen Dank.
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;
}

Dies ist die richtige Antwort, die sowohl vertikal als auch horizontal zentriert.
Alexander Kim

Beste Antwort bisher.
Kiran Puppala

13

Ich hatte noch einige Probleme mit anderen hier vorgestellten Lösungen. Schließlich funktionierte das am besten für mich:

<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%;
}

Weitere Informationen zu diesem Ansatz finden Sie auf dieser Seite .


Ich musste auch übergeordnetes CSS hinzufügen, aber Ihr Code funktionierte perfekt! Position: relativ; Breite: 100%; float: left; Überlauf versteckt; Mindesthöhe: 189px;
user2593040

10

Wenn Sie den rechten und linken Rand auf Auto setzen, wird das Bild in der Mitte ausgerichtet.

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


7

Daaawx 'Antwort funktioniert, aber ich denke, es wäre sauberer, wenn wir das Inline-CSS eliminieren würden.

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>


6

Wenn Sie das Bild so einstellen , dass es angezeigt wird: Inline-Block, während Sie das übergeordnete Div auf Textausrichtung: Mitte eingestellt haben, wird dies ebenfalls erledigt

EDIT: für diejenigen, die mit Display spielen: Inline-Block >>> Vergessen Sie nicht, dass zB zwei Divs mögen

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

habe wirklich keine Leerzeichen zwischen ihnen (wie hier zu sehen).

Nur einfach, um diese (Inline-Block-inhärenten) Lücken zwischen ihnen zu vermeiden. Diese Lücken sind zwischen jeweils zwei Wörtern zu sehen, die ich gerade schreibe! :-) Also .. hoffe das hilft einigen von euch.


6

EINFACH. 2018. FlexBox. So überprüfen Sie die Browserunterstützung: Kann ich eine

Minimallösung verwenden:

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


So erhalten Sie die größtmögliche Browserunterstützung:

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

5

Ich habe viele Ansätze ausprobiert, aber nur dieser funktioniert für mehrere Inline-Elemente in einem Container-Div. Hier ist Code, um alles in div in der Mitte auszurichten.

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>

Beispielcode finden Sie hier: https://jsfiddle.net/yogendrasinh/2vq0c68m/



3

Versuchen Sie diesen minimalen Code:

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

Und CSS:

.outer{
  text-align: center;
}
.outer img{
  display: inline-block;
}

3

Nun, wir sind im Jahr 2016 ... warum nicht Flexbox verwenden? Es reagiert auch. Genießen.

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


1
Liebe CSS3! Danke dir. Es ist jedoch gut zu beachten, dass dies nur in modernen Browsern (außer IE) funktioniert. Alle anderen Browser haben keine Auswirkung.
Neel

2

Viele Antworten empfehlen die Verwendung, margin:0 autoaber dies funktioniert nur, wenn das Element, das Sie zentrieren floatmöchten, nicht links oder rechts schwebt, dh das CSS-Attribut ist nicht festgelegt. Wenden Sie dazu das displayAttribut an table-cellund wenden Sie dann den Rand von links und rechts auf auto an, damit Ihr Stil so aussiehtstyle="display:table-cell;margin:0 auto;"


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

2

HTML:

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

CSS:

#over {
  text-align: center;
}

#over img {
  vertical-align: middle;
}

Es ist am besten, wenn Sie einen Kommentar hinzufügen und nicht nur Code da draußen werfen.
Parkash Kumar

2

Für horizontale Mitte Einfach setzen

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

Eine andere Methode:

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

Für die vertikale Mitte Einfach setzen:

   #over img {

           vertical-align: middle;
        }

2

Das hat bei mir funktioniert:

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

2

Das hat den Trick für mich getan.

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

'Hinweis: In diesem Fall ist' BrandImage 'keine CSS-Klasse zugeordnet

CSS:

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

.CenterImage img {
    margin: 0 auto;
    display: block;
}

2

Dies hat bei mir funktioniert, wenn Sie das Bild zentrieren müssen und Ihr übergeordnetes Div zum Bild den gesamten Bildschirm abdeckt. dh Höhe: 100% und Breite: 100%

#img{
    position:absolute;
    top:50%;
    left:50%;
    transform:translate(-50%,-50%);
}

1

Positionierung verwenden. Folgendes hat bei mir funktioniert ...

Mit Zoom in die Bildmitte (Bild füllt das 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;
}

Ohne Zoom auf die Mitte des Bildes (Bild ist nicht füllen Sie das 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;
    }

1

Die markierte Antwort darauf richtet das Bild nicht vertikal aus. Eine geeignete Lösung für moderne Browser ist die Flexbox. Ein Flex-Container kann so konfiguriert werden, dass seine Elemente sowohl horizontal als auch vertikal ausgerichtet werden.

<div id="over" style="position:absolute; width:100%; height:100%; display: flex; align-items: center; justify-content: center;">
    <img src="img.png">
</div>

Diese Lösung beantwortet die Frage und funktioniert im Gegensatz zur markierten Antwort. Vielleicht könnte der Down-Voter seine Entscheidung zur Downvote detailliert beschreiben?
WDuffy

6
Aus der Überprüfungswarteschlange : Darf ich Sie bitten, einen Kontext um Ihren Quellcode hinzuzufügen. Nur-Code-Antworten sind schwer zu verstehen. Es wird sowohl dem Fragesteller als auch zukünftigen Lesern helfen, wenn Sie Ihrem Beitrag weitere Informationen hinzufügen können.
RBT

1
Das rechtfertigt die Ablehnung nicht. Die Antwort ist technisch korrekt und würde zukünftigen Lesern helfen. Ich habe den Antworttext aktualisiert, um die Hausregeln einzuhalten, aber möglicherweise sollte das Kernteam eine direktere Lösung implementieren, da das Identifizieren von Antworten nur mit Code eine triviale Aufgabe ist.
WDuffy

0

Sie können sich diese Lösung ansehen:

Horizontales und vertikales Zentrieren eines Bildes in einer Box

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

0

Eine einfache Möglichkeit wäre, separate Stile sowohl für das div als auch für das Bild zu erstellen und diese dann unabhängig voneinander zu positionieren. Wenn ich meine Bildposition auf 50% setzen möchte, hätte ich Code, der wie folgt aussieht ...

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


Sagen Sie mir einfach, ob es mit allen Arten von Browsern funktioniert, obwohl dies eine grundlegende Sache ist, die jeder Browser unterstützen muss (andernfalls nennen Sie es keinen Browser)
KSJ10

0
#over {
    display: table-cell; 
    vertical-align: middle; 
    text-align: center;
    height: 100px;
}

Ändern Sie den Höhenwert für Ihre Anforderungen.


0

Das sollte funktionieren.

WICHTIG FÜR DEN TEST: Um ein Code-Snippet auszuführen, klicken Sie auf die linke Schaltfläche RUN-Code-Snippet und dann auf den rechten Link. Ganze Seite

#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>

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.