Das Zentrieren von Dingen in CSS ist das Paradebeispiel für CSS-Beschwerden. Warum muss das so schwer sein?, höhnen sie. Ich denke, das Problem ist nicht, dass es schwierig ist, sondern dass es so viele verschiedene Möglichkeiten gibt, es zu tun, je nach Situation, und es ist schwer zu wissen, welche man wählen soll.
Machen wir also eine Entscheidungsbaum-Struktur und hoffen, dass es einfacher wird.
Ich muss zentrieren…
Horizontal
Sind es Inline- oder Inline-* Elemente (wie Text oder Links)?
Sie können Inline-Elemente horizontal innerhalb eines Block-Level-Elternelements mit nur einem
.center {
text-align: center;
}
Dies funktioniert für Inline, Inline-Block, Inline-Tabelle, Inline-Flex usw.
Ist es ein Block-Level-Element?
Sie können ein Block-Level-Element zentrieren, indem Sie ihm margin-left und margin-right von auto geben (und es eine festgelegte width hat, sonst wäre es Vollbreite und müsste nicht zentriert werden). Das wird oft mit Kurzschriften wie dieser gemacht
.center-me {
margin: 0 auto;
}
Dies funktioniert unabhängig von der Breite des zu zentrierenden Block-Level-Elements oder des Elternelements.
Beachten Sie, dass Sie ein Element nicht nach rechts floaten können, um es zu zentrieren. Es gibt jedoch einen Trick.
Gibt es mehr als ein Block-Level-Element?
Wenn Sie zwei oder mehr Block-Level-Elemente haben, die horizontal in einer Reihe zentriert werden müssen, ist es wahrscheinlich besser, ihnen einen anderen display-Typ zu geben. Hier ist ein Beispiel für die Umwandlung in inline-block und ein Beispiel für Flexbox
Es sei denn, Sie meinen, dass Sie mehrere Block-Level-Elemente übereinander gestapelt haben, in diesem Fall ist die Auto-Margin-Technik immer noch in Ordnung
Vertikal
Das vertikale Zentrieren ist in CSS etwas kniffliger.
Sind es Inline- oder Inline-* Elemente (wie Text oder Links)?
Ist es eine einzelne Zeile?
Manchmal können Inline-/Textelemente vertikal zentriert erscheinen, einfach weil darüber und darunter gleicher Abstand (Padding) ist.
.link {
padding-top: 30px;
padding-bottom: 30px;
}
Wenn Polsterung aus irgendeinem Grund keine Option ist und Sie Text zentrieren möchten, der sich nicht umbrechen wird, gibt es einen Trick, bei dem die line-height gleich der Höhe gesetzt wird, um den Text zu zentrieren.
.center-text-trick {
height: 100px;
line-height: 100px;
white-space: nowrap;
}
Sind es mehrere Zeilen?
Gleicher Abstand oben und unten kann auch für mehrere Textzeilen den zentrierten Effekt erzielen, aber wenn das aus irgendeinem Grund nicht funktioniert, kann das Element, in dem sich der Text befindet, eine Tabellenzelle sein, entweder buchstäblich oder mit CSS so behandelt werden. Die Eigenschaft vertical-align behandelt dies in diesem Fall, im Gegensatz zu dem, was sie normalerweise tut, nämlich die Ausrichtung von Elementen in einer Zeile zu handhaben. (Mehr dazu.)
Wenn etwas Tabellenähnliches nicht in Frage kommt, könnten Sie vielleicht Flexbox verwenden? Ein einzelnes Flex-Kind kann ziemlich einfach in einem Flex-Elternteil zentriert werden.
.flex-center-vertically {
display: flex;
justify-content: center;
flex-direction: column;
height: 400px;
}
Denken Sie daran, dass dies nur dann wirklich relevant ist, wenn der übergeordnete Container eine feste Höhe hat (px, %, usw.), weshalb der Container hier eine Höhe hat.
Wenn beide Techniken nicht in Frage kommen, könnten Sie die „Ghost-Element“-Technik anwenden, bei der ein vollsichtiger Pseudo-Element im Container platziert wird und der Text mit diesem vertikal ausgerichtet wird.
.ghost-center {
position: relative;
}
.ghost-center::before {
content: " ";
display: inline-block;
height: 100%;
width: 1%;
vertical-align: middle;
}
.ghost-center p {
display: inline-block;
vertical-align: middle;
}
Ist es ein Block-Level-Element?
Kennen Sie die Höhe des Elements?
Es ist ziemlich üblich, die Höhe im Layout von Webseiten nicht zu kennen, aus vielen Gründen: Wenn sich die Breite ändert, kann der Textumbruch die Höhe ändern. Unterschiede in der Textgestaltung können die Höhe ändern. Unterschiede in der Textmenge können die Höhe ändern. Elemente mit einem festen Seitenverhältnis, wie Bilder, können bei Größenänderung die Höhe ändern. Etc.
Aber wenn Sie die Höhe kennen, können Sie vertikal zentrieren, so
.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
height: 100px;
margin-top: -50px; /* account for padding and border if not using box-sizing: border-box; */
}
Ist das Element von unbekannter Höhe?
Es ist immer noch möglich, es zu zentrieren, indem man es um die Hälfte seiner Höhe nach oben schiebt, nachdem man es um die Hälfte nach unten geschoben hat
.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
Spielt es eine Rolle, ob sich das Element über die gesamte Höhe des Containers erstreckt?
Wenn nicht, müssen Sie nur den Inhalt darin vertikal zentrieren. Tabellen oder CSS-Display, um Elemente in Tabellen zu verwandeln, können den Trick machen.
Können Sie Flexbox verwenden?
Keine große Überraschung, das ist in Flexbox viel einfacher.
.parent {
display: flex;
flex-direction: column;
justify-content: center;
}
Sie können die Zentrierung in Flexbox auch erreichen, indem Sie margin: auto; auf dem untergeordneten Element verwenden.
Beides Horizontal & Vertikal
Sie können die obigen Techniken beliebig kombinieren, um perfekt zentrierte Elemente zu erhalten. Aber ich finde, das fällt generell in drei Lager
Hat das Element eine feste Breite und Höhe?
Durch die Verwendung negativer Margen, die der Hälfte dieser Breite und Höhe entsprechen, nachdem es absolut bei 50 % / 50 % positioniert wurde, wird es mit großartiger Cross-Browser-Unterstützung zentriert
.parent {
position: relative;
}
.child {
width: 300px;
height: 100px;
padding: 20px;
position: absolute;
top: 50%;
left: 50%;
margin: -70px 0 0 -170px;
}
Hat das Element eine unbekannte Breite und Höhe?
Wenn Sie die Breite oder Höhe nicht kennen, können Sie die `transform`-Eigenschaft und eine negative `translate` von 50 % in beide Richtungen verwenden (sie basiert auf der aktuellen Breite/Höhe des Elements), um zu zentrieren
.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
Können Sie Flexbox verwenden?
Um in beide Richtungen mit Flexbox zu zentrieren, müssen Sie zwei Zentrierungseigenschaften verwenden
.parent {
display: flex;
justify-content: center;
align-items: center;
}
Können Sie Grid verwenden?
Dies ist nur ein kleiner Trick (eingereicht von Lance Janssen), der für ein einzelnes Element ziemlich gut funktioniert
body, html {
height: 100%;
display: grid;
}
span { /* thing to center */
margin: auto;
}
Fazit
Sie können Dinge in CSS absolut zentrieren.
Gute Idee! Ich mag das Konzept dieses Artikels und auch die Show/Hide-Struktur. Ich applaudiere Ihnen, mein Herr.
Allerdings denke ich, dass Sie in einigen Punkten den Kern der klassischen Beschwerde „Zentrierung ist schwer“ verfehlen, die bei mir persönlich immer darauf zurückkommt, die Höhe der Elemente nicht zu kennen.
1) Ihre display: table-cell-Korrektur beruht darauf, die Höhe des untergeordneten Elements zu kennen.
2) In Ihrem Abschnitt „Ist es ein Block-Level-Element“ -> „Ist das Element von unbekannter Höhe“ geben Sie dem Elternelement explizit eine Höhe. Für mich widerspricht das dem Zweck, das Szenario mit unbekannter Höhe zu behandeln. Wenn ich die Höhe des Kindes nicht kenne, kenne ich oft auch nicht die Höhe des Elternelements.
3) In Ihrem „Beide Hor & Vert Beispiel“, wo die Höhe unbekannt ist, ist es etwas seltsam, dass das Kind pos: absolut ist und impliziert, dass das kein großes Problem ist. Ich denke, pos: absolute ist ein großes Manko beim Layout, da es unbeabsichtigte Folgen haben kann, dass sich Elemente übereinander legen.
4) Außerdem versagt in demselben Pen das Element, vertikal zentriert zu bleiben, wenn es einen Geschwister hat, der die vertikale Höhe des Elternelements ausdehnt.
Ungeachtet dessen mag ich die Idee immer noch sehr – sie wird dringend benötigt. Ich denke nur, sie würde verbessert, wenn Sie einige der Einschränkungen anerkennen würden, die meiner Meinung nach die Wurzel der Beschwerde sind, die Sie zu entkräften versuchen.
1) Das tut es nicht wirklich. Ich habe das Beispiel aktualisiert, um die Höhe stattdessen auf die Tabelle anzuwenden.
2) Vertikale Zentrierung ist nur relevant, wenn der Elternteil eine festgelegte Höhe hat. Wenn der Elternteil keine festgelegte Höhe hat, worin zentrieren Sie? Selbst wenn die Antwort „die gesamte Seite“ lautet, müssen Sie die Höhe von (wahrscheinlich) sowohl
html, bodyfestlegen.3) Das ist fair. Es ist nur ein Beispiel. Meiner Erfahrung nach, wenn Sie versuchen, etwas auf diese Weise in beide Richtungen zu zentrieren, handelt es sich wahrscheinlich um ein Modal, bei dem die absolute (oder feste) Positionierung verwendet wird. Wenn nicht, können Sie jede der anderen Techniken nach Bedarf kombinieren. Und es gibt immer Flexbox, das ich viel behandelt habe.
4) Demo für mich hier? Ich kann mir das schwer vorstellen/reproduzieren.
Hallo Chris! Danke für die Antwort.
Zu #1: Ich glaube, wir verstehen uns hier nicht. Das Erste, was ich tat, als ich mir den Pen ansah, war, die HTML-Tabelle zu löschen, da sie für die meisten meiner Anwendungsfälle nicht realistisch/bevorzugt ist, obwohl ich vielleicht zu sehr table-phobisch bin. Ungeachtet dessen bleibt das div html, das tatsächlich eine explizite Höhe hat, die für die vertikale Zentrierung verantwortlich ist. Ergebnis: http://codepen.io/anon/pen/xIvqh
Zu #2: Ich bin hier tatsächlich auf demselben Gleis wie der Kommentator, den Sie gerade wegen des Tons begraben haben. Nehmen wir an, ich möchte zwei inline-block Geschwister unterschiedlicher Höhe vertikal zentrieren: http://codepen.io/anon/pen/Cjdeo
Zu #3: Waffenstillstand.
Zu #4: Eigentlich ist das derselbe Punkt wie #2, obwohl ich nicht bemerkt habe, dass pos: absolute auch hier dazugehört, was die Höhenfrage etwas ablenkt (das Überlappen der Elemente ist ein auffälligerer Layout-Fehler als die Tatsache, dass sie nicht vertikal zentriert sind): http://codepen.io/anon/pen/rjflG .
Entschuldigung, ich habe falsch interpretiert und stelle falsch dar, was Sie mit #1 tun. Waffenstillstand auch hier.
Ausgezeichnete Tricks!
Ich habe versucht, einige davon in meiner responsiven Vorlage anzuwenden. Aber hier funktioniert es nicht wie erwartet. Das Problem ist
1. Ich habe 4 schwebende divs
In responsiven Teilen ist die Breite der Boxen auf 49 % bzw. 100 % eingestellt und alle Boxen schweben links.
Ich habe versucht, allen Boxen die gleiche Höhe zu geben. Bei voller Seitenbreite funktioniert der Stil
funktioniert einwandfrei. Aber auf schmaleren Displays wird die Responsivität der Boxen ignoriert und sie bleiben immer 4 in einer Reihe.
Was ist hier falsch?
Sie können auch absolute Positionierung auf diese Weise verwenden
Siehe Pen Vertical margin: auto von sodawillow (@sodawillow) auf CodePen.
Vor einiger Zeit habe ich 24 verschiedene Fälle von „Zentrierung mit CSS“ gesammelt
http://ksesocss.blogspot.com/2012/05/centrando-al-centro-con-css-16-maneras.html
Spanischer Blog, aber Code ist Code
Wie gut ist es, das zu machen?
Es funktionierte in Opera nicht so gut, aber das Konzept gefiel mir.
http://codepen.io/sodawillow/pen/yqnaC/ :-p es scheint hier in Opera (Win) zu funktionieren :)
Ja! Sicher…
Ich habe noch etwas vergessen: die Verwendung von
min-heightanstelle von festen Höhen funktioniert nicht.Danke
Ich wollte nur die Lightbox (absolute) Zentrierung für Horizontal für alle, denen es hilft, hinzufügen
http://codepen.io/bradwestfall/pen/CBcKy
Wenn man den Elternteil als display:table; und das Kind als display:table-cell;vertical-align:middle; hat, hat dies auch seinen Platz unter den potenziellen Lösungen.
Danke! Ich werde das viel benutzen :)
Das Problem bei der Verwendung der `transform`-Eigenschaft und einer negativen `translate` von 50 % in beide Richtungen (beim Zentrieren eines Elements mit unbekannter Breite und Höhe in beide Richtungen) ist, dass das Ergebnis oft unscharf ist (abhängig von der genauen Größe des ersten Elternelements mit einer nicht-statischen Position), wenn das Ergebnis von -50 % kein ganzer Zahl ist.
Ich denke, die Unschärfe ist auf Retina-Displays unsichtbar, aber auf den meisten Bildschirmen ist sie schrecklich :/
Zustimmung. Ich bin kein Fan davon, Transformationen auf textbasierten Inhalt anzuwenden. Browser sind zwar besser geworden, was die Darstellung angeht, aber Sie erhalten immer noch oft unscharfen, schwer lesbaren Text.
Anscheinend gibt es eine Korrektur, indem `preserve-3d` zum Elternteil hinzugefügt wird.
Da dieser Artikel „complete guide“ heißt, hätte ich gehofft, mehr über gängige Probleme wie das Zentrieren von Floats, das Ausrichten von Listen-Icons in mehrzeiligen Listenelementen usw. zu lesen, anstatt über himmelhohe Flexbox-Sachen.
Aber um die Frage zu beantworten: „Wenn der Elternteil keine festgelegte Höhe hat, worin zentrieren Sie?“ Der Container, der sich durch sein höchstes Kind ausdehnt, bei dem die anderen Kinder vertikal ausgerichtet werden müssen, du.
Wegen des Tons begraben.
Ein schrecklicher Grund, einen völlig vernünftigen Kommentar zu begraben.
Chris – Sie möchten vielleicht hinzufügen, dass für die horizontale Zentrierung von Block-Level-Elementen mit `margin: 0 auto;` eine feste Größe erforderlich ist. Das erwähnen Sie nicht speziell.
Nicht notwendig, da Blockelemente standardmäßig volle Breite haben und keine horizontale Ausrichtung benötigen, wenn sie den gesamten verfügbaren Platz ausfüllen.
Nichts über `vertical-align`, oder? Die wertloseste Eigenschaft überhaupt.
Warum? Warum ist es so verwirrend, schwierig und hacky, etwas Inhalt innerhalb eines Blocks mit fester Höhe zu zentrieren? Das ergibt für mich einfach keinen Sinn. Ich bin so müde. Ich bin so müde.
Es wird unter Vertikal -> Inline -> Mehrere Zeilen erwähnt.
Aber absolut zugestimmt, dass der Prozess viel umständlicher ist, als er sein sollte! Das Konzept ist so grundlegend, aber sehen Sie, wie viele mögliche Lösungen wir haben…
Ausgezeichneter Leitfaden! Kleiner Fehler jedoch: Sie haben „were“ statt „where“ unter Vertikal > Inline > Single Line verwendet.
Sie könnten die „Halbe Pixel“-Korrektur für den vertikalen „translate“-Hack hinzufügen, http://zerosixthree.se/vertical-align-anything-with-just-3-lines-of-css/ (Update vom April 2014)
Ah, ich habe gerade über diese verdammte Unschärfe geschrieben. Danke für diesen nützlichen Kommentar!
Danke für den Link zur Halb-Pixel-Korrektur. Ich habe immer versucht, sie zu vermeiden, indem ich sichergestellt habe, dass mein Zeilenabstand und alle Abstände in Pixeln und geraden Zahlen sind (damit die Höhe immer eine gerade Zahl ist). Aber die Korrektur, die Sie gegeben haben, macht das viel einfacher.
Vollständige Anleitungen sind sehr nützlich. Vielen Dank für diesen ausgezeichneten und klaren Überblick! Lesezeichen gesetzt :-)
Eine weitere Möglichkeit, Elemente mit unbekannter Breite horizontal zu zentrieren, wie z. B. ein
<button>, ohne sich auf den Elternteil zu verlassenObwohl ich es für die eleganteste Lösung halte, erzeugt die vertikale Positionierung mit `translate(-50%)` in Chrome unter Windows, mehreren Versionen, unscharfen Inhalt.
Schöne Zusammenfassung, Chris. Direkt in die Weblibliographie meines CSS-Buchs.
Übrigens, die Beschwerden kommen teilweise daher, dass "" so einfach war und „margin: 0 auto“ so ein Klumpen ist. Das ist immer noch das Schlimmste an CSS.
Wenn ich einen Div mit dynamischer Inhaltsbreite zentrieren muss, kann ich den Trick mit
margin: 0 autonicht verwenden. Sollte ich ihn in diesem Fall einfach in eindisplay: inline-blockElement konvertieren? Was ist, wenn diese Lösung nicht möglich ist?DIVs schrumpfen nicht, um sich anzupassen (es sei denn, sie werden gefloatet). Wenn Sie also keine Breite hinzufügen, wird es immer die volle Breite sein, wo Sie keine horizontale Zentrierung benötigen. Sie müssen also sowieso eine Breite hinzufügen. Oder `inline-blick` verwenden, wie Sie bereits sagten.
Sie können auch die Zeilenhöhentechnik für mehrere Zeilen verwenden, und sie hat eine bessere Browserunterstützung –
http://codepen.io/seanjacob/pen/xjAnD
Eigentlich ist das nur eine Zeile/ein Container mit mehreren Zeilen darin. Wenn Sie mehrere Zeilen/Container möchten, funktioniert es nicht.
Können Sie mir ein Beispiel zeigen? Wenn Sie mehrere Container möchten, sollten Sie sie in das
.middle-Element legen, anstatt mehrere.middle-Elemente zu erstellen.Nur zur Info, vielleicht ist CSS intrinsic sizing eine (futuristische) Alternative zur horizontalen Zentrierung von Blockelementen?
In Zukunft sicherlich. Im Moment ist die Browserunterstützung für intrinsische Größen nicht schlecht für
width, aber die Unterstützung fürfit-contentbeiheightist schrecklich.Es wäre toll, wenn Sie die Browserkompatibilität für jede Methode durchgehen würden!
Ich habe eine Vergleichstabelle mit der Browserkompatibilität für diese verschiedenen Methoden und einige, die nicht erwähnt werden, zusammengestellt. Sehen Sie die „Vergleichstabelle“ unter http://codepen.io/shshaw/full/gEiDt/
Die meisten dieser Methoden sollten in IE8+ funktionieren, `transforms` nur in IE9+. Weitere Informationen zu jeder Technik finden Sie unter „Other Techniques“.
Tolle Zusammenfassung. Überrascht, dass `margin: auto` als Lösung für feste Breite/Höhe nicht erwähnt wird.
In Ihrem „Ghost Centering“ Beispiel, unter Vertikal > Inline > Mehrere Zeilen, funktioniert es nur richtig, weil Sie eine feste Breite für das zu zentrierende Inline-Element haben.
Da beide
display: inline-blocksind, fügt der Browser automatisch Abstand zwischen sie ein. Wenn Sie die feste Breite entfernen, wird Ihr Inhalt durch das::before-Element nach unten gedrückt,http://codepen.io/shshaw/pen/bfvHt
Eine sicherere Methode, auf diese Weise zu zentrieren, ist die Verwendung von
::after. So wird der eigentliche Inhalt niemals durch das Pseudo-Element nach unten gedrückt.Sie können auch die feste Breite des Inhalts entfernen und
letter-spacing: -0.5emverwenden, um einen Abstand zwischen dem Pseudo-Element und dem zu zentrierenden Element zu verhindern. Setzen Sie ihn dann mitletter-spacing: normalauf dem zentrierten Element zurück.http://codepen.io/shshaw/pen/huzer
Hallo Chris. Das ist eine fantastische Ressource. Ich denke, es wäre super nützlich, wenn Sie einige grundlegende Richtlinien hinzufügen würden, wann welche Methode verwendet werden soll. Es geht meist um Browserkompatibilität, wo meiner Meinung nach viele Leute unklar sind. Vielleicht, wenn eine Matrix erstellt würde, in der Sie die Browser abhaken, die Sie unterstützen möchten, und dann nur die relevanten Methoden hervorgehoben würden.
Ich habe einige Ideen, wie man das mit diesem Artikel als Basis machen kann… Ich sollte wirklich anfangen zu bloggen.
Das hat mir sehr geholfen. Allerdings habe ich immer noch Probleme, mehrere divs in einer Reihe zu zentrieren. Wenn Sie Zeit haben, schauen Sie sich bitte meine Website an (ich bin neu in der Webentwicklung, also beurteilen Sie sie nicht zu hart) Meine Website und schauen Sie sich die 5 Kreise oben auf der Seite an… derzeit sind sie horizontal nicht zentriert (es gibt mehr Leerraum auf der einen Seite als auf der anderen). Ich fragte mich, ob Sie wüssten, wie dieses Problem behoben werden kann, damit alles auf der Seite zentriert ist. Danke für Ihre Zeit.
Toller Beitrag!
Die Art und Weise, wie Sie verschiedene Spalten gleich hoch machen, ist mit
display: flex;so einfach!Wünschte, es gäbe Unterstützung für IE 9 zumindest.
Kennt jemand einen einfachen „Fallback“ dafür?
Süßer Jesus! Die `transform: translate(-50%, -50%);` ist absolut genial… Ich kann nicht glauben, dass ich nie darüber nachgedacht habe. Ich war mir nicht bewusst, dass dies so gut unterstützt wird.
Das Leben ist gerade besser geworden :-)
Danke Chris für diesen sehr nützlichen Leitfaden!
Sie, mein Herr, verdienen einen Daumen hoch!
Ich persönlich habe den Wert „0“ nie verwendet, wenn ich `margin` verwendet habe. Ich habe immer
margin:auto;verwendet, das war alles. Nie hatte ich irgendwelche Probleme, diese 0 wegzulassen.Sag ich nur.
Tolle Entscheidungsbaum-Idee!
Ich liebe diese Seite so sehr! Ich habe viele CSS-Probleme gelöst, indem ich hierher gekommen bin! Danke Chris!
Hallo Chris, wie immer ein großartiger Artikel und sehr nützlich!
Vorsicht, die CodePen-Beispiele sind von einem Zweig/Absatz zum anderen verschoben (z. B. das Beispiel für Geisterelemente sollte unter Vertikal/Inline/Mehrere Zeilen stehen, ist aber tatsächlich unter Vertikal/Block/Kennen Sie die Höhe).
Viele Grüße, Pierre
Gut organisierter Artikel. Zentrierung in CSS ist immer ein Problem für Webentwickler. Dieser Leitfaden ist eine Rettung für sie!
Ich habe immer `line-height` für die vertikale Ausrichtung von Texten verwendet. Andernfalls denke ich darüber nach, Javascript zu verwenden, um Elemente beim Laden der Seite auszurichten ;-) aber das ist nicht der richtige Weg! Danke für den Artikel!
Vielen Dank für Ihre großartige Information. Sie ist ein Muss für CSS-Anfänger.
„Ist das Element von unbekannter Breite und Höhe?“ – Ich bevorzuge die kugelsichere, altmodische Lösung mit Tabellen http://codepen.io/andychups/pen/CDLxK.
Übrigens, ich mag diesen Tweet: „Der einfachste Weg, etwas in CSS vertikal zu zentrieren, ist, den Laptop zuzuklappen und in die Bar zu gehen.“ @bleikamp
:)
Hallo Chris,
Wissen Sie, ob es Optionen gibt, Text basierend auf seiner x-Höhe anstatt der gesamten Textlänge vertikal zu zentrieren? Wenn der Container etwas größer als die Schriftgröße ist, könnte dies bevorzugt werden.
Die Option, an die ich denken konnte, funktioniert nur für eine Textzeile und besteht darin, ein Pseudo-Element mit der Höhe des Containers und vertikal ausgerichtet: Mitte; hinzuzufügen.
Siehe http://codepen.io/ckuijjer/pen/nIGCt
Coole Sachen, ich lese gerne deine Blogs
Gut gemacht. Es gibt immer eine Reihe verschiedener Optionen, aber ich denke, die Frustration kocht darauf hinaus, dass es keinen narrensicheren Weg gibt, etwas mit guter Browserunterstützung vertikal zu zentrieren und ohne zusätzlichen Markup. Es fühlt sich immer ein wenig nach einem Hack und schmutzig an, egal welchen Weg ich einschlage, aber ich schätze, die vertikale Zentrierung ist da nicht allein.
Wenn die Höhe des Elternteils bekannt ist, füge ich diese normalerweise als Zeilenhöhe auf diesem Elternteil hinzu und mache das Kind Inline-Block, sodass die Höhe des Kindes variabel sein kann. Wenn die Höhe des Elternteils unbekannt ist, mache ich das Kind normalerweise absolut positioniert und bewege es nach Bedarf.
Danke für die Tipps, ich mag auch diese Methode, die auch unter IE8 funktioniert
http://codepen.io/anon/pen/CmlDL
Sie basiert auf Inline-Block und der Verwendung eines Pseudo-Elements.
Die Zeilenhöhenoption für die vertikale Zentrierung funktioniert großartig.
Ich verstehe jedoch nicht, wann `min-height` verwendet werden soll. Wenn ich eine feste Höhe und Zeilenhöhe für eine Vollbild-Toolbar oben einstelle, wäre die Responsivität dann ein Problem?
Danke für das Tutorial!