So richten Sie ein Bild innerhalb eines Div vertikal aus


1456

Wie können Sie ein Bild innerhalb eines Containers ausrichten div?

Beispiel

In meinem Beispiel muss ich das <img>in <div>mit class ="frame" vertikal zentrieren :

<div class="frame" style="height: 25px;">
    <img src="http://jsfiddle.net/img/logo.png" />
</div>

.frameDie Höhe ist fest und die Höhe des Bildes ist unbekannt. Ich kann neue Elemente hinzufügen, .framewenn dies die einzige Lösung ist. Ich versuche dies in Internet Explorer 7 und höher, WebKit, Gecko.

Sehen Sie die jsfiddle hier .

.frame {
    height: 25px;      /* Equals maximum image height */
    line-height: 25px;
    width: 160px;
    border: 1px solid red;

    text-align: center;
    margin: 1em 0;
}
img {
    background: #3A6F9A;
    vertical-align: middle;
    max-height: 25px;
    max-width: 160px;
}
<div class=frame>
   <img src="http://jsfiddle.net/img/logo.png" height=250 />
</div>
<div class=frame>
   <img src="http://jsfiddle.net/img/logo.png" height=25 />
</div>
<div class=frame>
   <img src="http://jsfiddle.net/img/logo.png" height=23 />
</div>
<div class=frame>
   <img src="http://jsfiddle.net/img/logo.png" height=21 />
</div>
<div class=frame>
   <img src="http://jsfiddle.net/img/logo.png" height=19 />
</div>
<div class=frame>
    <img src="http://jsfiddle.net/img/logo.png" height=17 />
</div>
<div class=frame>
    <img src="http://jsfiddle.net/img/logo.png" height=15 />
 </div>
<div class=frame>
    <img src="http://jsfiddle.net/img/logo.png" height=13 />
 </div>
<div class=frame>
    <img src="http://jsfiddle.net/img/logo.png" height=11 />
 </div>
<div class=frame>
    <img src="http://jsfiddle.net/img/logo.png" height=9 />
 </div>
<div class=frame>
    <img src="http://jsfiddle.net/img/logo.png" height=7 />
 </div>
<div class=frame>
    <img src="http://jsfiddle.net/img/logo.png" height=5 />
 </div>
<div class=frame>
    <img src="http://jsfiddle.net/img/logo.png" height=3 />
 </div>


3
Hallo, tut mir leid, aber ich bin nicht einverstanden, dass hier ein Helfer die am meisten geschätzte Lösung ist. Aber es ist nicht der einzige Weg. Andere werden ebenfalls von Browsern unterstützt. Ich biete hier eine Lösung unter stackoverflow.com/a/43308414/7733724 und W3C.org über Informationen an. Sie könnten überprüfen. Prost
Sam

Das Lesen des Artikels über zentrierende Dinge auf W3C wird nützlich sein: w3.org/Style/Examples/007/center.en.html
QMaster

Perfekte Anleitung zum Ausrichten von css-tricks.com/centering-css-complete-guide
Michael Yurin

Antworten:


2128

Der einzige (und beste Cross-Browser-) Weg, wie ich weiß, besteht darin, einen inline-blockHelfer mit height: 100%und vertical-align: middleauf beiden Elementen zu verwenden.

Es gibt also eine Lösung: http://jsfiddle.net/kizu/4RPFa/4570/

Wenn Sie in modernen Browsern kein zusätzliches Element haben möchten und keine Lust haben, Internet Explorer-Ausdrücke zu verwenden, können Sie ein Pseudoelement verwenden und es mit einem praktischen Ausdruck, der nur einmal pro Element ausgeführt wird, zu Internet Explorer hinzufügen Es treten also keine Leistungsprobleme auf:

Die Lösung mit :beforeund expression()für Internet Explorer: http://jsfiddle.net/kizu/4RPFa/4571/


Wie es funktioniert:

  1. Wenn Sie zwei inline-blockElemente nebeneinander haben, können Sie sie an der Seite des anderen ausrichten, sodass vertical-align: middleSie Folgendes erhalten:

    Zwei ausgerichtete Blöcke

  2. Wenn Sie einen Block mit fester Höhe haben (in px, emoder einem anderen absoluten Einheit), kann die Höhe der inneren Blöcke in gesetzt %.

  3. So, eine Zugabe inline-blockmit height: 100%mit fester Höhe in einem Block würde ein anderes auszurichten inline-blockElement darin ( <img/>in diesem Fall) vertikal in der Nähe davon.

