Wenn es um das Zentrieren von Elementen im Webdesign geht, gilt: Je mehr Informationen Sie über das zu zentrierende Element und sein Elternelement haben, desto einfacher ist es. Was ist also, wenn Sie nichts wissen? Es ist immer noch irgendwie machbar.
Nicht zu schwer: Bekanntes Kind
Wenn Sie die Höhe und Breite sowohl des zu zentrierenden Elements als auch seines Elternelements kennen (und diese Maße sich nicht ändern, d. h. nicht in einer fließenden Breite), ist eine narrensichere Methode, das Element zu zentrieren, es einfach mit absoluter Positionierung und Pixelwerten zu versehen, damit es perfekt zentriert aussieht.
Nehmen wir an, Sie kennen die genaue Breite und Höhe des zu zentrierenden Elements, aber das Elternelement kann sich in Höhe und Breite ändern.

Sie positionieren das zu zentrierende Element absolut und setzen die Werte für oben und links auf 50 % und die Werte für den oberen und linken Rand auf den negativen Wert der halben Höhe und Breite des Elements. Das war eine Zungenbrecher, also schauen Sie sich das an.
Schwieriger: Unbekanntes Kind
Die Schwierigkeit entsteht, wenn Sie die Abmessungen des zu zentrierenden Elements nicht kennen.

Die grobste Methode, damit umzugehen, sind buchstäblich Tabellen
<table style="width: 100%;">
<tr>
<td style="text-align: center; vertical-align: middle;">
Unknown stuff to be centered.
</td>
</tr>
</table>
Wenn Sie sich Sorgen um die Semantik davon machen, könnten Sie versuchen, es an Ihren Inhalt anzupassen.
<div class="something-semantic">
<div class="something-else-semantic">
Unknown stuff to be centered.
</div>
</div>
Und dasselbe Ergebnis wie bei den Tabellen erzielen, wie
.something-semantic {
display: table;
width: 100%;
}
.something-else-semantic {
display: table-cell;
text-align: center;
vertical-align: middle;
}
CSS-Tabellen sind vielleicht in Ordnung für Sie. Oder vielleicht auch nicht. Tabellen rendern sich etwas anders als ein normaler Block-Element-Div. Zum Beispiel die 100%-Breite. Eine Tabelle dehnt sich nur so weit aus, wie sie für den darin enthaltenen Inhalt benötigt wird, während sich ein Block-Element standardmäßig automatisch auf die Breite seines Elternelements ausdehnt. Auch, Gott helfe Ihnen, wenn Sie andere Inhalte in diesem Div benötigen, die Sie positionieren möchten oder die sich nicht wie eine Tabellenzelle verhalten sollen.
Michał Czernow schrieb mir mit einer alternativen Technik, die äußerst clever ist und dasselbe erreicht. Wenn wir ein „Geister“-Element innerhalb des Elternelements einrichten, das 100 % Höhe hat, dann werten wir sowohl dieses als auch das zu zentrierende Element mit vertical-align: middle aus, und wir erzielen denselben Effekt.

