Ich habe ein Problem mit der Zeilenhöhe, bei dem ich mich nicht so richtig zurechtfinden kann.
Der folgende Code zentriert ein Bild innerhalb eines Div:
CSS
.bar {
height: 800px;
width: 100%;
line-height:800px;
background-color: #000;
text-align: center;
}
.bar img {
vertical-align: middle;
}
HTML
<div class="bar">
<img src="http://27.media.tumblr.com/yHWA4oxH870ulxnoH7CkOSDR_500.jpg" alt="Foo Image" />
</div>
Wenn ich jedoch die Zeilenhöhe auf 100% ändere, wird die Zeilenhöhe nicht wirksam (oder wird zumindest nicht zu 100% des Div).
Weiß jemand was ich falsch mache?
Ich weiß, dass diese Frage alt ist, aber ich habe herausgefunden, was für mich die perfekte Problemumgehung ist.
Ich füge dieses CSS dem Div hinzu, das ich zentrieren möchte:
Dies funktioniert jedes Mal und es ist sauber.
Bearbeiten: Nur zur Vervollständigung verwende ich scss und ich habe ein praktisches Mixin, das ich jedem Elternteil hinzufüge , dessen direkte Kinder ich vertikal zentrieren möchte:
Vollständige Erklärung:
div:before
Fügt ein Element innerhalb des div hinzu, jedoch vor einem seiner untergeordneten Elemente. Bei Verwendung:before
oder:after
wir müssen einecontent:
Erklärung verwenden, sonst passiert nichts, aber für unseren Zweck kann der Inhalt leer sein. Dann weisen wir das Element an, so groß wie sein übergeordnetes Element zu sein, solange die Höhe des übergeordneten Elements definiert ist und dieses Element mindestens ein Inline-Block ist.vertical-align
definiert die vertikale Position des Selbst in Bezug auf die Eltern, im Gegensatz dazutext-align
funktioniert dies anders.Die
@mixin
Deklaration ist für Sass-Benutzer und wird folgendermaßen verwendet:quelle
Wenn Sie den Prozentsatz als Zeilenhöhe verwenden, basiert er nicht auf dem div-Container, sondern auf der Schriftgröße.
quelle
Zeilenhöhe: 100% wäre eine einfache Möglichkeit, Elemente vertikal zu zentrieren, wenn sie in Bezug auf den Container berechnet würden. Dies wäre jedoch zu einfach und funktioniert daher nicht.
Stattdessen ist es nur eine andere Art, Zeilenhöhe zu sagen: 1em (richtig?)
Eine andere Möglichkeit, ein Element vertikal zu zentrieren, wäre:
quelle
mag nicht schön sein, aber es funktioniert und es ist semantisch;
display: table-cell gibt einem Element die einzigartige Fähigkeit, Tabellen vertikal auszurichten (zumindest denke ich, dass es einzigartig ist).
quelle
Dies ist eine sehr späte Antwort. In modernen Browsern können Sie jedoch die
vh
Ansichtsfenstereinheit verwenden , vorausgesetzt, das übergeordnete Element entspricht ebenfalls 100% der Bildschirmhöhe . GEIGEBrowser-Unterstützung
quelle
Diese Lösung funktioniert in IE9 und höher. Zuerst setzen wir die oberste Position des Kindes auf 50% (Mitte des Elternteils).
translate
Verschieben Sie das Kind dann nach der Regel um die Hälfte seiner tatsächlichen Größe nach oben. Der Hauptvorteil ist, dass wir die Größe des Kindes nicht definieren müssen, sondern vom Browser dynamisch berechnet werden. JSFiddlequelle
Ein moderner Ansatz ist die Verwendung von Flexbox, die einfacher und sauberer ist. Allerdings Flexbox ist ein ganz anderes Paradigma von dem, was
inline-block
,float
oderposition
verwendet werden soll.So richten Sie Elemente in
.parent
Ihnen aus:Das ist es auch schon. Kinder von
flex
Eltern werden automatisch in flexible untergeordnete Elemente konvertiert.Sie sollten mehr über Flexbox lesen. Ein guter Anfang ist dieses Spickzettel: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
quelle
Sie können die Zeilenhöhe basierend auf dieser Elementhöhe festlegen . Wenn die Elementhöhe 200px bedeutet, dass Sie die Zeilenhöhe auf 200px einstellen müssen, um den Text zu zentrieren.
quelle