2
Sie können selbst sehen: jsfiddle.net/kizu/Pw9NL - nur Inline-Boxen generieren keine Box, aber alle anderen Fälle funktionieren einwandfrei.
Kizu

3
Sehr gute Antwort. Ich hatte Probleme mit den Leerzeichen zwischen den Inline-Blockelementen, dh zwischen .frameund .frame:before. Eine hier vorgeschlagene Lösung ist das Hinzufügen margin-left: -4pxzu .frame. Hoffe das hilft.
Mick

111
Achten Sie darauf, dass sich das: <img src=""/>NICHT in dem <span></span>hinzugefügten Helfer befindet. Es ist draußen. Ich habe fast jede Haarsträhne gezogen, indem ich das nicht bemerkt habe.
Ryan

50
Es scheint, als müssten Sie auch "white-space: nowrap" hinzufügen. oder Sie werden auf ein Problem stoßen, wenn Sie einen Zeilenumbruch zwischen Ihrem Bild und der Hilfsspanne haben. Ich habe eine Stunde gebraucht, warum diese Lösung bei mir nicht funktioniert hat.
Juminoz

2
In meinem Fall waren für mein Bild die maximale Höhe und die maximale Breite auf 100% eingestellt, damit das Bild den Container skaliert, und diese Methode funktionierte nicht. Meine Lösung bestand darin, diese Werte auf 90% zu ändern (was in meinem Fall in Ordnung war; in einer anderen Situation müssen Sie den Container möglicherweise entsprechend skalieren) und der anderen Seite des Bildes einen Helfer hinzuzufügen, damit die Polsterung gleichmäßig bleibt beide Seiten.
Eric Dubé

513

Dies könnte nützlich sein:

div {
    position: relative;
    width: 200px;
    height: 200px;
}
img {
    position: absolute;
    top: 0;
    bottom: 0;
    margin: auto;
}
.image {
    min-height: 50px
}

74
Wenn Sie das Bild auch horizontal ausrichten möchten, fügen Sie links hinzu: 0; rechts: 0; zu img
jameskind

Funktioniert dieser nicht in IE10? Ich benutze das irgendwie überall
Max Yari

Funktioniert auch (für mich) mit Container Div mitposition:fixed;
PJ Brunet

1
Einfachste und sauberste Lösung danke!
KDT

Vielen Dank! Hat für mich gearbeitet !!
Alexander Malygin

486

Die Lösung von matejkramny ist ein guter Anfang, aber übergroße Bilder haben ein falsches Verhältnis.

Hier ist meine Gabel:

Demo: https://jsbin.com/lidebapomi/edit?html,css,output

Vorschau


HTML:

<div class="frame">
  <img src="foo"/>
</div>

CSS:

.frame {
    height: 160px; /* Can be anything */
    width: 160px; /* Can be anything */
    position: relative;
}
img {
    max-height: 100%;
    max-width: 100%;
    width: auto;
    height: auto;
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
}

Gibt es eine Möglichkeit, dies so anzupassen, dass Sie das übergroße Bild, z. B. 2x, vergrößern können und es dennoch horizontal und vertikal zentriert bleibt?
Justin

Welche Codes sollten geändert werden, wenn die vertikale Ausrichtung unten statt in der Mitte erfolgen soll?
Bobo

1
@ Bobo entfernen Sie einfach die top: 0;. Dies führt dazu, dass nur bottom: 0;vertikal angewendet wird.
Jomo

Die beste Antwort!
user315338

277

Eine dreizeilige Lösung:

position: relative;
top: 50%;
transform: translateY(-50%);

Dies gilt für alles.

Von hier aus .


Präfixe: -ms- oder -webkit- (vor der Transformation). w3schools.com/cssref/css3_pr_transform.asp
Jorge Orpinel

3
Präfixe für IE9, funktionieren aber in IE8 und niedriger überhaupt nicht: caniuse.com/#search=transform Aber meine Meinung: IE8 ist mir egal
Reign.85

Niemand hat bemerkt, was passiert, wenn das zu zentrierende Kind größer als der Gerätebildschirm ist und das Elternteil das erste Kind im DOM ist ...?
Tao

3
Schön, wenn Sie nicht verwenden können, position: absolute;weil Sie eine fließende Breite benötigen.
plong0

