Ich verwende Twitter Bootstrap 3 und habe Probleme, wenn ich zwei vertikal ausrichten möchte div
, zum Beispiel - JSFiddle-Link :
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<div class="row">
<div class="col-xs-5">
<div style="height:5em;border:1px solid #000">Big</div>
</div>
<div class="col-xs-5">
<div style="height:3em;border:1px solid #F00">Small</div>
</div>
</div>
Das Rastersystem in Bootstrap verwendet float: left
nicht display:inline-block
, daher vertical-align
funktioniert die Eigenschaft nicht. Ich habe versucht, margin-top
das Problem zu beheben, aber ich denke, dies ist keine gute Lösung für das reaktionsschnelle Design.
div
, nein den Text darin, so etwas wie jsfiddle.net/corinem/Aj9H9, aber in diesem Beispiel verwende ich nicht bootstrapAntworten:
Sie können eine benutzerdefinierte Klasse weiterhin verwenden, wenn Sie sie benötigen:
Bootply
Verwenden von
inline-block
fügt zusätzlichen Platz zwischen Blöcken hinzu, wenn Sie einen realen Platz in Ihrem Code lassen (wie...</div> </div>...
). Dieser zusätzliche Platz bricht unser Raster, wenn die Spaltengröße 12 beträgt:Hier haben wir zusätzliche Zwischenräume
<div class="[...] col-lg-2">
und<div class="[...] col-lg-10">
(ein Wagenrücklauf und 2 Tabulatoren / 8 Leerzeichen). Und so...Lassen Sie uns diesen zusätzlichen Raum treten !!
Beachten Sie das scheinbar nutzlosen Kommentare
<!-- ... -->
? Sie sind wichtig - ohne sie nimmt das Leerzeichen zwischen den<div>
Elementen Platz im Layout ein und bricht das Rastersystem.Hinweis: Die Bootply wurde aktualisiert
quelle
col-lg-2
undcol-lg-10
). Interessanterweise gelingt es ihm, sich selbst zu reparieren, wenn Sie den folgenden JS-Code hinzufügen (unter der Annahme von jQuery):$('.row').html($('.vcenter'));
inline-block
zusätzlichen Speicherplatz verursacht . Ich gebe eine Lösung in meiner Bearbeitung.Flexibles Boxlayout
Mit dem Aufkommen der CSS Flexible Box wurden viele der Albträume 1 von Webdesignern gelöst. Eine der hackigsten ist die vertikale Ausrichtung. Jetzt ist es auch in unbekannten Höhen möglich .
Flexible Box (oder kurz Flexbox) ist ein neues Layoutsystem, das speziell für Layoutzwecke entwickelt wurde. Die Spezifikation besagt :
Wie kann es in diesem Fall helfen? Okay, lass uns nachsehen.
Vertikal ausgerichtete Spalten
Mit Twitter Bootstrap haben wir
.row
einige.col-*
s. Alles, was wir tun müssen, ist, die gewünschte.row
2 als Flex-Container- Box anzuzeigen und dann alle Flex-Elemente (die Spalten) vertikal nachalign-items
Eigenschaften auszurichten .BEISPIEL HIER (Bitte lesen Sie die Kommentare sorgfältig durch)
Die Ausgabe
Der farbige Bereich zeigt das Auffüllfeld der Spalten an.
Klarstellung auf
align-items: center
Großer Alarm
Wichtiger Hinweis Nr. 1: Twitter Bootstrap gibt die Anzahl der
width
Spalten in besonders kleinen Geräten nur an, wenn Sie.col-xs-#
den Spalten eine der Klassen zuweisen.Daher habe ich in dieser speziellen Demo
.col-xs-*
Klassen verwendet, damit Spalten im mobilen Modus ordnungsgemäß angezeigt werden, da siewidth
die Spalte explizit angeben .Aber alternativ könnte man abschalten die Flexbox einfach Layout , indem
display: flex;
aufdisplay: block;
Größen in bestimmten Bildschirm. Zum Beispiel:Oder Sie können nur bestimmte Bildschirmgrößen wie folgt angeben
.vertical-align
:In diesem Fall würde ich mit gehen @KevinNelson ‚s Ansatz .
Wichtiger Hinweis Nr. 2: Herstellerpräfixe wurden aus Gründen der Kürze weggelassen. Die Flexbox-Syntax wurde im Laufe der Zeit geändert. Die neue geschriebene Syntax funktioniert nicht mit älteren Versionen von Webbrowsern (aber nicht so alt wie Internet Explorer 9! Flexbox wird in Internet Explorer 10 und höher unterstützt).
Dies bedeutet, dass Sie
display: -webkit-box
im Produktionsmodus auch vom Hersteller vorangestellte Eigenschaften wie usw. verwenden sollten.Wenn Sie in der Demo auf "Kompilierte Ansicht umschalten " klicken , wird die vorangestellte Version der CSS-Deklarationen angezeigt (dank Autoprefixer ).
Spalten voller Höhe mit vertikal ausgerichtetem Inhalt
Wie Sie in der vorherigen Demo sehen , sind die Spalten (die Flex-Elemente) nicht mehr so hoch wie ihr Container (die Flex-Container-Box, dh die
.row
Element).Dies liegt an der Verwendung des
center
Werts für diealign-items
Eigenschaft. Der Standardwert iststretch
so, dass die Elemente die gesamte Höhe des übergeordneten Elements ausfüllen können.Um dies zu beheben, können Sie auch folgende
display: flex;
Spalten hinzufügen :BEISPIEL HIER ( Beachten Sie auch hier die Kommentare)
Die Ausgabe
Der farbige Bereich zeigt das Auffüllfeld der Spalten an.
Beachten Sie zu guter Letzt , dass die Demos und Codefragmente hier eine andere Idee vermitteln sollen, um einen modernen Ansatz zur Erreichung des Ziels bereitzustellen. Bitte beachten Sie den Abschnitt " Big Alert ", wenn Sie diesen Ansatz in Websites oder Anwendungen der realen Welt verwenden möchten.
Für die weitere Lektüre einschließlich der Browserunterstützung wären diese Ressourcen hilfreich:
1. Richten Sie ein Bild in einem Div vertikal mit der Reaktionshöhe aus. 2. Verwenden Sie besser eine zusätzliche Klasse, um die Standardeinstellungen von Twitter Bootstrap nicht zu ändern
.row
.quelle
col-*
, verwenden Ihre Geigen / Codepens keinen Bootstrap, sodass sie irreführend sind. Ihre Beispiele funktionieren nicht mit Bootstrap. Das Netzsystem basiert nicht aufflex
, daher sind sie nicht kompatibel. Probieren Sie einfach eines Ihrer Beispiele auf einer Bootstrap-basierten Seite aus und Sie werden feststellen, dass sie nicht funktionieren.Der folgende Code hat bei mir funktioniert:
quelle
Update 2020
Ich weiß, dass die ursprüngliche Frage für Bootstrap 3 war, aber jetzt, da Bootstrap 4 veröffentlicht wurde, finden Sie hier einige aktualisierte Anleitungen zur vertikalen Mitte.
Wichtig! Die vertikale Mitte ist relativ zur Höhe des Elternteils
Bootstrap 4
Nun , da Bootstrap 4 FlexBox standardmäßig gibt es viele verschiedene Ansätze für die vertikale Ausrichtung unter Verwendung von : Auto-Margen , FlexBox utils oder die Anzeige utils zusammen mit vertikalen align utils . Auf den ersten Blick scheint "Vertical Align Utils" offensichtlich, aber diese funktionieren nur mit Inline- und Tabellenanzeigeelementen. Hier sind einige vertikale Zentrierungsoptionen für Bootstrap 4 aufgeführt.
1 - Vertikale Mitte mit automatischen Rändern:
Eine andere Möglichkeit, vertikal zu zentrieren, ist die Verwendung
my-auto
. Dadurch wird das Element in seinem Container zentriert. Zum Beispielh-100
macht die Zeile die volle Höhe undmy-auto
zentriert diecol-sm-12
Spalte vertikal .Bootstrap 4 - Vertikale Mitte mit Auto-Rands- Demo
my-auto
stellt Ränder auf der vertikalen y-Achse dar und entspricht:2 - Vertikales Zentrum mit Flexbox:
Da Bootstrap 4
.row
jetzt istdisplay:flex
, können Sie es einfachalign-self-center
für jede Spalte verwenden, um es vertikal zu zentrieren ...oder verwenden Sie
align-items-center
insgesamt.row
, um allecol-*
in der Reihe vertikal zu zentrieren ...Bootstrap 4 - Vertikal zentrierte Spalten mit unterschiedlicher Höhe Demo
3 - Vertikales Zentrum mit Anzeige-Dienstprogrammen:
Bootstrap 4 weist Anzeige utils , die verwendet werden können für
display:table
,display:table-cell
,display:inline
, etc .. Diese können mit der verwendet werden , den vertikalen Ausrichtung utils auszurichten inline, inline-Block oder Tabellenzellenelementen.Bootstrap 4 - Vertikale Mitte mit Display Utils Demo
Siehe auch: Vertical Align Center in Bootstrap 4
Bootstrap 3
Flexbox-Methode für den Container der zu zentrierenden Elemente:
Transform translateY-Methode transformieren:
Inline-Methode anzeigen:
Demo der Bootstrap 3-Zentrierungsmethoden
quelle
mx-auto
(horizontale Zentrierung), daher ist es sinnvoll,my-auto
vertikal zu zentrieren (y-Achse).Versuchen Sie dies im CSS des div:
quelle
Ich dachte, ich würde meine "Lösung" teilen, falls sie jemand anderem hilft, der mit den @ media-Abfragen selbst nicht vertraut ist.
Dank der Antwort von @ HashemQolami habe ich einige Medienabfragen erstellt, die mobil funktionieren wie die col- * -Klassen, sodass ich die col- * für mobile Geräte stapeln und für größere Bildschirme vertikal in der Mitte anzeigen kann, z
.
Kompliziertere Layouts, die eine unterschiedliche Anzahl von Spalten pro Bildschirmauflösung erfordern (z. B. 2 Zeilen für -xs, 3 für -sm und 4 für -md usw.), erfordern eine erweiterte Finagling-Funktion, jedoch für eine einfache Seite mit -xs gestapelt und -sm und größer in Reihen, funktioniert dies gut.
quelle
clear: both;
den Klassen in den Medienabfragen ein hinzufügen , damit dies funktioniert..row
Modifikator ... also sollte es so aussehenclass="row row-sm-flex-center"
. Die BS3-.row
Definition behandelt dieclear:both;
clear: both;
erneut hinzuzufügen .Nach der akzeptierten Antwort funktioniert die folgende Lösung einwandfrei, wenn Sie das Markup nicht anpassen möchten, um Bedenken auszuräumen oder einfach weil Sie ein CMS verwenden:
Die Einschränkung besteht darin, dass Sie die Schriftgröße nicht vom übergeordneten Element erben können, da die Zeile die Schriftgröße auf 0 setzt, um Leerzeichen zu entfernen.
quelle
Ich bevorzuge diese Methode gemäß David Walsh Vertical Center CSS :
Das
transform
ist nicht wesentlich; es findet nur das Zentrum etwas genauer. Internet Explorer 8 ist möglicherweise etwas weniger zentriert, aber es ist immer noch nicht schlecht - Kann ich verwenden - Transforms 2d .quelle
Das ist meine Lösung. Fügen Sie diese Klasse einfach Ihrem CSS-Inhalt hinzu.
Dann würde Ihr HTML so aussehen:
quelle
Ich habe das einfach gemacht und es macht das, was ich will.
Und jetzt sieht meine Seite so aus
quelle
Ich finde wirklich, dass der folgende Code mit Chrome und nicht mit anderen Browsern als der aktuell ausgewählten Antwort funktioniert:
Bootply Link
Möglicherweise müssen Sie die Höhen (speziell auf
.v-center
) ändern und div ondiv[class*='col-']
für Ihre Anforderungen entfernen / ändern .quelle
Ich bin auf dasselbe Problem gestoßen. In meinem Fall kannte ich die Höhe des Außenbehälters nicht, aber so habe ich es behoben:
Stellen Sie zuerst die Höhe für Ihre
html
undbody
Elemente so ein, dass sie 100% betragen. Das ist wichtig! Ohne dies erben diehtml
undbody
-Elemente einfach die Größe ihrer Kinder.Dann hatte ich eine äußere Containerklasse mit:
Und zum Schluss der innere Container mit Klasse:
HTML ist so einfach wie:
Dies ist alles, was Sie benötigen, um Inhalte vertikal auszurichten. Probieren Sie es in Geige aus:
Jsfiddle
quelle
Es werden keine Tabellen und Tabellenzellen benötigt. Es kann leicht mit Transformation erreicht werden.
Beispiel: http://codepen.io/arvind/pen/QNbwyM
Code:
quelle
Wenn Sie die Less- Version von Bootstrap verwenden und selbst in CSS kompilieren, können Sie einige Dienstprogrammklassen für Bootstrap-Klassen verwenden.
Ich habe festgestellt, dass diese hervorragend funktionieren, wenn ich die Reaktionsfähigkeit und Konfigurierbarkeit des Bootstrap-Grid-Systems (wie die Verwendung von
-md
oder) beibehalten möchte-sm
) , aber ich möchte, dass alle Spalten in einer bestimmten Zeile dieselbe vertikale Höhe haben (damit ich dies kann) Richten Sie dann ihren Inhalt vertikal aus und lassen Sie alle Spalten in der Zeile eine gemeinsame Mitte haben.CSS / Less:
HTML:
quelle
Ich habe die Antwort von zessx etwas näher erläutert , um die Verwendung beim Mischen verschiedener Spaltengrößen auf verschiedenen Bildschirmgrößen zu vereinfachen.
Wenn Sie Sass verwenden , können Sie dies zu Ihrer scss-Datei hinzufügen:
Dadurch wird das folgende CSS generiert (das Sie direkt in Ihren Stylesheets verwenden können, wenn Sie Sass nicht verwenden):
Jetzt können Sie es für Ihre Antwortspalten wie folgt verwenden:
quelle
Flex-Verhaltensweisen werden seit Bootstrap 4 nativ unterstützt. Fügen Sie
d-flex align-items-center
dasrow
div hinzu. Sie müssen Ihren CSS-Inhalt nicht mehr ändern.Einfaches Beispiel: http://jsfiddle.net/vgks6L74/
Mit Ihrem Beispiel: http://jsfiddle.net/7zwtL702/
Quelle: Flex · Bootstrap
quelle
OK, aus Versehen habe ich ein paar Lösungen gemischt und es funktioniert jetzt endlich für mein Layout, in dem ich versucht habe, eine 3x3-Tabelle mit Bootstrap-Spalten mit der kleinsten Auflösung zu erstellen.
quelle
quelle
Versuche dies,
quelle
Es gibt verschiedene Möglichkeiten, dies zu tun:
Verwenden
und das CSS des Containers zu
Verwenden Sie das Auffüllen zusammen mit dem Medienbildschirm, um das Auffüllen relativ zur Bildschirmgröße zu ändern. Google @ media-Bildschirm, um mehr zu erfahren.
Verwenden Sie relative Polsterung
Dh, geben Sie die Auffüllung in% an
quelle
Mit Bootstrap 4 (derzeit in Alpha) können Sie die
.align-items-center
Klasse verwenden. So können Sie den reaktionsschnellen Charakter von Bootstrap beibehalten. Funktioniert sofort gut für mich. Siehe Bootstrap 4-Dokumentation .quelle
HTML
CSS
quelle
Ich bin auf dieselbe Situation gestoßen, in der ich einige div-Elemente vertikal hintereinander ausrichten wollte, und habe festgestellt, dass die Bootstrap-Klassen col-xx-xx den Stil als float: left auf das div anwenden.
Ich musste den Stil auf die div-Elemente wie style = "Float: none" anwenden und alle meine div-Elemente begannen vertikal ausgerichtet. Hier ist das Arbeitsbeispiel:
JsFiddle Link
Nur für den Fall, dass jemand mehr über die Eigenschaft float lesen möchte:
W3Schools - Float
quelle