Mam witrynę o następującej strukturze:
<div id="header"></div>
<div id="main">
<div id="navigation"></div>
<div id="content"></div>
</div>
<div id="footer"></div>
Nawigacja znajduje się po lewej stronie, a div treści po prawej. Informacje dla div treści są pobierane przez PHP, więc za każdym razem są inne.
Jak przeskalować nawigację w pionie, aby jej wysokość była taka sama jak wysokość div zawartości, bez względu na to, która strona jest załadowana?
display: flex; align-items: stretch;
dla div # main. I nie używajheight: 100%
do treści div #Odpowiedzi:
UWAGA : Ta odpowiedź dotyczy starszych przeglądarek bez obsługi standardu Flexbox. Aby uzyskać nowoczesne podejście, zobacz: https://stackoverflow.com/a/23300532/1155721
Sugeruję przyjrzeć się kolumnom o jednakowej wysokości z CSS między przeglądarkami i bez hacków .
Zasadniczo robienie tego za pomocą CSS w sposób zgodny z przeglądarką nie jest trywialne (ale trywialne z tabelami), więc znajdź sobie odpowiednie wstępnie zapakowane rozwiązanie.
Odpowiedź zależy również od tego, czy chcesz 100% wysokości, czy równej wysokości. Zwykle jest równa wysokość. Jeśli ma 100% wysokości, odpowiedź jest nieco inna.
źródło
border:1px solid blue
np .container2
: niebieska ramka znajduje się na pierwszych dwóch kolumnach, a nie w drugiej kolumnie tylko tak, jak można się spodziewać.display:table
Dla rodzica:
Powinieneś dodać kilka prefiksów, http://css-tricks.com/using-flexbox/ .
Edycja: Jak zauważył @Adam Garner, wyrównaj elementy: rozciągnij; nie jest potrzebne. Jego użycie jest również dla rodziców, a nie dzieci. Jeśli chcesz zdefiniować rozciąganie dzieci, użyj align-self.
źródło
align-items: center
, potrzebny jest element, który musisz rozciągnąćalign-self: normal
To frustrujący problem, z którym cały czas zajmują się projektanci. Sztuka polega na tym, że musisz ustawić wysokość na 100% na BODY i HTML w swoim CSS.
Ten pozornie bezcelowy kod ma zdefiniować w przeglądarce, co oznacza 100%. Frustrujące, tak, ale to najprostszy sposób.
źródło
html { height: 100%; } body { height: 98%; }
.Uważam, że ustawienie dwóch kolumn na
display: table-cell;
zamiastfloat: left;
działa dobrze.źródło
Jeśli nie przeszkadza to, że div nawigacji zostanie przycięty w przypadku nieoczekiwanie krótkiego div treści, istnieje co najmniej jeden prosty sposób:
W przeciwnym razie istnieje technika sztucznych kolumn .
źródło
źródło
przy użyciu jQuery:
źródło
Math.max()
byłby tu twój przyjaciel.css
funkcji JQuery , nie można rozróżniać ekranu i nośników wydruku, jak zwykle w przypadku korzystania z czystych rozwiązań CSS. Dlatego możesz mieć problemy z drukowaniem.Spróbuj ustawić dolny margines na 100%.
źródło
Spójrz na ten przykład .
źródło
height: 100%
ale okazało się, że nie było to potrzebne.height : <percent>
będzie działać tylko wtedy, gdy wszystkie najwyższe węzły mają wszystkie węzły nadrzędne o określonej wysokości i stałej wysokości w pikselach, ems itp. W ten sposób wysokość spadnie kaskadowo do twojego elementu.Możesz określić 100% do HTML i elementów treści, jak podano wcześniej @Travis, aby wysokość strony spadała kaskadowo do twoich węzłów.
źródło
Po długich poszukiwaniach i próbach nic nie rozwiązało mojego problemu
na div dzieci
i dla rodziców zastosuj to
również używam bootstrap i to nie uszkodziło responsywnego dla mnie.
źródło
flex-direction: column;
aby to działało dla mnie.Na podstawie metody opisanej w tym artykule stworzyłem .Mniejsze rozwiązanie dynamiczne:
HTML:
Mniej:
źródło
Dodaj
display: grid
do rodzicaźródło
Wiem, że minęło dużo czasu, odkąd pytanie zostało zadane, ale znalazłem łatwe rozwiązanie i pomyślałem, że ktoś może go użyć (przepraszam za słaby angielski). Oto jest:
CSS
HTML
Prosty przykład. Pamiętaj, że możesz zmienić się w responsywność.
źródło
Moje rozwiązanie:
źródło
Jest trochę sprzeczności w tytule pytania i treści. Tytuł mówi o rodzicielskiej div, ale pytanie brzmi, jakbyś chciał, aby dwie divy rodzeństwa (nawigacja i treść) były tej samej wysokości.
Czy (a) chcesz, aby nawigacja i treść były w 100% wysokości głównej, czy (b) chcesz, aby nawigacja i treść były tej samej wysokości?
Zakładam (b) ... jeśli tak jest, nie sądzę, że będziesz w stanie to zrobić, biorąc pod uwagę obecną strukturę strony (przynajmniej bez czystego CSS i bez skryptów). Prawdopodobnie będziesz musiał zrobić coś takiego:
i ustaw div treści tak, aby miał lewy margines niezależnie od szerokości panelu nawigacji. W ten sposób zawartość zawartości znajduje się po prawej stronie nawigacji i możesz ustawić div nawigacji na 100% wysokości zawartości.
EDYCJA: Robię to całkowicie w mojej głowie, ale prawdopodobnie musiałbyś również ustawić lewy margines div nawigacji na wartość ujemną lub ustawić absolutną lewą na 0, aby przesunąć go z powrotem w lewo. Problem w tym, że istnieje wiele sposobów, aby to zrobić, ale nie wszystkie będą kompatybilne ze wszystkimi przeglądarkami.
źródło
[Nawiązując do kodu Dmity's Less w innej odpowiedzi] Zgaduję, że jest to jakiś „pseudo-kod”?
Z tego, co rozumiem, spróbuj użyć techniki faux-kolumny, która powinna załatwić sprawę.
http://www.alistapart.com/articles/fauxcolumns/
Mam nadzieję że to pomoże :)
źródło
źródło
dawanie
position: absolute;
dziecku działało w moim przypadkuźródło
Korzystasz z CSS Flexbox
źródło
Ta odpowiedź nie jest już idealna, ponieważ CSS Flexbox i grid zostały zaimplementowane w CSS. Jednak nadal jest to skuteczne rozwiązanie
Na mniejszym ekranie prawdopodobnie chciałbyś zachować automatyczną wysokość, ponieważ col1, col2 i col3 są ułożone jeden na drugim.
Jednak po punkcie przerwania zapytania o media chciałbyś, aby cols pojawiały się obok siebie z jednakową wysokością dla wszystkich kolumn.
1125 px to tylko przykład punktu przerwania szerokości okna, po którym chcesz ustawić wszystkie kolumny na tę samą wysokość.
W razie potrzeby możesz oczywiście ustawić więcej punktów przerwania.
źródło
Miałem ten sam problem, działał w oparciu o odpowiedź Hakama Fostoka, stworzyłem mały przykład, w niektórych przypadkach może działać bez konieczności dodawania
display: flex;
iflex-direction: column;
na kontenerze nadrzędnymJSFiddle
źródło
Jak pokazano wcześniej, Flexbox jest najłatwiejszy. na przykład.
spowoduje to wyrównanie wszystkich elementów potomnych do środka w elemencie macierzystym.
źródło
Od:
http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css
stwierdza bootstrap, ale nie potrzebujesz bootstrap, aby z niego korzystać. Odpowiedź na to stare pytanie, ponieważ działało to dla mnie i wydaje się dość łatwe do wdrożenia.
To była ta sama odpowiedź, której udzieliłem na to pytanie
źródło
Oto demo starej mody oparte na
position: absolute
kontenerze zawartości iposition: relative
kontenerze nadrzędnym.Jeśli chodzi o nowoczesny sposób, aby to zrobić - pudełka Flex są najlepsze.
źródło
Najłatwiej to zrobić po prostu sfałszować. List Apart omawiał to obszernie na przestrzeni lat, podobnie jak w tym artykule Dan Cederholm z 2004 roku .
Oto jak zwykle to robię:
Możesz łatwo dodać nagłówek do tego projektu, zawijając #container w inny div, osadzając div nagłówka jako rodzeństwo # kontenera i przenosząc style marginesów i szerokości do kontenera nadrzędnego. Ponadto CSS powinien zostać przeniesiony do osobnego pliku, a nie przechowywany w linii itd. Itd. Na koniec klasa clearfix znajduje się na pozycji .
źródło