2
Die bisher beste Lösung, sogar besser als die Flexbox, mit Unterstützung für die meisten modernen und alten Browser. Upvote dies bitte
Albanx

141

Eine reine CSS-Lösung:

.frame {
  margin: 1em 0;
  height: 35px;
  width: 160px;
  border: 1px solid red;
  position: relative;
}

img {
  max-height: 25px;
  max-width: 160px;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
  background: #3A6F9A;
}
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=250 />
</div>
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=25 />
</div>
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=23 />
</div>
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=21 />
</div>
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=19 />
</div>
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=17 />
</div>
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=15 />
</div>
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=13 />
</div>
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=11 />
</div>
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=9 />
</div>
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=7 />
</div>
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=5 />
</div>
<div class=frame>
  <img src="http://jsfiddle.net/img/logo.png" height=3 />
</div>

Schlüsselmaterial

// position: relative; - in .frame holds the absolute element within the frame
// top: 0; bottom: 0; left: 0; right: 0; - this is key for centering a component
// margin: auto; - centers the image horizontally & vertically

Bitte lassen Sie mich hier auf einen Leitfaden verweisen, der sogar für IE5 funktioniert (abzüglich dessen, was ich bisher in dem Beitrag gelesen habe). Webmasterworld.com/css/3350566.htm
Matej

Diese Lösung ist ein guter Anfang, aber übergroße Bilder werden mit einem falschen Verhältnis in der Größe geändert . Bitte sehen Sie meine Antwort.
jomo

@ HansWürstchen ja, aber es geht darum zu zentrieren, ob es übergroß wird, ist Designwahl. Hinzufügen von mehr CSS = mehr Unordnung :)
Matej

1
@matejkramny es nicht bekommen überdimensionalen. wenn das Bild ist übergroß, hat es ein falsches Verhältnis. das heißt, es ist in der Höhe gedehnt und sieht nicht richtig aus.
Jomo

✔ Wow, dies funktioniert mit überfüllten Bildern (größer als Wrapper), die akzeptierte Antwort nicht.
Cedric Reichenbach

120

Für eine modernere Lösung und wenn ältere Browser nicht unterstützt werden müssen, können Sie Folgendes tun:

.frame {
    display: flex;
    /**
    Uncomment 'justify-content' below to center horizontally.
    ✪ Read below for a better way to center vertically and horizontally.
    **/

    /* justify-content: center; */
    align-items: center;
}

img {
    height: auto;

    /**
    ✪ To center this image both vertically and horizontally,
    in the .frame rule above comment the 'justify-content'
    and 'align-items' declarations,
    then  uncomment 'margin: auto;' below.
    **/

    /* margin: auto; */
}

/* Styling stuff not needed for demo */
.frame {
    max-width: 900px;
    height: 200px;
    margin: auto;
    background: #222;
}
p {
    max-width: 900px;
    margin: 20px auto 0;
}
img {
    width: 150px;
}
<div class="frame">
    <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/9988/hand-pointing.png">
</div>

Hier ist ein Stift: http://codepen.io/ricardozea/pen/aa0ee8e6021087b6e2460664a0fa3f3e


3
Dies ist besonders nützlich, wenn die Höhe des Containers nicht eingestellt ist
Dave Barnett

oder align-selffür einzelne Artikel
Michael

Das Problem dabei align-selfist, dass die flexiblen Elemente die Höhe des übergeordneten Containers dehnen.
Ricardo Zea

101

Auf diese Weise können Sie ein Bild vertikal zentrieren ( Demo ):

div{
  height: 150px; // Internet Explorer 7 fix
  line-height: 150px;
}
img{
  vertical-align: middle;
  margin-bottom: 0.25em;
}

4
Seltsamerweise konnte ich die akzeptierte Antwort in meiner Situation nicht zum Arbeiten bringen (ich habe das Bild auch mit Überlauf beschnitten: versteckt). Dies funktionierte jedoch perfekt.
Luca Spiller

3
Ich habe dies nur in Chrome getestet, aber die Zeilenhöhe scheint der Schlüssel zu sein. Ich habe das vertikale Ausrichtungsattribut jedoch eher auf das div als auf das img gesetzt, da sich mein img innerhalb eines Ankers befindet (<a/>).
Todd Price