Muss dieses Geisterelement ein unsemantisches Element sein? Nein, es kann ein Pseudoelement sein.
/* This parent can be any width and height */
.block {
text-align: center;
/* May want to do this if there is risk the container may be narrower than the element inside */
white-space: nowrap;
}
/* The ghost, nudged to maintain perfect centering */
.block:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -0.25em; /* Adjusts for spacing */
}
/* The element to be centered, can also be of any width and height */
.centered {
display: inline-block;
vertical-align: middle;
width: 300px;
}
View Demo
Ich würde Ihnen gerne sagen, dass die Geisterelement-Technik viel besser ist und die Standard-Zentriertechnik für die Ewigkeit sein sollte. Aber in Wirklichkeit ist sie so gut wie der Tabellen-Trick. Die Browserunterstützung dafür ist im Grunde alles und IE 8+. IE 7 unterstützt keine Pseudoelemente. Aber es unterstützt auch keine CSS-Tabellen, also ist es gleichauf. Wenn IE <= 7-Unterstützung benötigt wird, ist es Zeit für <table> (oder verwenden Sie ein ebenso unsemantisches <span> oder etwas Ähnliches für das Geisterelement).
Diese Dinge sind kein brandneues Terrain. Gary Turner schrieb vor etwa 5 Jahren darüber. Aber ich schreibe Michał zu, dass er es mit einem Pseudoelement gemacht hat und es zur semantischsten Annäherung bisher macht.
Hinweis: Der 0,25em-Ruck nach hinten ist etwas wackelig. Um es perfekt zu machen, könnten Sie font-size: 0; auf dem Elternelement setzen und dann die Schriftgröße innerhalb des Inhaltscontainers wieder hochsetzen.
Der Beispiel-Link ist defekt. Nette Technik! Danke! =)
Sieht so aus, als ob JSfiddle ausgefallen ist. Hoffentlich ist es bald wieder online.
Ich habe nach etwas wie diesem gesucht. Kann es kaum erwarten, die Demo zu sehen :)
Ich finde es ein sehr gutes Beispiel! Ich warte auch auf die Demo…
Sehr cool, ich werde das jetzt benutzen! Was wirklich lustig ist, ist, dass ich das alte <center>-Tag vermisse, weil es alles automatisch horizontal zentriert hätte. Na ja :P
Warum sollte man überflüssigen Markup für etwas hinzufügen, das mit einem einfachen text-align:center in der Stylesheet gemacht werden kann?
Ich sehe keinen Vorteil darin, das „Geisterelement“ hinzuzufügen. Können Sie das näher erläutern?
CM
Das Geisterelement ist 100% hoch vom Elternelement, also wird alles, was vertikal damit ausgerichtet ist, damit zentriert. Das ist es, was das Ganze zum Funktionieren bringt.
Ich habe in Ihrer Demo versucht, einen Span innerhalb eines bedingten HTML-Kommentars für IE7- hinzuzufügen und ihm dieselben Eigenschaften (außer Inhalt) zuzuweisen, aber das funktioniert nicht. Also habe ich die divs durch andere spans ersetzt (wegen des IE7-Bugs, der inline-block auf natürliche Blockelemente anwendet) und es hat funktioniert!
Das ist schade für Semantik und Codevalidierung, aber ist es besser als Tabellen zu verwenden, oder nicht?
Das Beispiel: <a href=”http://jsfiddle.net/vTQBs/”>http://jsfiddle.net/vTQBs/</a>
Entschuldigung, der aktualisierte Test: http://jsfiddle.net/wFPhW/
Das generiert so viel Code in CSS, um einfache 4 Zeilen zu vermeiden.
Bitte sagen Sie mir, warum eine <table> für diese Anwendung nicht semantisch genug ist?
Eine Tabelle ist ein Element zur Darstellung von Daten, jede andere Verwendung davon ist nicht semantisch.
Außerdem können Sie diesen CSS-Code wiederverwendbar machen und ihn dann überall auf Ihrer Website verwenden, wie das „saubere clearfix“. Sie gewinnen an Semantik und Wartbarkeit.
Ich finde es ein großartiger Snippet.
Danke Chris
Ernsthaft, diskutieren wir das immer noch? Wir haben 2011.
Ganz im Ernst, eine Klasse .centered ist auch nicht semantisch. Sie führt Designspezifikationen in Ihr HTML ein.
Sollte die Deklaration
vertical-align: middleauf die Selektoren angewendet werden, diedisplay: table-cellenthalten? Eines Tages habe ich gesehen, wievertical-align: middleauf die Selektoren angewendet wurde, die die Deklaration vondisplay: table(das Elternelement) enthielten.Dann gibt es noch (hoffentlich) Flexbox
box-orient: vertical;
box-pack | box-align: center;
Und kein Wort darüber, wie vertikales Zentrieren eine progressive Verbesserung mit jQuery als Meistermanipulator ist? ;)
Bravo! Ich wollte eigentlich mich hinsetzen und sehen, ob ich etwas Ähnliches entwickeln könnte, aber das hier ist viel sauberer.
Würde
<div class="wrapper"><div class="inner">Inhalt</div></div>
mit
.wrapper { float: left; position: relative; left: 50%; }
.inner { float: left; position: relative; left: -50%; }
in dieser Situation funktionieren und eleganter sein?
natürlich – zentriert nicht vertikal. Entschuldigung…
Fantastische kleine Technik! Sie lässt mich fragen, wie viel ungenutztes Potenzial die :before- und :after-Pseudoelemente immer noch haben.
Je mehr Leute erkennen, wie nützlich sie sind, desto sauberer kann meiner Meinung nach der Code aller werden.
Nicht browserübergreifend natürlich, aber trotzdem.
Meinten Sie transform? Und es ist eine browserübergreifende Lösung für die neuesten finalen Versionen aller wichtigen Browser (außer IE10).
Das ist eine sehr clevere Art, das zu tun, die ich nicht kannte. Danke!
Aber es ist schade, dass es keine direkte Methode gibt, etwas SO EINFACHES zu tun. Ich glaube wirklich, dass CSS von Grund auf neu gedacht werden sollte.
Chris, wenn Sie die Größe des Elternelements nicht kennen, aber die Größe des Kindelements bekannt ist, gibt es eine weitere Methode, per reinem CSS zu zentrieren.
Stu Nicholls hat 2006 eine ähnliche Demo gemacht, die nützlich sein könnte. Er schrieb über seine Lösung
Hier ist der Link zu seiner Demo
Zentrieren eines Bildes unbekannter Größe in einem äußeren Behälter bekannter Größe
Hat der inline-block-Abstand immer 0,25em?
http://www.lifeathighroad.com/web-development/css-web-development/inline-block-whitespace-workaround/
Was ich bisher nicht herausfinden konnte, ist, wenn ich einen Anker habe, der ein Div umschließt, sagen wir 200px x 200px.
Ich möchte, dass das gesamte Div ein einziger großer Link ist, nicht nur der Text darin. Manchmal wird der Text auf zwei oder mehr Zeilen umbrochen. Ich möchte, dass der Text vertikal innerhalb des gesamten blockbasierten Ankers zentriert wird.
Ich mache mir keine Sorgen um IE6-Unterstützung, aber wenn jemand das tun und ein Beispiel zeigen kann, sende ich ihm 10 $!
Vielleicht hilft eine kleine Illustration, wenn ich nicht klar bin
———————————————
|
| Dieser Text und der gesamte
| umgebende Bereich sollte
| zentriert und klickbar sein
|
|
———————————————
Um ein ganzes Div zu einem Link zu machen, können Sie „onclick“ so verwenden
onclick="location.href='https://css-tricks.de'"Damit es wie ein Link aussieht, müssen Sie auch den Cursor im CSS ändern.
cursor:pointer;Ich habe ein Beispiel für Sie gemacht
http://jsfiddle.net/R2eDQ/
Ich hoffe, ich konnte helfen!
Toller Trick, aber der Titel sollte „Zentrierung - DER- Unbekannten“ lauten :)
Die Lösung löst das Problem der vertikalen Zentrierung, wenn die Höhe des zentrierten Blocks (im Gegensatz zu seinem Container) unbekannt ist.
Sie erfordert, dass der Container eine bekannte und feste Höhe hat.
Nein, hat er nicht?
Das funktioniert auch nicht, wenn das Container-Element eine min-height hat – das Pseudoelement erhält sofort eine Höhe von Null. Chris' Pen ein wenig editiert
http://codepen.io/anon/pen/dFfmG
Ich hatte genau dasselbe Problem wie Sie, Christopher: ein Container mit einer
min-height, aber da die Kindelemente von Eltern mit min-heights sich nicht anheight: 100%;anpassen, wie man es erwarten könnte (wie im Fall des Pseudoelements), funktionierte das bei mir nicht.Was ich am Ende gemacht habe, war, die
min-heightdes Pseudoelements auf dieselbe Höhe wie das Elternelement zu setzen. Das scheint ohne Probleme zu funktionieren und verursacht keine Probleme, wenn das Kindelement höher als das Elternelement wird. Ich habe ein Beispiel mit Vergleichen und einigen visuellen Indikatoren erstellt, damit Sie sehen können, was passiert: http://jsfiddle.net/XXQeB/Ich vermisse die tiefere Erklärung der Lösung.
– Was genau passiert
– Warum müssen beide „middle-d“ sein?
Hallo Chris,
Für mich ist es dasselbe wie für Mark. Wenn ich
setze, weil ich die Höhe des Browserfensters nicht kenne, verschwindet alles nach oben. :( Habe ich etwas übersehen?
Grüße aus Berlin.
Ja, ich habe etwas übersehen!
Alle Objekte davor müssen ebenfalls height: 100% haben.
Ferge,
Sie haben Recht, vertikales Zentrieren funktionierte bei mir auch erst, nachdem ich html/body height auf 100% gesetzt hatte.
Chris,
Eine merkwürdige Sache passiert, wenn ich das Browserfenster auf weniger als die angegebene Inhaltsbreite minimiere — ich bekomme eine vertikale Scrollleiste, und der Inhalt fällt unter den Viewport. Ich habe es behoben, indem ich min-width des Bodys auf die gleiche Breite wie der Inhalt gesetzt habe. Resultierendes CSS
html, body { height: 100%; margin: 0; }
.wrap { width: 100%; height: 100%; text-align: center; }
.wrap:before { content: “”; display: inline-block; height: 100%; vertical-align: middle; margin-right: -0.25em; }
.centered { display: inline-block; vertical-align: middle; width: 960px; }
body { min-width: 960px; }
Ich musste genau das tun: ein zentriertes Bild mit variabler Höhe in einem bekannten Elternelement mit einer Bildunterschrift darunter. Ich glaube einfach nicht, dass das ohne JS möglich ist :(
Jede Periode hat ihre eigenen Techniken. Vor einigen Jahren kannten wir die Einschränkungen der Browser, sodass Pseudoelemente keine Option waren. Bruno Fassino testete die Kombination von display: table-cell für „moderne“ Browser, kombiniert mit display: inline-block Hacks für IE. http://www.brunildo.org/test/vertmiddle.html und http://www.brunildo.org/test/img_center.html
Gary Turners Artikel beschreibt die Technik sehr gut. Und Chris Hester bemerkte bereits, dass Stu ähnliche Tests und Lösungen hatte.
Aus heutiger Sicht ist es kurzsichtig, diese Lösungen als „unsemantisch“ zu bezeichnen. Es war das Beste, was man zu dieser Zeit bekommen konnte – man steht auf den Schultern von Riesen.
Hallo Chris, hier ist das Zentrieren eines Divs auf einer Seite ganz einfach :) funktioniert in jedem möglichen Browser oder zumindest in allen, die ich getestet habe.
Der gesamte Artikel hier: http://www.kensfi.com/how-to-align-center-a-div-with-no-width-declared/
Übrigens 2 Zeilen CSS und valides Markup :)
Hier nochmal, sorry… bin nur müde nach dem Tag.
<!DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.0 Transitional//EN“ „http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>Untitled Document</title>
<style type=”text/css”>
ul { text-align: center; }
li { display:inline; padding:0 10px 0 0 }
</style>
</head>
<body>
<div>
<center>
<ul>
<li><img src=”http://www.kensfi.com/images/pict.jpg” width=”200″ height=”166″ /> </li>
</ul>
</center>
</div>
</body>
</html>
Endlich! Ich habe so viele Techniken ausprobiert, um Elemente innerhalb eines Wrappers zu zentrieren, und das ist bei weitem das Beste, was ich je gesehen habe.
Glückwunsch und danke fürs Teilen!
Ironischerweise hatte ich gestern genau dasselbe Problem und griff zu einer hässlichen alten Tabelle. Ich brauche aber IE7-Unterstützung, also werde ich es vorerst so belassen.
Danke fürs Teilen :)
Sehr nützlich!
Die eigentliche Frage ist: Warum hat w3c das nicht schon ewig versucht herauszufinden? Vielleicht, weil vertikales Zentrieren kein stilbezogenes Problem ist, oder so sieht w3c es! Für mich ist das vertikale Zentrieren auf ein unbekanntes Elternelement sehr viel ein dynamisch-visueller Effekt und gehört daher in die Verhaltensebene… also JavaScript. Z. B. Lightboxen, Sie brauchen sowieso JavaScript, um die Box zu öffnen, Sie könnten sie genauso gut von JavaScript positionieren lassen.
visuelle Effekte setzen wahrscheinlich die Kenntnis der Elternelementbreite voraus.
Verdammt, CSS ist hässlich. Werfen Sie einen Blick auf AXR Project (http://axr.vg). Dieses Ding wird Sie 3 Zeilen Code kosten.
Also, warum sind Sie auf CSS-Tricks?
Also, warum sind Sie auf CSS-Tricks?
Nur zur Klarstellung: die Verwendung von unsemantischem Code rein zu Layoutzwecken ist korrekt.
Wir verwenden Divs, um unseren Inhalt zu verpacken, weil sie KEINE semantische Bedeutung haben, nicht weil sie die *richtige* semantische Bedeutung haben. Dasselbe gilt für Spans.
Die Verwendung einer Tabelle ist in diesem Fall falsch, da Tabellen eine inhärente semantische Bedeutung haben.
Indem wir Spans und Divs verwenden, machen wir die Semantik nicht falsch; wir sind einfach überhaupt nicht semantisch. In diesem Fall ist das eine gute Sache.
Liege ich richtig, Chris?
Die von mir verwendete Lösung ist dieselbe wie die ursprüngliche Lösung von Chris, nur erweitert, um Browser- und Versionskompatibilität zu gewährleisten… also Chrome, Firefox, Opera & IE (6 bis 10).
Sie müssen keine Höhe oder Breite kennen und es funktioniert in jedem wichtigen Browser und jeder Version der letzten 10 Jahre.
Kein JS, nur CSS-Hacks…
Demo
http://www.mattpass.com/lab/hCenterVCenter
Das CSS…
.mainContainer { position: absolute; display: table; width: 100%; height: 100%; top: 0px; left: 0px; text-align: center; } .mainContainer .vCenter { #position: absolute; display: table-cell; #top: 50%; vertical-align: middle; text-align: center; } .vCenter .heyImCentered { #position: relative; #top: -50%; text-align: center; display: inline; background-color: red; color: white; }Ich kann nicht von mir behaupten, diese Lösung geschaffen zu haben, aber ich dachte, ich teile sie mit Ihnen!
Cool
Das wird nützlich sein! Aber wie verhält sich inline-block? Ich habe inline-table und inline vorher verwendet.
Beim Zentrieren des „table-cell“-Elements vergessen Sie nicht, float:right | left zu entfernen.
Andernfalls funktioniert die vertikale Ausrichtung nicht.
Hallo, danke fürs Teilen!
Ich frage mich, wann der Fall eintritt, dass ich etwas vertikal zentrieren muss und der Text linksbündig sein muss?
Ich habe eine Website mit gesammelten Gedichten und finde einfach keine kugelsichere Lösung, weil jedes Gedicht unterschiedliche Zeilenbreiten hat.
Außerdem ist es eine typografische Erwartung, dass der Titel jedes Gedichts in der Mitte der durchschnittlichen Zeilenbreite steht.
Ich wäre sehr glücklich, wenn Sie darüber nachdenken könnten.
Viele Grüße,
Greg
Nur ein paar Jahre zu spät, aber die Lösung ist tatsächlich sehr einfach
.verse pre {
display: table;
margin: 0 auto;
}
Schöne Grüße,
gary
Ich habe eine noch einfachere Methode gefunden, die kein Pseudoelement benötigt: http://codepen.io/edge0703/pen/iHJuA
Setzen Sie einfach height und line-height auf denselben Wert für den Container.
Und wenn es mehrere Zeilen gibt?
Schöne Grüße,
gary
Mehrere Zeilen sind kein Problem. Ich habe die Demo aktualisiert, damit Sie sehen können, dass der inline-block jede gewünschte Höhe haben kann: http://codepen.io/edge0703/pen/iHJuA
Und wenn das Elternelement sagen wir mal 250px hoch ist?
Die Geisterelement-Technik funktioniert nicht bei einem absolut positionierten .block-Container, selbst wenn die Höhe dieses Containers eingestellt ist. Die CSS-Tabelle-Methode kenne ich noch nicht, ich werde sie jetzt ausprobieren =) Danke für die Tipps!
@ Chris Coyier
Danke für die Erwähnung. Ich habe diese Seite diesen Monat zum ersten Mal als Referer bemerkt.
gary
Das scheint auf einer Datei nicht zu funktionieren.
es zentriert horizontal, aber die vertikale Ausrichtung funktioniert nur, wenn kein .
Jegliche Hilfe wäre sehr willkommen :))
Der einfachste Weg ist, einfach Dimensionen festzulegen und länger zu leben, der Artikel ist bedeutungslos.
.Absolute-Center {
margin: auto;
position: absolute;
top: 0; left: 0; bottom: 0; right: 0;
width: 100px;
height: 100px;
}
Oh wirklich? Herzlichen Glückwunsch, dass Sie diese Methode jetzt gefunden haben, nachdem sie vor etwa einem Monat die Runde gemacht hat.
Ihr Kommentar hat wie ein Zauber funktioniert :)
Auf Mobilgeräten scheint diese Geistermethode den zentrierten Inhalt außerhalb und unterhalb seines Elternelements zu zwingen, während die display: table-Methode rockt.
Auf Win7 funktioniert Michals Methode perfekt in Chrome v31.0.1650.57 m, Opera v12.16 und Safari v5.1.7 (7534.57.2) (abandonware).
Sie schlägt in Internet Explorer v9.0.8112.16421 Update v9.0.22 und Firefox v25.0 fehl. Das vertikal zu zentrierende Element wird nach unten außerhalb seines Containers gedrückt. Seine Oberseite küsst die Unterseite. :)
Es ist eine verdammte Schande, dass wir immer noch diese Tricks anwenden müssen.
2+ Jahre nach diesem Artikel, 7+ Jahre nach Gary Turners Artikel.
Die Reisezeit zum Mars beträgt 250 – 300 Tage.
Bestimmt durch die Entfernung (sie variiert um Millionen von Kilometern alle 2 Jahre), die Größe des Raumschiffs, die Reisegeschwindigkeit, den Motor und die Menge des mitzuführenden Treibstoffs (weniger Treibstoff = niedrigere Geschwindigkeit = längere Reisezeit).
Nehmen wir an, die Leute bei der NASA (oder einer anderen Raumfahrtbehörde) hatten eine Sauferei. Sie haben etwas vom Treibstoff getrunken. OK, also weniger Treibstoff und damit weniger Geschwindigkeit. Nehmen wir an, das Raumschiff braucht 365 Tage, um den Mars zu erreichen. Da Gary Turner seinen Artikel geschrieben hat (vor über 7 Jahren Mitte 2006), würde das bedeuten, dass mindestens 2 Raumschiffe den Mars erreicht haben. Vielleicht sogar 3, je nachdem, wann der engste Punkt zwischen den beiden Planeten erreicht wurde.
Und diese Browser-Anbieter können uns nicht einmal eine "vertical-center"-Eigenschaft dafür geben.
Die Leute bei der NASA (und anderen Raumfahrtbehörden) müssen sich schlapp lachen: "Das ist nicht gerade Raketenwissenschaft."
PS: Sicher können wir uns aber bei nichts sein. Selbst wenn es eine W3C-Spezifikation für eine "vertical-center"-Eigenschaft gäbe, hätten unsere Browser-Anbieter-Freunde (bei oder nicht bei der W3C) wahrscheinlich alle ihre eigene Interpretation und Implementierung davon.
Verdammt! OK, ich habe gerade herausgefunden, warum. In diesem
Habe ich
width: 100%anstelle einespx-Werts verwendet. Das Ändern von100%auf die tatsächlichen880pxbehob das Problem. Funktioniert jetzt in allen 5. Aber es ist nicht das, was ich will. Keinpx-Wert. Es ist für eine responsive Navigationsleiste.Sie haben eine Notiz gemacht, dass der rechte Rand etwas wackelig ist, das dachte ich auch, warum nicht einfach beide Pseudo-Elemente nutzen: http://codepen.io/mikevoermans/pen/hvwfn
Das würde sie auch zentriert halten.
Hallo Chris,
Dieser Ansatz scheint bei mir mit Bildern nicht zu funktionieren. Fehlt mir hier etwas?
http://jsfiddle.net/TmHe5/1/
Gerade einen kleinen Bug in Safari gefunden.
Wenn man möchte, dass das zentrierte Element (zentriert) die gleiche Breite wie das Eltern-Element (Block) hat und eine serifenlose Schriftart verwendet, funktioniert die Positionierung nicht richtig. Um es zum Laufen zu bringen, kann man die "font-size: 0-Methode" verwenden, wie am Ende des Artikels beschrieben.
Wenn es einen anderen besseren Workaround gibt ... sag es mir. :-)
Danke für diese Techniken. Aber nach einigen Experimenten habe ich festgestellt, dass viele dieser Lösungen in verschiedenen Szenarien Probleme bereiten.
Bei der guten alten Tabellenzentrierung zu bleiben, scheint für mich die schnellste und solideste Lösung zu sein.
Warte immer noch auf volle Flexbox- und Grid-Unterstützung, um solche Probleme zu vermeiden.
Ich mag den
vertical-align:middle-Ansatz sehr. Leider hat er einen Nachteil. Obwohl es kein Blockierer ist: Wenn Sie diese Technik verwenden, um eineposition:fixed-Ebene anzuzeigen, und die Browserbreite kleiner als Ihr zentriertes Element eingestellt wird, bricht es ins Nichts. Eine Mediaquery könnte dabei helfen :)Mein Problem kann mit white-space:nowrap gelöst werden. :)
Wenn das zentrierte Element in FF [27.0.1] auf
width:100%gesetzt wird, wird es unter:beforegeschoben. Um das zu verhindern, habe ich den Nudge zurückgesetzt (margin-right:-0.3em;) auf dem zentrierten Element.Danke für den Share, Chris ... sehr elegante Lösung, wenn man einen vertikal zentrierten Div über einem Bild auf einer responsiven Website schichten muss :)
Ich habe festgestellt, dass es auf kleineren Bildschirmen kaputt ging, aber mit dieser einfachen kleinen Bearbeitung ist alles in Ordnung in der Welt der vertikalen Zentrierung :)
`/* Der Geist, angepiekst, um perfekte Zentrierung zu erhalten */
.block:before
{
content: ”;
display: inline-block;
height: 100%;
width:1px; /* Breite auf 1% setzen, damit der .block-item Div nicht auf die nächste Zeile umbricht */
vertical-align: middle;
margin-right: -0.25em; /* Passt den Abstand an */
}
/* Das zu zentrierende Element, kann
auch jede beliebige Breite und Höhe haben */
.block-item
{
display: inline-block;
vertical-align: middle;
max-width:99%; /* auf 99% setzen, damit es nicht auf die nächste Zeile umbricht */
}
`
Du hast mir gerade viel Kopfzerbrechen erspart. Danke!
Vielen Dank dafür!
Leider scheint die Pseudo-Element-Lösung auf iOs (Chrome / Safari) nicht zu funktionieren, wenn Sie keine Breite für .center festlegen und nur Polster verwenden. Die Oberseite wird nach unten zum Boden des Elternelements geschoben. Ich habe keine Ahnung, warum
Wirklich – es funktioniert nicht auf iOs-Geräten. Mit den von Waseem bereitgestellten Korrekturen läuft es nicht mehr über den Container hinaus, zentriert aber auch nicht.
Das scheint immer noch eine explizite Höhe zu erfordern. Zwar kann diese Höhe variabel sein, aber hier ist ein Beispiel, das nicht funktioniert. Darin ist das Elternteil ein clearfix-ed Container ohne festgelegte Höhe (und die Höhe wird durch ein darin enthaltenes Float bestimmt). In diesem Fall scheint
height: 100%auf dem generierten Inhalt keine Auswirkung zu haben.Was ist mit der Zentrierung eines Elements, dessen Überlauf auf versteckt gesetzt ist? Wie kann zum Beispiel das "Fenster" im Zentrum des Bildes liegen, wenn Sie möchten, dass ein Element als Ansichtsfenster für ein großes Bild dient?
Großartige Informationen!! Nach einigen Anpassungen passt es perfekt zu meinen Bedürfnissen.
Setzen Sie auch die Höhe des übergeordneten Divs, damit sie als Prozentsatz funktioniert, und setzen Sie ihre Position auf absolut.
Das ist eine wunderschöne Lösung! Vielen Dank an Sie und Michał Czernow für das Teilen! Danke auch für die tolle Seite! Ich habe sie vor ein paar Tagen entdeckt und komme ziemlich oft hierher!
Tolle Masche!
Allerdings funktioniert die ::before-Technik nicht, wenn das Eltern-Element ("block" in Ihrem Beispiel) eine Höhe mit einem Prozentsatz hat. Das Gegenmittel dazu ist, einen Div anstelle eines Pseudo-Elements zu verwenden :)
Viele Grüße :)