Używam Twitter Bootstrap 3 i mam problemy, gdy chcę wyrównać dwa w pionie div
, na przykład - link JSFiddle :
<!-- 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>
System siatki w Bootstrap używa , więc float: left
nie display:inline-block
, więc właściwość vertical-align
nie działa. Próbowałem margin-top
go naprawić, ale myślę, że nie jest to dobre rozwiązanie dla responsywnego projektu.
div
, bez tekstu w środku, coś takiego jak ten jsfiddle.net/corinem/Aj9H9, ale w tym przykładzie nie używam bootstrapOdpowiedzi:
Nadal możesz użyć niestandardowej klasy, gdy jej potrzebujesz:
Bootply
Używanie
inline-block
dodaje dodatkową przestrzeń między blokami, jeśli pozwalasz na spację w swoim kodzie (jak...</div> </div>...
). Ta dodatkowa przestrzeń łamie naszą siatkę, jeśli rozmiary kolumn sumują się do 12:Tutaj mamy dodatkowe spacje między
<div class="[...] col-lg-2">
i<div class="[...] col-lg-10">
(powrót karetki i 2 tabulatory / 8 spacji). A więc...Wykopmy tę dodatkową przestrzeń !!
Zauważ pozornie bezużyteczne komentarze
<!-- ... -->
? Są ważne - bez nich spacja między<div>
elementami zajmie miejsce w układzie, niszcząc system siatki.Uwaga: Bootply został zaktualizowany
źródło
col-lg-2
icol-lg-10
). Co ciekawe, jeśli dodasz następujący kod JS (przy założeniu jQuery), uda się to naprawić:$('.row').html($('.vcenter'));
inline-block
dodatkową przestrzenią . W mojej edycji podaję rozwiązanie.Elastyczny układ pudełka
Wraz z pojawieniem się CSS Flexible Box wiele koszmarów 1 projektantów stron internetowych zostało rozwiązanych. Jeden z najbardziej hackujących, wyrównanie pionowe. Teraz jest to możliwe nawet na nieznanych wysokościach .
Flexible Box (lub w skrócie Flexbox) to nowy system układu zaprojektowany specjalnie do celów układu. Te stany specyfikacja :
Jak może pomóc w tym przypadku? Więc, zobaczmy.
Pionowe kolumny wyrównane
Korzystając z Bootstrap na Twitterze mamy
.row
trochę.col-*
s. Wszystko, co musimy zrobić, to wyświetlić żądane.row
2 jako elastyczne pudełko kontenera , a następnie wyrównać wszystkie jego elementy elastyczne (kolumny) pionowo wedługalign-items
właściwości.PRZYKŁAD TUTAJ (Przeczytaj uważnie komentarze)
Wyjście
Kolorowy obszar wyświetla pole wypełnienia kolumn.
Wyjaśnianie w sprawie
align-items: center
Big Alert
Ważna uwaga # 1: Twitter Bootstrap nie określa
width
kolumn w bardzo małych urządzeniach, chyba że podasz jedną z.col-xs-#
klas kolumnom.Dlatego w tym konkretnym pokazie użyłem
.col-xs-*
klas, aby kolumny były poprawnie wyświetlane w trybie mobilnym, ponieważwidth
wyraźnie określa kolumnę.Ale alternatywnie możesz wyłączyć układ Flexbox, po prostu zmieniając
display: flex;
nadisplay: block;
określone rozmiary ekranu. Na przykład:Lub możesz określić
.vertical-align
tylko na określonych rozmiarach ekranu, takich jak:W tym przypadku pójdę z @KevinNelson „s podejście .
Ważna uwaga # 2: Prefiksy dostawcy pominięto ze względu na zwięzłość. Składnia Flexbox została zmieniona w tym czasie. Nowa pisemna składnia nie będzie działać na starszych wersjach przeglądarek internetowych (ale nie tak starych jak Internet Explorer 9! Flexbox jest obsługiwany w Internet Explorerze 10 i nowszych).
Oznacza to, że
display: -webkit-box
w trybie produkcyjnym należy również używać właściwości z prefiksem dostawcy, takich jak itd.Jeśli klikniesz „Przełącz widok kompilowany” w Demo , zobaczysz prefiksowaną wersję deklaracji CSS (dzięki Autoprefixer ).
Kolumny o pełnej wysokości z wyrównaną w pionie treścią
Jak widać w poprzedniej wersji demonstracyjnej , kolumny (elementy Flex) nie są już tak wysokie jak ich kontener (pole Flex Container, tzn.
.row
Element).Wynika to z używania
center
wartościalign-items
właściwości. Wartość domyślna jeststretch
taka, że elementy mogą wypełnić całą wysokość elementu nadrzędnego.Aby to naprawić, możesz również dodać
display: flex;
do kolumn:PRZYKŁAD TUTAJ (ponownie, pamiętaj o komentarzach)
Wyjście
Kolorowy obszar wyświetla pole wypełnienia kolumn.
Na koniec zauważ, że prezentacje i fragmenty kodu mają na celu dać ci inny pomysł i zapewnić nowoczesne podejście do osiągnięcia celu. Jeśli zamierzasz stosować to podejście w witrynach i aplikacjach z prawdziwego świata, pamiętaj o sekcji „ Big Alert ”.
Przydałoby się to do dalszej lektury, w tym do obsługi przeglądarki, te zasoby:
1. Wyrównaj obraz w pionie w pionie z responsywną wysokością. 2. Lepiej jest użyć dodatkowej klasy, aby nie zmieniać domyślnych ustawień Bootstrap na Twitterze
.row
.źródło
col-*
, twoje skrzypce / codepens nie korzystają z bootstrap, więc wprowadzają w błąd. Twoje przykłady nie działają z bootstrap; jego system grid nie jest opartyflex
, dlatego nie są kompatybilne. Wystarczy wypróbować dowolny z przykładów na stronie zasilanej bootstrapem, a zdasz sobie sprawę, że nie działają.Poniższy kod działał dla mnie:
źródło
Aktualizacja 2020
Wiem, że pierwotne pytanie dotyczyło Bootstrap 3, ale teraz, gdy Bootstrap 4 został wydany, oto kilka zaktualizowanych wskazówek dotyczących pionowego środka.
Ważny! Środek pionowy odnosi się do wysokości rodzica
Bootstrap 4
Teraz, gdy Bootstrap 4 jest domyślnie Flexbox, istnieje wiele różnych podejść do wyrównania w pionie za pomocą: auto-marginesów , narzędzi flexbox lub narzędzi do wyświetlania wraz z narzędziami do wyrównywania w pionie . Na początku „narzędzia do wyrównywania w pionie” wydają się oczywiste, ale działają one tylko z elementami wyświetlania w wierszu i tabeli. Oto niektóre opcje centrowania pionowego Bootstrap 4.
1 - Środek pionowy przy użyciu automatycznych marginesów:
Innym sposobem na wyśrodkowanie w pionie jest użycie
my-auto
. Spowoduje to wyśrodkowanie elementu w jego kontenerze. Na przykład ustawiah-100
wiersz na pełną wysokość imy-auto
wyśrodkujecol-sm-12
kolumnę pionowo .Bootstrap 4 - Pionowe centrum z wykorzystaniem automatycznego marginesu Demo
my-auto
reprezentuje marginesy na pionowej osi y i jest równoważny:2 - Centrum pionowe z Flexbox:
Ponieważ Bootstrap 4
.row
jest terazdisplay:flex
, możesz po prostu użyćalign-self-center
dowolnej kolumny, aby wyśrodkować ją pionowo ...lub użyj
align-items-center
całości,.row
aby wyśrodkować w pionie wszystkiecol-*
w rzędzie ...Bootstrap 4 - Pionowe kolumny o różnych wysokościach w środku Demo
3 - Środek pionowy za pomocą wyświetlaczy:
Bootstrap 4 ma narzędzi z ekranu , który może być używany do
display:table
,display:table-cell
,display:inline
, etc .. Mogą one być stosowane z pionowych utils wyrównanie , aby wyrównać inline inline bloku lub elementy komórka tabeli.Bootstrap 4 - Środek pionowy za pomocą narzędzi wyświetlających Demo
Zobacz także: Vertical Align Center w Bootstrap 4
Bootstrap 3
Metoda Flexbox na kontenerze przedmiotu (ów), aby wyśrodkować:
Przekształć metodę translateY:
Wyświetl metodę wbudowaną:
Demonstracja metod centrowania Bootstrap 3
źródło
mx-auto
(centrowanie poziome), dlatego sensowne jest centrowanie wmy-auto
pionie (oś y).Wypróbuj to w CSS div:
źródło
Pomyślałem, że podzielę się moim „rozwiązaniem” na wypadek, gdyby pomógł każdemu, kto nie jest zaznajomiony z samym zapytaniem @media.
Dzięki odpowiedzi @ HashemQolami zbudowałem kilka zapytań o media, które działałyby mobilnie jak klasy col- *, tak że mogłem układać col- * dla urządzeń mobilnych, ale wyświetlać je pionowo w środku dla większych ekranów, np.
.
Bardziej skomplikowane układy, które wymagają innej liczby kolumn na rozdzielczość ekranu (np. 2 rzędy dla -xs, 3 dla -sm i 4 dla -md itp.) Wymagałyby bardziej zaawansowanego finaglingu, ale dla prostej strony z -xs ułożone i -sm i większe w rzędach, to działa dobrze.
źródło
clear: both;
do klas wewnątrz zapytań o media, aby to zadziałało..row
modyfikatora ... więc powinno to wyglądaćclass="row row-sm-flex-center"
..row
Definicja BS3 obsługujeclear:both;
clear: both;
ponownie.Po zaakceptowaniu odpowiedzi, jeśli nie chcesz dostosowywać znaczników, w celu rozdzielenia problemów lub po prostu dlatego, że korzystasz z CMS, następujące rozwiązanie działa dobrze:
Ograniczeniem jest tutaj to, że nie można dziedziczyć rozmiaru czcionki z elementu nadrzędnego, ponieważ wiersz ustawia rozmiar czcionki na 0 w celu usunięcia białych znaków.
źródło
Wolę tę metodę zgodnie z Davidem Walsh Vertical Center CSS :
To
transform
nie jest konieczne; po prostu znajduje centrum nieco dokładniej. W rezultacie Internet Explorer 8 może być nieco mniej wyśrodkowany, ale nadal nie jest zły - czy mogę go użyć - przekształca 2d .źródło
To jest moje rozwiązanie. Po prostu dodaj tę klasę do treści CSS.
Wtedy twój HTML wyglądałby tak:
źródło
Właśnie to zrobiłem i robi to, co chcę.
A teraz wygląda moja strona
źródło
Naprawdę uważam, że następujący kod działa w przeglądarce Chrome i nie w innych przeglądarkach niż aktualnie wybrana odpowiedź:
Bootply Link
Konieczne może być dostosowanie wysokości (szczególnie włączenie
.v-center
) i usunięcie / zmiana divdiv[class*='col-']
dla własnych potrzeb.źródło
Natrafiłem na ten sam problem. W moim przypadku nie znałem wysokości zewnętrznego pojemnika, ale tak to naprawiłem:
Najpierw ustaw wysokość dla siebie
html
ibody
elementów, aby były w 100%. To jest ważne! Bez tego,html
abody
elementy po prostu odziedziczyć wysokość swoich dzieci.Potem miałem klasę kontenerów zewnętrznych z:
I wreszcie pojemnik wewnętrzny z klasą:
HTML jest tak prosty jak:
To wszystko, czego potrzebujesz, aby wyrównać zawartość w pionie. Sprawdź to w skrzypcach:
Jsfiddle
źródło
Tabela i komórki nie są potrzebne. Można to łatwo osiągnąć za pomocą transformacji.
Przykład: http://codepen.io/arvind/pen/QNbwyM
Kod:
źródło
Jeśli korzystasz z Less wersji Bootstrap i sam kompilujesz się w CSS, możesz użyć niektórych klas narzędzi do użycia z klasami Bootstrap.
Uważam, że działają one fantastycznie dobrze tam, gdzie chcę zachować szybkość reakcji i konfigurowalność systemu siatki Bootstrap (np. Przy użyciu
-md
lub-sm
), ale chcę, aby wszystkie kolumny w danym rzędzie miały tę samą wysokość pionową (dzięki czemu mogę następnie wyrównaj ich zawartość w pionie, aby wszystkie kolumny w wierszu miały wspólny środek).CSS / Mniej:
HTML:
źródło
Trochę rozwinąłem odpowiedź Zessx , aby ułatwić jej użycie podczas mieszania różnych rozmiarów kolumn na różnych rozmiarach ekranu.
Jeśli używasz Sassa , możesz dodać to do pliku scss:
Który generuje następujący CSS (którego możesz użyć bezpośrednio w arkuszach stylów, jeśli nie używasz Sass):
Teraz możesz go używać w swoich elastycznych kolumnach w następujący sposób:
źródło
Zachowania Flex są natywnie obsługiwane od Bootstrap 4. Dodać
d-flex align-items-center
wrow
div. Nie musisz już modyfikować treści CSS.Prosty przykład: http://jsfiddle.net/vgks6L74/
Na przykład: http://jsfiddle.net/7zwtL702/
Źródło: Flex · Bootstrap
źródło
OK, przypadkowo wymieszałem kilka rozwiązań i wreszcie działa teraz dla mojego układu, w którym próbowałem stworzyć tabelę 3x3 z kolumnami Bootstrap w najmniejszej rozdzielczości.
źródło
źródło
Spróbuj tego,
źródło
Można to zrobić na kilka sposobów:
Posługiwać się
oraz CSS kontenera do
Użyj wypełnienia wraz z ekranem multimediów, aby zmienić wypełnienie w stosunku do rozmiaru ekranu. Google @media screen, aby dowiedzieć się więcej.
Użyj względnego wypełnienia
Tj. Określ wypełnienie w%
źródło
Z Bootstrap 4 (który jest obecnie w wersji alfa) możesz używać tej
.align-items-center
klasy. Możesz więc zachować responsywny charakter Bootstrap. Działa od razu dobrze dla mnie. Zobacz dokumentację Bootstrap 4 .źródło
HTML
CSS
źródło
Natrafiłem na tę samą sytuację, w której chciałem wyrównać kilka elementów div pionowo w rzędzie i stwierdziłem, że klasy Bootstrap col-xx-xx stosują styl do div jako float: left.
Musiałem zastosować styl do elementów div, takich jak style = "Float: none", a wszystkie moje elementy div zaczęły być wyrównane w pionie. Oto działający przykład:
JsFiddle Link
Na wypadek, gdyby ktoś chciał przeczytać więcej na temat właściwości float:
W3Schools - Float
źródło