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?

Dro1n2
quelle
12
Duplikat vor 2 Minuten gefragt: CSS: Bild Mitte
Pekka
1
Ähnliches Thema hier: stackoverflow.com/questions/18516317/…
Hashem Qolami
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

Gurpreet Singh
quelle
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>
John K.
quelle
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.

Aerdman
quelle
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)

avrahamcool
quelle
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
62
img.centered {
   display: block;
   margin: auto auto;
}
Nitin
quelle
1
Dies ist sehr ähnlich zu dieser Antwort
suhailvs
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;
}
tanveer ahmad dar
quelle
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;
}
dhir
quelle
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 .

pawel7318
quelle
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>
Garconis
quelle
8

Dies wäre ein einfacherer Ansatz

#over > img{
    display: block;
    margin:0 auto; 
}
Sujay Sreedhar
quelle
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>

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

Sasha
quelle
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; 
}
Nadav
quelle
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/

Yogee
quelle
5

CSS-Datei

.over {
    display : block;
    margin : 0px auto;
Sabarish R.
quelle
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;
}
Luchopintado
quelle
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>

GabMic
quelle
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;"

vikas devde
quelle
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
quelle
2

HTML:

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

CSS:

#over {
  text-align: center;
}

#over img {
  vertical-align: middle;
}
Lahori
quelle
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;
        }
Sanjib Debnath
quelle
2

Das hat bei mir funktioniert:

#image-id {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    width: auto;
    margin: 0 auto;
}
Sileria
quelle
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;
}
julian9876
quelle
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%);
}
Akshay Bande
quelle
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;
    }
ThomasAFink
quelle
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>
WDuffy
quelle
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>
fpauer
quelle
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>

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

Terry Lin
quelle
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>

Intacto
quelle