Używam Bootstrap. Jak mogę zrobić trzy kolumny tej samej wysokości?
Oto zrzut ekranu przedstawiający problem. Chciałbym, aby niebieska i czerwona kolumna miały taką samą wysokość jak kolumna żółta.
Oto kod:
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container-fluid">
<div class="row">
<div class="col-xs-4 panel" style="background-color: red">
some content
</div>
<div class="col-xs-4 panel" style="background-color: yellow">
catz
<img width="100" height="100" src="https://lorempixel.com/100/100/cats/">
</div>
<div class="col-xs-4 panel" style="background-color: blue">
some more content
</div>
</div>
</div>
css
twitter-bootstrap
Richard
źródło
źródło
.row
brakujeflex-wrap: wrap;
. Oto przykład jego działania z responsywnością: codepen.io/bootstrapped/details/RrabNeOdpowiedzi:
Rozwiązanie 4 za pomocą Bootstrap 4
Bootstrap 4 korzysta z Flexbox, więc nie ma potrzeby stosowania dodatkowego CSS.
Próbny
Rozwiązanie 1 używa ujemnych marginesów (nie psuje odpowiedzi)
Próbny
Rozwiązanie 2 za pomocą tabeli
Próbny
Dodano rozwiązanie 3 korzystające z fleksji z sierpnia 2015 r. Komentarze opublikowane wcześniej nie dotyczą tego rozwiązania.
Próbny
źródło
flex-wrap: wrap;
do trzeciego przykładu, aby umożliwić responsywność. Będziesz także chciał dodać display: flex; kierunek zgięcia: kolumna; do klasy kolumny. Jeśli zamierzasz używać .row, a nie klasy niestandardowej, musisz zapewnić rezerwę dla starszych przeglądarek, zmieniając flex wyświetlania z powrotem. Oto przykładAktualizacja 2020
Najlepsze podejście do Bootstap 3.x - korzystanie z flexbox CSS (i wymaga minimalnego CSS) ..
Przykład paska Flexbox o tej samej wysokości
Aby zastosować Flexbox o tej samej wysokości tylko w określonych punktach przerwania (responsywnych), użyj zapytania o media. Na przykład tutaj jest
sm
(768px) i więcej:To rozwiązanie działa również dobrze dla wielu wierszy (zawijanie kolumn):
https://www.bootply.com/gCEXzPMehZ
Inne obejścia
Te opcje będą polecane przez innych, ale nie są dobrym pomysłem na responsywne projektowanie. Działa to tylko w przypadku prostych układów pojedynczych wierszy bez zawijania kolumn.
1) Korzystanie z ogromnych marginesów ujemnych i wypełnienia
2) Korzystanie z display: komórka tabeli (to rozwiązanie wpływa również na responsywną siatkę, więc kwerendy @media można użyć do zastosowania
table
wyświetlania na szerszych ekranach, zanim kolumny ułożą się pionowo)Bootstrap 4
Flexbox jest teraz domyślnie używany w Bootstrap 4, więc nie ma potrzeby, aby dodatkowy CSS tworzył kolumny o równej wysokości: http://www.codeply.com/go/IJYRI4LPwU
Przykład:
źródło
Nie wymaga JavaScript. Po prostu dodaj klasę
.row-eq-height
do swojej istniejącej.row
tak:Wskazówka: jeśli masz więcej niż 12 kolumn w wierszu, siatka ładowania początkowego nie zawinie go. Dodaj więc
div.row.row-eq-height
co 12 kolumn.Wskazówka: może być konieczne dodanie
do twojego html
źródło
Aby odpowiedzieć na twoje pytanie, wystarczy zobaczyć pełną responsywną wersję demonstracyjną z prefiksem css :
Aby dodać obsługę flex zawartości miniaturek w kolumnach flex, takich jak powyższy zrzut ekranu, dodaj również ... Uwaga: możesz to zrobić również z panelami:
Podczas gdy Flexbox nie działa w IE9 i niższych wersjach demonstracyjnych, możesz używać wersji demonstracyjnej z rezerwą przy użyciu tagów warunkowych z czymś takim jak siatki javascript jako polifill:
Jeśli chodzi o dwa pozostałe przykłady w zaakceptowanej odpowiedzi ... Demo tabeli jest dobrym pomysłem, ale jest źle wdrażane. Zastosowanie tego CSS w klasach kolumn ładowania początkowego bez wątpienia całkowicie zepsuje strukturę siatki. Powinieneś używać niestandardowego selektora dla jednego i dwóch stylów tabel, które nie powinny być stosowane do tych,
[class*='col-']
które mają zdefiniowane szerokości. Tej metody należy używać TYLKO, jeśli chcesz kolumny o równej wysokości ORAZ równej szerokości. Nie jest przeznaczony do żadnych innych układów i NIE reaguje. Możemy to jednak cofnąć na wyświetlaczach mobilnych ...Wreszcie, pierwsze demo w zaakceptowanej odpowiedzi, które implementuje wersję jednego prawdziwego układu, jest dobrym wyborem w niektórych sytuacjach, ale nie nadaje się do kolumn bootstrap. Powodem tego jest to, że wszystkie kolumny rozszerzają się do wysokości kontenera. Spowoduje to również uszkodzenie odpowiedzi, ponieważ kolumny nie rozwijają się do elementów obok nich, ale całego kontenera. Ta metoda nie pozwoli również na stosowanie dolnych marginesów w wierszach i spowoduje inne problemy po drodze, takie jak przewijanie do tagów zakotwiczenia.
Pełny kod znajduje się w Codepen, który automatycznie poprzedza kod Flexbox.
źródło
row:after, row:before
dotyczył zestawu tabel display:, którego najwyraźniej Safari nie lubi.Wyświetlany jest tylko jeden wiersz, więc przypadek użycia może być ograniczony tylko do tego. W przypadku, gdy masz wiele wierszy, ta wtyczka - github JavaScript-grids - działa idealnie! Powoduje to, że każdy panel rozszerza się do najwyższego panelu, nadając każdemu rzędowi potencjalnie inną wysokość w zależności od najwyższego panelu w tym rzędzie. Jest to rozwiązanie jquery kontra css, ale chciałem go polecić jako alternatywne podejście.
źródło
Jeśli chcesz, aby działało to w dowolnej przeglądarce, użyj javascript:
źródło
.ready()
nie jest odpowiedni moment, aby go nazwać - należy go wezwać.load()
window.onload = function() {...function content above...}
zamiast tego. To działa lepiej.Próbowałem wiele sugestii zawartych w tym wątku i na innych stronach, ale żadne rozwiązanie nie działało w 100% w każdej przeglądarce.
Więc eksperymentowałem dość długo i wymyśliłem to. Kompletne rozwiązanie dla kolumn Bootstrap o równej wysokości za pomocą Flexbox z tylko 1 klasą. Działa to we wszystkich głównych przeglądarkach IE10 +.
CSS:
HTML:
Aby wesprzeć jeszcze więcej wersji IE, możesz na przykład użyć https://github.com/liabru/jquery-match-height i skierować wszystkie kolumny potomne
.equal-cols
. Lubię to:Bez tego wypełniania kolumny będą zachowywać się jak zwykle kolumny Bootstrap, więc jest to dość dobry powrót.
źródło
Możesz także użyć funkcji inline-flex, która działa całkiem dobrze i może być nieco czystsza niż modyfikowanie każdego elementu wiersza za pomocą CSS.
W moim projekcie chciałem, aby każdy wiersz, którego elementy potomne miały granice, miał taką samą wysokość, aby granice wyglądały na poszarpane. W tym celu stworzyłem prostą klasę css.
źródło
Od:
http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css
źródło
bezczelne rozwiązanie jquery, jeśli ktoś jest zainteresowany. Tylko upewnij się, że wszystkie twoje cols (el) mają wspólną nazwę klasy ... działa również responsywnie, jeśli powiążesz ją z $ (window) .resize
Stosowanie
Uwaga: Ten post został zredagowany zgodnie z komentarzem @Chris, że w kodzie ustawiono tylko ostatnią najwyższą wysokość w
$.each()
funkcjiźródło
Niektóre z poprzednich odpowiedzi wyjaśniają, jak ustawić divy na tej samej wysokości, ale problem polega na tym, że gdy szerokość jest zbyt wąska, divy nie układają się w stos, dlatego możesz zastosować ich odpowiedzi za pomocą jednej dodatkowej części. Dla każdego z nich możesz użyć podanej tutaj nazwy CSS oprócz klasy wiersza, której używasz, więc div powinien wyglądać tak, jeśli zawsze chcesz, aby div znajdowały się obok siebie:
Dla wszystkich ekranów:
Gdy chcesz użyć sm:
Gdy chcesz md:
Gdy chcesz użyć lg:
EDYCJA Na podstawie komentarza istnieje rzeczywiście prostsze rozwiązanie, ale musisz podać informacje o kolumnie od największej pożądanej szerokości dla wszystkich rozmiarów do xs (np .
<div class="col-md-3 col-sm-4 col-xs-12">
:źródło
flex-wrap: wrap;
wtedy nie potrzebujesz wszystkich osobnych ... chyba że ich konkretnie chcesz.Dziwi mnie, że pod koniec 2018 roku nie mogłem znaleźć wartościowego rozwiązania. Sama wymyśliłem rozwiązanie Bootstrap 3 za pomocą Flexboksa.
Czysty i prosty przykład:
HTML
CSS
Zobacz działające demo: http://jsfiddle.net/5kmtfrny/
źródło
Wiem, że się spóźniam, ale teraz możesz użyć atrybutu stylu „minimalna wysokość”, aby osiągnąć swój cel.
źródło
Jeśli ktoś używa bootstrap 4 i szuka kolumn o równej wysokości, wystarczy użyć
row-eq-height
div divPatrz: http://getbootstrap.com.vn/examples/equal-height-columns/
źródło
oto moje rozwiązanie (skompilowany CSS):
Twój kod wyglądałby następująco:
Zasadniczo jest to ten sam system, którego używasz z
.col-*
klasami, z tą różnicą, że musisz zastosować.row-*
klasy do samego wiersza.Z
.row-sm-eq
kolumnami zostaną ułożone na ekranach XS. Jeśli nie potrzebujesz ich ustawiać na dowolnych ekranach, których możesz użyć.row-xs-eq
.Używana przez nas wersja SASS:
Demo na żywo
Uwaga: mieszanie
.col-xs-12
i.col-xs-6
wewnątrz jednego wiersza nie działałoby poprawnie.źródło
border-spacing
marginesami ujemnymi i ujemnymi.Wystąpił problem z użyciem rozwiązania 1 podczas nakładania go tylko na kolumnę w wierszach. Chciałbym ulepszyć rozwiązanie 1.
(Przepraszamy, nie mogę komentować odpowiedzi Popnoodles. Nie mam wystarczającej reputacji)
źródło
Najlepiej tam:
Odruch Github - Dokumenty
Działa z bootstrap
Aktualizacja:
źródło
Oto moja metoda, użyłem Flex z pewnymi zmianami w zapytaniu o media.
następnie dodano wymagane klasy do rodzica.
Używam responsywnych punktów przerwania, ponieważ flux zwykle utrudnia standardową responsywną naturę bootstrap.
źródło
Używam tego bardzo łatwego rozwiązania
clearfix
, które nie ma żadnych skutków ubocznych.Oto przykład na AngularJS:
I jeszcze jeden przykład na PHP:
źródło
Dla tych, którzy szukają szybkiego i łatwego rozwiązania - jeśli masz stosunkowo spójny zestaw zawartości bloku, ustawienie minimalnej wysokości div, która jest nieco większa niż największy blok, może być łatwiejsze do wdrożenia.
źródło
gdzie .container-height to klasa stylu, którą należy dodać do elementu w stylu .row, do którego wszystkie jego dzieci .col * mają tę samą wysokość.
Zastosowanie tych stylów tylko do określonego pliku .row (z .container-height, jak w przykładzie) pozwala również uniknąć zastosowania marginesu i przepełnienia wypełnienia do wszystkich plików .col *.
źródło
Szukałem rozwiązania tego samego problemu i znalazłem, że po prostu działa !! - prawie bez dodatkowego kodu ..
zobacz https://medium.com/wdstack/bootstrap-equal-height-columns-d07bc934eb27, aby uzyskać dobre porozumienie, a także odpowiedź na dole, z linkiem.
https://www.codeply.com/go/EskIjvun4B
był to dla mnie właściwy, responsywny sposób ... cytat: ... 3 - Użyj Flexboksa (najlepiej!)
Od 2017 roku najlepszym (i najłatwiejszym) sposobem na stworzenie kolumn o równej wysokości w responsywnym projekcie jest użycie Flexbox CSS3.
i po prostu użyj:
źródło
Przykład:
https://jsfiddle.net/b9chris/njcnex83/embedded/result/
Na podstawie kilku odpowiedzi tutaj. Odpowiedzi na Flexboksa są właściwe, gdy IE8 i 9 nie żyją, a gdy Android 2.x nie żyje, ale nie jest to prawdą w 2015 r. I prawdopodobnie nie będzie w 2016 r. IE8 i 9 nadal tworzą 4- 6% zużycia w zależności od sposobu pomiaru, a dla wielu użytkowników korporacyjnych jest znacznie gorzej. http://caniuse.com/#feat=flexbox
display: table
,display: table-cell
Sztuką jest bardziej kompatybilny wstecz - i jedną wielką rzeczą jest jedynym poważnym problemem jest kwestia kompatybilności Safari, gdzie siłybox-sizing: border-box
, coś już stosowany do tagów Bootstrap. http://caniuse.com/#feat=css-tableMożesz oczywiście dodać więcej klas, które robią podobne rzeczy, na przykład
.equal-height-md
. Przywiązałem je do div, aby uzyskać niewielką korzyść z wydajności w moim ograniczonym użyciu, ale możesz usunąć tag, aby uczynić go bardziej uogólnionym, podobnie jak reszta Bootstrap.Zauważ, że jsfiddle tutaj używa CSS, a więc rzeczy, które inaczej zapewniłby Less, są zakodowane na stałe w połączonym przykładzie. Na przykład @ screen-sm-min został zastąpiony tym, co wstawiłby Less - 768px.
źródło
Jeśli ma to sens w twoim kontekście, możesz po prostu dodać pusty 12-kolumnowy div po każdej przerwie, co działa jak dzielnik, który obejmuje dolną część najwyższej komórki w rzędzie.
Mam nadzieję że to pomoże!
źródło
Pomyślałem tylko, że odpowiedź udzielona przez Dr.Flink może być również zastosowana do
form-horizontal
bloku Bootstrap 3 - co może być bardzo przydatne, jeśli chcesz użyć kolorów tła dla każdej komórki. Aby działało to w przypadku formularzy ładowania początkowego, należy owinąć zawartość formularza, która służy tylko do replikacji struktury podobnej do tabeli.Poniższy przykład przedstawia również CSS, który pokazuje dodatkowe zapytanie o media, które pozwala Bootstrapowi 3 po prostu przejąć i zrobić to normalnie na mniejszych ekranach. Działa to również w IE8 +.
Przykład:
źródło
Spróbuj to zrobić za pośrednictwem Flex-Box
Live JSFiddle - https://jsfiddle.net/grinmax_/spsn4fnq/
źródło
Tak, tak, Bootstrap 4 sprawia, że wszystkie kolumny w rzędzie mają taką samą wysokość, jednak jeśli tworzysz ramkę wokół zawartości wewnątrz wiersza, może się okazać, że wygląda na to, że cols nie są równe wysokości!
Kiedy zastosowałem
height: 100%
do elementu wewnątrz kolumny, stwierdziłem, że straciłem margines.Moim rozwiązaniem jest użycie paddingu na div cola (zamiast marginesu na elemencie wewnętrznym). Tak jak:
Powyższy przykład kodu wykorzystuje Bootstrap 4.1 do utworzenia zestawu dziewięciu ramek z ramką
źródło
HTML
CSS
JS
źródło
19.03.2019
** Rozwiązanie Bootstrap 4 o jednakowej wysokości **
Bootstrap Utilities / flex dla równej wysokości
Przykład na żywo w Codepen
Równa wysokość według klasy bootstrap z ustalonym div macierzystym
height
lubmin-height
Pokaż fragment kodu
źródło
Możesz zawinąć kolumny w div
źródło