Ich versuche, ein span
oder div
Element vertikal in einem anderen div
Element zu zentrieren. Wenn ich jedoch sage vertical-align: middle
, passiert nichts. Ich habe versucht, die display
Eigenschaften beider Elemente zu ändern , und nichts scheint zu funktionieren.
Folgendes mache ich derzeit auf meiner Webseite:
.main {
height: 72px;
vertical-align: middle;
border: 1px solid black;
padding: 2px;
}
.inner {
vertical-align: middle;
border: 1px solid red;
}
.second {
border: 1px solid blue;
}
<div class="main">
<div class="inner">
This box should be centered in the larger box
<div class="second">Another box in here</div>
</div>
</div>
Hier ist eine jsfiddle der Implementierung, die zeigt, dass sie nicht funktioniert: http://jsfiddle.net/gZXWC/
Verwenden von CSS3:
CSS:
Hinweis: Dies funktioniert möglicherweise nicht in alten IE
quelle
inline-flex
, dass sich innerhalb des inneren Elements mehrere Elemente hintereinander befinden..inner { width: 100%; }
. Auf diese Weise scheint es zu funktionieren.outer { display: table; } .inner { display: table-cell; vertical-align: middle; }
, ohne jedoch eine Mindestbreite zu erzwingen.justify-content: center;
horizontal ausgerichtet, was großartig funktioniert hatVersuchen Sie dies, funktioniert für mich sehr gut:
quelle
#element span {height:100%;display:-webkit-box;-webkit-box-pack:center;-webkit-box-align:center;}
- Beachten Sie, dass die Höhe wichtig ist, um sicherzustellen, dass die Spanne ansonsten die volle Höhe ihres Containers (wahrscheinlich ein Div) erbt Sie erhalten immer noch keine vertikale Zentrierung!box
indisplay
Das Einstellen der Zeilenhöhe auf die gleiche Höhe, die div enthält, funktioniert ebenfalls
DEMO http://jsfiddle.net/kevinPHPkevin/gZXWC/7/
quelle
line-height
ändert auch die Höhe des inneren Elements. b) Das innere Element ist immer noch nicht genau vertikal zentriert. c) Es funktioniert nicht bei Elementen, die keinen Text enthalten, z. B.<img>
oder Elemente mit fester Höhe.Falls Sie sich nicht auf die Flexbox verlassen können ... Platzieren Sie sie
.child
in.parent
der Mitte. Funktioniert, wenn die Pixelgrößen unbekannt sind (mit anderen Worten, immer) und auch mit IE9 + keine Probleme auftreten.quelle
Sie sollten
vertical-align: middle
das innere Element anlegen , nicht das äußere Element. Stellen Sie dieline-height
Eigenschaft für das äußere Element so ein, dass sie mit derheight
des äußeren Elements übereinstimmt . Dann setzendisplay: inline-block
undline-height: normal
auf das innere Element. Auf diese Weise wird der Text auf dem inneren Element mit einer normalen Zeilenhöhe umbrochen. Funktioniert in Chrome, Firefox, Safari und IE 8+Geige
quelle
line-height: normal;
unddisplay:inline;
funktioniert auch. Der Vorteil dieser Methode ist, dass sie nicht störttext-align:center;
, wodurch die Verwendungdisplay: table-cell;
Probleme verursachen kann. Sehr oft wollen wir sowohl horizontal als auch vertikal ausrichten. Siehe diese bearbeitete Geige: jsfiddle.net/br090prs/36line-height: normal
unddisplay: inline-block
ist so, dass der innere Text richtig umbrochen wird. Wenn Sie sicher sind, dass der Text im inneren Div niemals umbrochen wird, sind diese Eigenschaften nicht erforderlich.Ich habe dies verwendet, um alles in der Mitte des Wrapper-Div auszurichten, falls es jemandem hilft - ich fand es am einfachsten:
quelle
Hier haben Sie ein Beispiel für zwei Möglichkeiten, eine vertikale Ausrichtung durchzuführen. Ich benutze sie und sie funktionieren ziemlich gut. Einer verwendet die absolute Positionierung und der andere die Flexbox .
Beispiel für vertikale Ausrichtung
Mit flexbox können Sie ein Element innerhalb von in einem anderen Element mit
display: flex;
using ausrichtenalign-self
. Wenn Sie es auch horizontal ausrichten müssen, können Siealign-items
und verwendenjustify-content
im Container verwenden.Wenn Sie die Flexbox nicht verwenden möchten, können Sie die Positionseigenschaft verwenden. Wenn Sie den Container relativ und den Inhalt absolut machen, kann sich der Inhalt innerhalb des Containers frei bewegen. Wenn Sie also
top: 0;
undleft: 0;
im Inhalt verwenden, wird es in der oberen linken Ecke des Containers positioniert.Um es auszurichten, müssen Sie nur die oberen und linken Verweise auf 50% ändern. Dadurch wird der Inhalt in der Containermitte von der oberen linken Ecke des Inhalts positioniert.
Sie müssen dies also korrigieren, indem Sie den Inhalt, der halb so groß ist, nach links und oben übersetzen.
quelle
Hier ist ein großartiger Artikel darüber, wie man sich vetisch ausrichtet. Ich mag den Float-Weg.
http://www.vanseodesign.com/css/vertical-centering/
Der HTML:
Und der entsprechende Stil:
quelle
HTML
CSS
Wir setzen das übergeordnete Div so, dass es als Tabelle angezeigt wird, und das untergeordnete Div so, dass es als Tabellenzelle angezeigt wird. Wir können dann die vertikale Ausrichtung für das untergeordnete Div verwenden und dessen Wert auf Mitte setzen. Alles in diesem untergeordneten Div wird vertikal zentriert.
quelle
Es ist einfach. Fügen
display:table-cell
Sie einfach Ihre Hauptklasse hinzu.Schauen Sie sich diese jsfiddle an !
quelle
Hier ist die neueste einfachste Lösung: Sie müssen nichts ändern. Fügen Sie einfach drei Zeilen CSS-Regeln zu Ihrem Container des Div hinzu, in dem Sie zentrieren möchten. Ich liebe
Flex Box
#LoveFlexBoxBonus
Der
justify-content
Wert kann auf die folgenden Optionen eingestellt werden:flex-start
Dadurch wird das untergeordnete Div an der Stelle ausgerichtet, an der der Flex-Flow in seinem übergeordneten Container beginnt. In diesem Fall bleibt es oben.center
, wodurch das untergeordnete div an der Mitte des übergeordneten Containers ausgerichtet wird. Dies ist wirklich ordentlich, da Sie kein zusätzliches Div hinzufügen müssen, um alle untergeordneten Elemente zu umschließen, um den Wrapper in einen übergeordneten Container zu legen und die untergeordneten Elemente zu zentrieren. Aus diesem Grund, ist dies das ist wahre vertikale Mitte (in dercolumn
flex-direction
. In ähnlicher Weise, wenn Sie die Änderungflow-direction
zurow
werden geworden horizontal zentriert.flex-end
, wodurch das untergeordnete Div an der Stelle ausgerichtet wird, an der der Flex-Flow in seinem übergeordneten Container endet. In diesem Fall wird es nach unten verschoben.space-between
, die alle Kinder vom Beginn des Flusses bis zum Ende des Flusses verbreitet. Bei der Demo habe ich ein weiteres Kinder-Div hinzugefügt, um zu zeigen, dass sie verteilt sind.space-around
, ähnlichspace-between
, aber mit der Hälfte des Raums am Anfang und Ende des Flusses.quelle
Da dies bei a
vertical-align
wie erwartet funktionierttd
, können Sie eine einzelne Zelletable
in dasdiv
Feld einfügen , um den Inhalt auszurichten.Klobig, funktioniert aber soweit ich das beurteilen kann. Es hat möglicherweise nicht die Nachteile der anderen Problemumgehungen.
quelle
Legen Sie den Inhalt einfach in eine Tabelle mit einer Höhe von 100% und stellen Sie die Höhe für den Hauptbereich ein
quelle
Um ein span- oder div-Element innerhalb eines anderen div vertikal zu zentrieren, fügen Sie dem untergeordneten div eine Position relativ zum übergeordneten div und eine absolute Position hinzu. Jetzt kann das untergeordnete div an einer beliebigen Stelle innerhalb des div positioniert werden. Beispiel unten zentriert sowohl horizontal als auch vertikal.
CSS:
quelle
Dies ist ein moderner Ansatz, der die CSS-Flexbox-Funktionalität nutzt. Sie können den Inhalt in Ihrem übergeordneten Container jetzt vertikal ausrichten, indem Sie diese Stile einfach zum
.main
Container hinzufügenUnd du kannst loslegen!
quelle