1
Ja, viel einfacher als die akzeptierte Lösung und funktioniert wunderbar. Ich habe diese Lösung auch in jsfiddle gefunden.
Vdboor

1
Wenn Sie wissen, für welche Höhen Sie sorgen müssen, funktioniert dies ziemlich gut
KrekkieD

Aus meiner Erfahrung funktioniert diese Lösung nur mit font-size: 0für div. Bei ziemlich großen Containern können Sie es verpassen, aber wenn Ihr div100px und img 80px ist, ist es ein paar Pixel niedriger.
alTus

38

Sie können auch Flexbox verwenden, um das richtige Ergebnis zu erzielen:

.parent {
  align-items: center; /* For vertical align */
  background: red;
  display: flex;
  height: 250px;
  /* justify-content: center; <- for horizontal align */
  width: 250px;
}
<div class="parent">
  <img class="child" src="https://cdn2.iconfinder.com/data/icons/social-icons-circular-black/512/stackoverflow-128.png" />
</div>


28

Mit Flexbox gibt es eine super einfache Lösung !

.frame {
    display: flex;
    align-items: center;
}

5
Ja, aber Sie können es kaum in allen Antworten sehen. Ich habe versucht, es einfach und klar hervorzuheben, da es eine viel einfachere Lösung ist als alle anderen Antworten.
BBlackwo

Dies ist die beste Antwort, die auch für mich funktioniert hat. Aber in meinem Fall im Rahmen hat "Inline-Flex" für mich besser funktioniert. und für das Bild darin habe ich hinzugefügt: "vertikal ausrichten: Mitte".
Sophie Cooperman

22

Sie können versuchen, das CSS von PI auf einzustellen display: table-cell; vertical-align: middle;


Ich habe verschiedene Methoden gesehen, aber diese war für mich neu (sogar 2013).
Mike Ebert

Besser als das Bild in einen Tisch zu legen, nur um es zu zentrieren.
Jonats

3
Anzeige: Tabellenzelle Größe nicht immer richtig, wenn Sie möchten, dass die Breite 100%
beträgt

1
Was ist " PI"?
Peter Mortensen

18

Sie können den folgenden Code ausprobieren:

.frame{
    display: flex;
    justify-content: center;
    align-items: center;
    width: 100%;
}
<div class="frame" style="height: 25px;">
    <img src="http://jsfiddle.net/img/logo.png" />
</div>


14

Hintergrundbildlösung

Ich habe das Bildelement vollständig entfernt und es als Hintergrund für das div mit einer Klasse von festgelegt .frame

http://jsfiddle.net/URVKa/2/

Dies funktioniert zumindest in Internet Explorer 8, Firefox 6 und Chrome 13 einwandfrei.

Ich habe überprüft, und diese Lösung funktioniert nicht, um Bilder mit einer Höhe von mehr als 25 Pixel zu verkleinern. Es gibt eine Eigenschaft namens, background-sizedie die Größe des Elements festlegt, aber es ist CSS 3, das den Anforderungen von Internet Explorer 7 widerspricht.

Ich würde Ihnen raten, entweder Ihre Browserprioritäten zu wiederholen und für die besten verfügbaren Browser zu entwerfen, oder serverseitigen Code zu erhalten, um die Größe der Bilder zu ändern, wenn Sie diese Lösung verwenden möchten.


Sehr schöne Lösung, aber ich erwarte, dass einige Bilder größer als der Container sind, und in diesem Fall hatte ich vor, maximale Höhe / maximale Breite für sie zu verwenden. Wie kann man das mit Hintergrundbildern machen?
Arnaud Le Blanc

Dies ist kein ".frame-Element", sondern ein "div mit einer Klasse von .frame"
JGallardo

Wenn die Bildhöhe die Höhe des Frame Div nicht überschreitet, ist dies die beste und einfachste Lösung ...
Efirat


11

Sie könnten dies tun:

Demo

http://jsfiddle.net/DZ8vW/1

CSS

.frame {
    height: 25px;      /* Equals maximum image height */
    line-height: 25px;
    width: 160px;
    border: 1px solid red;

    text-align: center; 
    margin: 1em 0;
    position: relative; /* Changes here... */
}
img {
    background: #3A6F9A;
    max-height: 25px;
    max-width: 160px;
    top: 50%;           /* Here.. */
    left: 50%;          /* Here... */
    position: absolute; /* And here */
}    


JavaScript

$("img").each(function(){
    this.style.marginTop = $(this).height() / -2 + "px";
})

Nett. Gibt es eine Chance für eine reine CSS-Lösung?
Arnaud Le Blanc

Leider nein, es sei denn, Sie möchten Tabellen verwenden oder die Kompatibilität mit älteren IE-Versionen löschen. :( Wenn Sie die genaue Größe der Bilder vorher wüssten, wäre es anders, aber nicht ohne das ist es nicht mit CSS allein möglich.
Joseph Marikle

@ Joseph Wie würden Sie es mit Tabellen beheben?
Benjamin Udink zehn Cate

@ Benjamin Udink ten Cate Es ist chaotisch, aber es könnte so gemacht werden: jsfiddle.net/DZ8vW/2 (dies wird nicht empfohlen, sollte aber funktionieren)
Joseph Marikle

1
Nun, es passt perfekt zu den Bedürfnissen von Arnauds. Kein JS, nur CSS und HTML.
Benjamin Udink zehn Cate

11

http://jsfiddle.net/MBs64/

.frame {
    height: 35px;      /* Equals maximum image height */
    width: 160px;
    border: 1px solid red;
    text-align: center;
    margin: 1em 0;
    display: table-cell;
    vertical-align: middle;
}
img {
    background: #3A6F9A;
    display: block;
    max-height: 35px;
    max-width: 160px;
}

Die Schlüsseleigenschaft ist display: table-cell;für .frame. Div.framewird als Inline angezeigt, daher müssen Sie es in ein Blockelement einschließen.

Dies funktioniert in Firefox, Opera, Chrome, Safari und Internet Explorer 8 (und höher).

AKTUALISIEREN

Für Internet Explorer 7 müssen wir einen CSS-Ausdruck hinzufügen:

*:first-child+html img {
    position: relative;
    top: expression((this.parentNode.clientHeight-this.clientHeight)/2+"px");
}

Großartig. Gibt es einen Hack für IE7, der das Javascript vermeiden würde?
Arnaud Le Blanc

Ich bin nicht sicher, aber vielleicht würden CSS-Ausdrücke helfen. Aber sie sind auch Javascript. Der einzige Unterschied ist, dass Sie sie in CSS-Dateien schreiben, nicht in JS.
Webars

Ja, schöne Idee. Das wäre einfacher zu handhaben (das Skript wird bei Bedarf automatisch ausgeführt), und da es nur IE7 sein soll, ist es in Ordnung.
Arnaud Le Blanc

7

Meine Lösung: http://jsfiddle.net/XNAj6/2/

<div class="container">
    <div class="frame">
        <img src="http://jsfiddle.net/img/logo.png" class="img" alt="" />
    </div>
</div>

.container {
    display: table;
    float: left;
    border: solid black 1px;
    margin: 2px;
    padding: 0;
    background-color: black;
    width: 150px;
    height: 150px;
}
.frame {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
    border-width: 0;
}
.img {
    max-width: 150px;
    max-height: 150px;
    vertical-align: middle;
}

7

Dies funktioniert für moderne Browser (2016 zum Zeitpunkt der Bearbeitung), wie in dieser Demo auf Codepen gezeigt

.frame {
    height: 25px;
    line-height: 25px;
    width: 160px;
    border: 1px solid #83A7D3;          
}
.frame img {
    background: #3A6F9A;
    display:inline-block;
    vertical-align: middle;
}

Es ist sehr wichtig, dass Sie den Bildern entweder eine Klasse geben oder die Vererbung verwenden, um auf die Bilder abzuzielen, die Sie zentrieren möchten. In diesem Beispiel haben wir verwendet, .frame img {}damit nur Bilder als Ziel ausgewählt werden, die von einem Div mit einer Klasse von umbrochen wurden .frame.


nur ie7, nur Zeilenhöhe setzen: 25px;
anglimasS

1
es scheint selbst auf Firefox und Chrom nicht richtig ausgerichtet zu sein ( jsfiddle.net/4RPFa/19 )
Arnaud Le Blanc

7

Probieren Sie diese Lösung mit reinem CSS aus. Http://jsfiddle.net/sandeep/4RPFa/72/

Vielleicht ist es das Hauptproblem mit Ihrem HTML. Sie verwenden keine Anführungszeichen, wenn Sie c lass& image heightin Ihrem HTML definieren.

CSS:

.frame {
    height: 25px;      /* Equals maximum image height */
    width: 160px;
    border: 1px solid red;
    position: relative;
    margin: 1em 0;
    top: 50%;
    text-align: center;
    line-height: 24px;
    margin-bottom: 20px;
}

img {
    background: #3A6F9A;
    vertical-align: middle;
    line-height: 0;
    margin: 0 auto;
    max-height: 25px;
}

Wenn ich mit dem imgTag arbeite , bleiben 3 bis 2 Pixel Platz top. Jetzt nehme ich ab line-heightund es funktioniert.

CSS:

    .frame {
        height: 25px;      /* Equals maximum image height */
        width: 160px;
        border: 1px solid red;
        margin: 1em 0;
        text-align: center;
        line-height: 22px;
        *:first-child+html line-height:24px; /* For Internet Explorer 7 */
    }

    img {
        background: #3A6F9A;
        vertical-align: middle;
        line-height: 0;    
        max-height: 25px;
        max-width: 160px;
    }
@media screen and (-webkit-min-device-pixel-ratio:0) {
    .frame {
        line-height:20px; /* WebKit browsers */
    }

Die line-heightEigenschaft wird in verschiedenen Browsern unterschiedlich gerendert. Wir müssen also verschiedene line-heightEigenschaftsbrowser definieren .

Überprüfen Sie dieses Beispiel: http://jsfiddle.net/sandeep/4be8t/11/

Überprüfen Sie dieses Beispiel auf line-heightUnterschiede in verschiedenen Browsern: Unterschiede in der Eingabehöhe in Firefox und Chrome


2
Funktioniert nicht (zumindest in Firefox). Für die fehlenden Anführungszeichen ist dies in HTML5 erlaubt (ich weiß jedoch nicht, welcher Doctype in jsfiddle verwendet wird)
Arnaud Le Blanc

7

Ich bin mir bei Internet Explorer nicht sicher, aber unter Firefox und Chrome sollte der folgende CSS-Inhalt funktionieren , wenn Sie einen imgin einem divContainer haben. Zumindest für mich funktioniert es gut:

div.img-container {
    display: table-cell;
    vertical-align: middle;
    height: 450px;
    width: 490px;
}

div.img-container img {
    max-height: 450px;
    max-width: 490px;
}

IE8 + leider. Gut für mich, aber vielleicht nicht für andere.
TheCarver

Beachten Sie auch, dass display:table-cell;% nicht als Breite akzeptiert wird
Mutmatt

7

Lösung mit einer Tabelle und Tabellenzellen

Manchmal sollte es gelöst werden, indem es als Tabelle / Tabellenzelle angezeigt wird. Zum Beispiel ein schneller Titelbildschirm. Dies wird auch von W3 empfohlen. Ich empfehle Ihnen, diesen Link mit dem Namen Zentrieren eines Blocks oder Bildes von W3C.org zu überprüfen.

Die hier verwendeten Tipps sind:

  • Absoluter Positionierungsbehälter als Tabelle angezeigt
  • Vertikal ausgerichtet zum zentrierten Inhalt, der als Tabellenzelle angezeigt wird

.container {
    position: absolute;
    display: table;
    width: 100%;
    height: 100%;
}
.content {
    display: table-cell;
    vertical-align: middle;
}
<div class="container">
  <div class="content">
    <h1 style="text-align:center">Peace in the world</h1>
 </div>
</div>

Persönlich bin ich nicht einverstanden, Helfer für diesen Zweck einzusetzen.


6

Ein einfacher Weg, der für mich funktioniert:

img {
    vertical-align: middle;
    display: inline-block;
    position: relative;
}

Es funktioniert sehr gut für Google Chrome. Probieren Sie dies in einem anderen Browser aus.


6

Zum Zentrieren eines Bildes in einem Container (es könnte sich um ein Logo handeln) neben einem Text wie diesem:

Geben Sie hier die Bildbeschreibung ein

Grundsätzlich wickeln Sie das Bild

.outer-frame {
  border: 1px solid red;
  min-height: 200px;
  text-align: center; /* Only to align horizontally */
}

.wrapper{
  line-height: 200px;
  border: 2px dashed blue;
  border-radius: 20px;
  margin: 50px
}

img {
  /* height: auto; */
  vertical-align: middle;   /* Only to align vertically */
}
<div class="outer-frame">
  <div class="wrapper">
    some text
    <img src="http://via.placeholder.com/150x150">
  </div>
</div>


4

Wenn Sie mit pixelgroße Margen leben können, fügen Sie einfach font-size: 1px;auf die .frame. .frameDenken Sie jedoch daran, dass Sie jetzt auf 1em = 1px den Rand auch in Pixel festlegen müssen.

http://jsfiddle.net/feeela/4RPFa/96/

Jetzt ist es nicht mehr in Opera zentriert…


3

Ich hatte das gleiche Problem. Das funktioniert bei mir:

<style type="text/css">
    div.parent {
        position: relative;
    }

    img.child {
        bottom: 0;
        left: 0;
        margin: auto;
        position: absolute;
        right: 0;
        top: 0;
    }
</style>

<div class="parent">
    <img class="child">
</div>

Tatsächlich funktionierte die "Position: fest" auf dem Bild für mich, wo ich über die zahlreichen falschen Antworten von Leuten frustriert war, die die Tabellenzellenmethode vorschlugen, die in der Nähe meiner Arbeiten nicht funktionierte. Mit der von algreat vorgeschlagenen Methode benötigen Sie auch keinen zusätzlichen Behälter.
Vasilios Paspalas

2

Sie können dies verwenden:

 .loaderimage {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 60px;
    height: 60px;
    margin-top: -30px; /* 50% of the height */
    margin-left: -30px;
 }

1

Mit tableund table-cellMethode erledigen Sie den Job, insbesondere weil Sie auch auf einige alte Browser abzielen. Ich erstelle ein Snippet für Sie, mit dem Sie es ausführen und das Ergebnis überprüfen können:

.wrapper {
  position: relative;
  display: table;
  width: 300px;
  height: 200px;
}

.inside {
  vertical-align: middle;
  display: table-cell;
}
<div class="wrapper">
  <div class="inside">
    <p>Centre me please!!!</p>
  </div>
  <div class="inside">
    <img src="https://cdn2.iconfinder.com/data/icons/social-icons-circular-black/512/stackoverflow-128.png" />
  </div>
</div> 


0

Ich habe mit der Verwendung von Polstern für die Ausrichtung der Mitte herumgespielt. Sie müssen die Größe des Außencontainers der obersten Ebene definieren, die Größe des Innencontainers sollte jedoch geändert werden, und Sie können die Auffüllung auf verschiedene Prozentwerte einstellen.

jsfiddle

<div class='container'>
  <img src='image.jpg' />
</div>

.container {
  padding: 20%;
  background-color: blue;
}

img {
  width: 100%;
}

0

Die beste Lösung ist das

.block{
    /* Decor */
    padding:0 20px;
    background: #666;
    border: 2px solid #fff;
    text-align: center;
    /* Important */
    min-height: 220px;
    width: 260px;
    white-space: nowrap;
}
.block:after{
    content: '';
    display: inline-block;
    height: 220px; /* The same as min-height */
    width: 1px;
    overflow: hidden;
    margin: 0 0 0 -5px;
    vertical-align: middle;
}
.block span{
    vertical-align: middle;
    display: inline-block;
    white-space: normal;
}

0

Verwende das hier:

position: absolute;
top: calc(50% - 0.5em);
left: calc(50% - 0.5em);
line-height: 1em;

Und Sie können variieren font-size.


0

Möchten Sie ein Bild ausrichten, das nach einem Text / Titel steht und beide sich in einem Div befinden?

Siehe JSfiddle oder Run Code Snippet.

Stellen Sie nur sicher, dass Sie an allen Elementen (div, img, title usw.) eine ID oder eine Klasse haben.

Bei mir funktioniert diese Lösung in allen Browsern (für mobile Geräte müssen Sie Ihren Code anpassen mit: @media).

h2.h2red {
    color: red;
    font-size: 14px;
}
.mydivclass {
    margin-top: 30px;
    display: block;
}
img.mydesiredclass {
    margin-right: 10px;
    display: block;
    float: left; /* If you want to allign the text with an image on the same row */
    width: 100px;
    heght: 100px;
    margin-top: -40px /* Change this value to adapt to your page */;
}
<div class="mydivclass">
    <br />
    <img class="mydesiredclass" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b3/Wikipedia-logo-v2-en.svg/2000px-Wikipedia-logo-v2-en.svg.png">
    <h2 class="h2red">Text aligned after image inside a div by negative manipulate the img position</h2>
</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.