Bootstrap na Twitterze 3 dwie kolumny o pełnej wysokości


247

Próbuję utworzyć dwukolumnowy układ na pełnej wysokości za pomocą paska startowego Twitter 3. Wygląda na to, że pasek startowy Twitter 3 nie obsługuje układów o pełnej wysokości. Co chcę robić:

  +-------------------------------------------------+
  |                     Header                      |
  +------------+------------------------------------+
  |            |                                    |
  |            |                                    |
  |Navigation  |         Content                    |
  |            |                                    |
  |            |                                    |
  |            |                                    |
  |            |                                    |
  |            |                                    |
  |            |                                    |
  +------------+------------------------------------+

Jeśli zawartość rośnie, nawigacja również powinna rosnąć.

  • Wysokość 100% dla każdego rodzica nie działa, ponieważ zdarza się, że treść jest w jednej linii.
  • pozycja absolutna wydaje się być niewłaściwa
  • display: tablei display:table-cellrozwiązać problem, ale to nie jest elegancko

HTML:

    <div class="container">
      <div class="row">
        <div class="col-md-3"></div>
        <div class="col-md-9"></div>
      </div>
    </div>

Czy istnieje sposób, aby to zrobić za pomocą domyślnych klas 3 ładowania Bootstrap ?


Czy ten element nawigacji + treści musi obejmować pozostałą wysokość rzutni (ekranu)?
Shekhar K. Sharma

Tak. Tylko do czyszczenia: nagłówek + zawartość = 100% rzutni, jeśli wysokość zawartości <= wysokość rzutni minus wysokość nagłówka. przepraszam za słaby angielski
uladzimir

Nie rozumiem, czy nie możesz po prostu podać tła pliku .row i pozwolić col-md-9 na zatuszowanie porcji lub odwrotnie? A co powiesz na to, aby rząd uzyskał wysokość 100%, dając wysokość nawigacji 100% i po prostu pozwolić dynamicznie rosnąć col-md-9?
Chris Peterson

Odpowiedzi:


217

Edycja: W Bootstrap 4 klasy natywne mogą tworzyć kolumny o pełnej wysokości ( DEMO ), ponieważ zmienili system siatki na flexbox. (Czytaj dalej dla Bootstrap 3)


Natywne klasy Bootstrap 3.0 nie obsługują opisanego przez Ciebie układu, jednak możemy zintegrować niestandardowe CSS, które wykorzystują do tego celu tabele css .

Bootply demo / Codepen

Narzut:

<header>Header</header>
<div class="container">
    <div class="row">
        <div class="col-md-3 no-float">Navigation</div>
        <div class="col-md-9 no-float">Content</div>
    </div>
</div>

(Odpowiedni) CSS

html,body,.container {
    height:100%;
}
.container {
    display:table;
    width: 100%;
    margin-top: -50px;
    padding: 50px 0 0 0; /*set left/right padding according to needs*/
    box-sizing: border-box;
}

.row {
    height: 100%;
    display: table-row;
}

.row .no-float {
  display: table-cell;
  float: none;
}

Powyższy kod osiągnie kolumny o pełnej wysokości (ze względu na dodane przez nas niestandardowe właściwości tabeli css) i przy stosunku 1: 3 (Nawigacja: zawartość) dla średnich szerokości ekranu i wyższych - (ze względu na domyślne klasy bootstrap: col-md -3 i col-md-9)

NB:

1) Aby nie zepsuć natywnych klas kolumn bootstrap, dodajemy kolejną klasę, jak no-floatw znacznikach, i ustawiamy tylko display:table-celli float:nonena tej klasie (w odniesieniu do samych klas kolumn).

2) Jeśli chcemy użyć kodu tabeli css tylko dla określonego punktu przerwania (powiedzmy średnie szerokości ekranu i więcej), ale dla ekranów mobilnych chcemy przywrócić standardowe zachowanie bootstrap, niż możemy zawinąć nasz niestandardowy CSS w zapytanie medialne, powiedz:

@media (min-width: 992px) {
  .row .no-float {
      display: table-cell;
      float: none;
  }
}

Demo Codepen

Teraz w przypadku mniejszych ekranów kolumny będą zachowywać się jak domyślne kolumny ładowania początkowego (każda uzyska pełną szerokość).

3) Jeśli stosunek 1: 3 jest konieczny dla wszystkich szerokości ekranu - prawdopodobnie lepiej jest usunąć klasy col-md- * bootstrapa ze znaczników, ponieważ nie tak powinny być używane.

Demo Codepen


Hm Naprawdę nie jest to, czego szukam, może jest rozwiązanie z natywnymi klasami bootstrap 3? W każdym razie dzięki!
uladzimir

7
Działa dla mnie po dodaniu float: none; do kolumn, ale w js nie jest to konieczne. Czemu? Aktualizacja: @media - przyczyna
uladzimir

2
@Zubzob - zaktualizowałem swoją odpowiedź i uruchomiłem system. Dodając dodatkową klasę do klas natywnych col-md-3 i col-md-9 - możemy zapewnić, że nie zepsuje to innego kodu.
Danield

1
Więc odpowiedź brzmiałaby: „Nie, nie możesz tego zrobić z klasami bootstrap po wyjęciu z pudełka”?
eran otzap

1
@ Meglio, proszę przeczytać moją zredagowaną odpowiedź - dziękuję za zwrócenie na to uwagi
Danield,

68

Możesz osiągnąć to, co chcesz, dzięki padding-bottom: 100%; margin-bottom: -100%;sztuczce, którą widzisz w tej skrzypce.

Zmieniam trochę twój HTML, ale możesz osiągnąć ten sam wynik z własnym HTML za pomocą następującego kodu

.col-md-9 {
    overflow: hidden;
}

.col-md-3 {
    padding-bottom: 100%;
    margin-bottom: -100%;
}

Dobrze. Zaktualizuję pytanie. Mam stronę dynamiczną (col-md-9 może rosnąć), więc twój wariant nie powinien działać, ale przetestuję go. Dzięki
uladzimir

Nie coś o co mi chodzi w pytaniu. Chcę kolumny o pełnej wysokości, w przypadku gdy col-md-9 ma jeden wiersz wysokości tekstu, to samo powinno wynosić 100% - wysokość nagłówka lub zwykłe 100%. Wypróbowałem tę sztuczkę, tylko z wartościami takimi jak 10000px, -10000px. Ale dzięki za odpowiedź.
uladzimir

Moje kolumny były wysokie, więc musiałem zmienić dopełnienie dołu: 10000%; margines na dole: -10000%; i udało się. W przeciwnym razie 100% ma związek z wysokością strony
Toolkit

2
W przypadku innych próbujących tego rozwiązania przepełnienie: ukryte musi zostać zastosowane do wiersza nadrzędnego, a nie kolumny niepasującej do paska bocznego, aby działało w różnych przeglądarkach. Jest to poprawne w skrzypcach, ale nie w powyższym wyjaśnieniu.
Tim

38

Rozwiązanie Pure CSS

Working Fiddle

Używając tylko CSS2.1, Pracuj ze wszystkimi przeglądarkami (IE8 +), bez określania żadnej wysokości lub szerokości.

Oznacza to, że jeśli nagłówek nagle wydłuży się lub nawigacja po lewej stronie musi się powiększyć, nie musisz nic naprawiać w swoim CSS.

Całkowicie responsywny, prosty i przejrzysty oraz bardzo łatwy w zarządzaniu.

<div class="Container">
    <div class="Header">
    </div>
    <div class="HeightTaker">
        <div class="Wrapper">
            <div class="LeftNavigation">
            </div>
            <div class="Content">
            </div>
        </div>
    </div>
</div>

Objaśnienie: Pojemnik divzajmuje 100% wysokości ciała i jest podzielony na 2 sekcje. Sekcja nagłówka będzie rozciągać się do wymaganej wysokości, a HeightTakerresztę zajmie. Jak to się osiąga? przez przesunięcie pustego elementu wzdłuż boku o wysokości 100% (użycie :before) i podanie HeightTakerpustego elementu na końcu z wyraźną regułą (użycie :after). element ten nie może znajdować się w tej samej linii co element pływający, więc jest przesuwany do końca. co stanowi dokładnie 100% dokumentu.

Dzięki temu przestawiamy HeightTakerrozpiętość na resztę wysokości pojemnika, nie podając żadnej konkretnej wysokości / marginesu.

w środku HeightTakerbudujemy normalny układ zmiennoprzecinkowy (w celu uzyskania wyświetlania podobnego do kolumny) z niewielką zmianą .. mamy Wrapperelement, który jest potrzebny do100% wysokości.

Aktualizacja

Oto prezentacja z klasami Bootstrap. (Właśnie dodałem jeden div do twojego układu)


Tak, to najładniejsze rozwiązanie. Czy możesz to zrobić dla klas bootstrap?
uladzimir

I proszę wyjaśnij, jak to działa. obecnie najlepiej jest zatwierdzić
uladzimir

Nie znam bootstrapu .. przepraszam. ale jest tak łatwy w użyciu .. możesz zrobić to sam. Dodam wyjaśnienie, jak to działa.
avrahamcool

@baxxabit Dodałem wyjaśnienie. powiedz mi, jeśli potrzebujesz więcej informacji.
avrahamcool

1
Jeśli zmienisz rozmiar okna, nie będzie ono odpowiednio dopasowane na ekranie.
Sadegh

25

Myślałem o subtelnej zmianie, która nie zmienia domyślnego zachowania ładowania początkowego. I mogę go używać tylko wtedy, gdy go potrzebuję:

.table-container {
  display: table;
}

.table-container .table-row {
  height: 100%;
  display: table-row;
}

.table-container .table-row .table-col {
  display: table-cell;
  float: none;
  vertical-align: top;
}

więc mogę go użyć w następujący sposób:

<div class="container table-container">
  <div class="row table-row">
    <div class="col-lg-4 table-col"> ... </div>
    <div class="col-lg-4 table-col"> ... </div>
    <div class="col-lg-4 table-col"> ... </div>
  </div>
</div>

Pracował dla mnie pięknie (używając bootstrap 3)
Gary Richter

Nie udało mi się uruchomić jednego z powyższych rozwiązań, kluczem było dla mnie wyrównanie w pionie.
Nathan

9

Według mojej wiedzy możesz wykonać do 5 metod, aby to osiągnąć:

  1. Korzystanie z właściwości wyświetlania tabeli / komórki tabeli CSS lub rzeczywistych tabel.
  2. Używanie bezwzględnie pozycjonowanego elementu wewnątrz owijki.
  3. Korzystając z właściwości wyświetlania Flexbox, ale na dzień dzisiejszy nadal jest on częściowo obsługiwany
  4. Symuluj pełne wysokości kolumn za pomocą techniki faux kolumn .
  5. Korzystanie z techniki wypełniania / marginesów. Patrz przykład .

Bootstrap: Nie mam z tym dużego doświadczenia, ale nie sądzę, że zapewniają do tego style.

.row
{
    overflow: hidden;
    height: 100%;
}
.row .col-md-3,
.row .col-md-9 
{
    padding: 30px 3.15% 99999px; 
    float: left;
    margin-bottom: -99999px;
}
.row .col-md-3 p,
.row .col-md-9 p 
{
    margin-bottom: 30px;
}
.col-md-3
{
    background: pink;
    left:0;
    width:25%
}
.col-md-9
{
    width: 75%;
    background: yellow;
}

Dziękuję, @Oriol. Jesteś niesamowity. Niektóre punkty: 1), 2) tak, ale nie to, czego chcę 3) Jest to rozwiązanie, ale tylko dla nowoczesnych ff i chrome. Safari obsługuje starą wersję Flexboksa 4), a nie klasy bootstrap 5) Mogą rosnąć odpowiednie kolumny. Więc przepełnienie: ukryte spowoduje przycięcie ważnych linii. To nie jest fajne :) Spróbuję twojego kodu
uladzimir

7

Nowoczesne i bardzo proste rozwiązanie:

HTML:

<div class="container">
  <div class="row">
    <div class="col-md-3"></div>
    <div class="col-md-9"></div>
  </div>
</div>

CSS:

.row{
    display: flex;
}

6

Czyste rozwiązanie CSS jest dość łatwe i działa jak urocza przeglądarka.

Po prostu dodajesz duże wypełnienie i równie duży ujemny margines do kolumn nawigacji i treści, a następnie zawijasz ich rząd w klasie z ukrytym przepełnieniem.
Widok na żywo
Edytuj widok

HTML

<div class="container">

  <div class="row">
    <div class="col-xs-12 header"><h1>Header</h1></div>
  </div>

  <div class="row col-wrap">

    <div class="col-md-3 col">
      <h1>Nav</h1>
    </div>

    <div class="col-md-9 col">
      <h1>Content</h1>
    </div>

  </div>
</div>

CSS

.col{
margin-bottom: -99999px;
padding-bottom: 99999px;
}

.col-wrap{
overflow: hidden; 
}  

Powodzenia!


1
przepraszam, ale wygląda to na okropny hack, który nie daje możliwości bezwzględnego pozycjonowania elementu na dnie kontenera podrzędnego.
Mattijs,

Nie jest to dobre rozwiązanie, jeśli masz dolny promień obramowania lub jakiś wizualny zasób w tle div.
RandomBoy,

5

Rozwiązanie można osiągnąć na dwa sposoby

  1. Korzystanie z display: table i display: table-cell
  2. Korzystanie z wypełnienia i ujemnego marginesu.

Klasy używane do uzyskania powyższego rozwiązania nie są dostępne w bootstrap 3. display: table i display: table-cell są podane, ale tylko przy użyciu tabel w HTML. margines ujemny i klasy wypełnienia również nie istnieją.

Dlatego musimy użyć niestandardowego css, aby to osiągnąć.

Poniżej znajduje się pierwsze rozwiązanie

Kod HTML:

<div class="container">
  <div class="row">
    <div class="col-md-12">
        <div class="page-header">
            <h3>Page-Header</h3>
        </div>
    </div>
  </div>
  <div class="row tablewrapper">
    <div class="col-md-12 tablerowwrapper">
        <div class="col-md-3 sidebar pad_top15">
            <ul class="nav nav-pills nav-stacked">
                <li class="active"><a href="#">Submenuone</a></li>
                <li><a href="#">Submenutwo</a></li>
                <li><a href="#">Submenuthree</a></li>
            </ul>
        </div>
        <div class="col-md-9 content">
            <div class="col-md-12">
                <div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div>
                <div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div>
                <div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div>
                <div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div>
                <div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div>
                <div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div>
            </div>
        </div>
    </div>
  </div>

</div>

odpowiedni css:

html,body,.container{
        height:100%;
    }
    .tablewrapper{
        display:table;
        height:100%;
    }
    .tablerowwrapper{
        display:table-row;
    }
    .sidebar,.content{
        display:table-cell;
        height:100%;
        border: 1px solid black;
        float:none;
    }
    .pad_top15{
        padding-top:15px;
    }

Poniżej znajduje się drugie rozwiązanie

Kod HTML:

 <div class="container">
  <div class="row">
    <div class="col-md-12">
        <div class="page-header">
            <h3>Page-Header</h3>
        </div>
    </div>
  </div>
  <div class="row ovfhidden bord_bot height100p">
    <div class="col-md-3 sidebar pad_top15">
            <ul class="nav nav-pills nav-stacked">
                <li class="active"><a href="#">Submenuone</a></li>
                <li><a href="#">Submenutwo</a></li>
                <li><a href="#">Submenuthree</a></li>
            </ul>
        </div>
        <div class="col-md-9 content pad_top15">
            <div class="col-md-12">

                <div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div><div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div>

                <div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div><div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div>

                <div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div><div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div>

                <div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div><div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div>

                <div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div><div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div>

                <div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div><div class="col-md-12">
                    <p>
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 
                    </p>
                </div>
            </div>
        </div> 
  </div>

</div>

odpowiedni css:

html,body,.container{
        height:100%;
    }
    .sidebar,.content{
        /*display:table-cell;
        height:100%;*/
        border: 1px solid black;
        padding-bottom:8000px;
        margin-bottom:-8000px;
    }
    .ovfhidden{
        overflow:hidden;
    }
    .pad_top15{
        padding-top:15px;
    }
    .bord_bot{
        border-bottom: 1px solid black;
    }

Kolumny nie ma 100% wysokości rzutni
Uładzimir

przepraszam, zapomniałem podstawowy styl HTML, body, kontener {wysokość: 100%;} dodaj ten styl do pierwszego rozwiązania
user2594152 10.10.13

prawa kolumna może się powiększać, więc przepełnienie: ukryty dla wiersza może przyciąć trochę treści, jeśli zajmie to więcej niż wysokość rzutni.
uladzimir

usuń przelew: ukryty w rzędzie. jest ukryta treść jsfiddle.net/gMPXG/7/embedded/result
uladzimir 10.10.2013

W czym tkwi problem?
user2594152 10.10.13

4

Ok, osiągnąłem to samo za pomocą Bootstrap 3.0

Przykład z najnowszym bootstrapem

http://jsfiddle.net/HDNQS/1/

HTML:

<div class="header">
    whatever
</div>
<div class="container-fluid wrapper">
    <div class="row">
        <div class="col-md-3 navigation"></div>
        <div class="col-md-9 content"></div>
    </div>
</div>

SCSS:

html, body, .wrapper {
    padding: 0;
    margin: 0;
    height: 100%;
}

$headerHeight: 43px;

.navigation, .content {
    display: table-cell;
    float: none;
    vertical-align: top;
}

.wrapper {
    display: table;
    width: 100%;
    margin-top: -$headerHeight;
    padding-top: $headerHeight;
}

.header {
    height: $headerHeight;
}

.row {
    height: 100%;
    margin: 0;
    display: table-row;
    &:before, &:after {
        content: none;
    }
}

.navigation {
    background: #4a4d4e;
    padding-left: 0;
    padding-right: 0;
}

Tak, ale jest to to samo co zatwierdzona odpowiedź. Dziękuję
uladzimir

Tak, w większości jest tak samo, ale musisz dodać kilka drobnych poprawek (patrz content:nonei inne małe rzeczy). Chciałem zamieścić zastępczy „drop-in”, który mogę również
skopiować

+1 za dodanie „vertical-align: top”. Moja lewa kolumna utknęła na dole strony, dopóki jej nie dodałem.
NoizWaves

3

Wygląda więc na to, że najlepszą opcją jest padding-bottom przeciwdziałanie negatywnej margin-bottomstrategii.

Zrobiłem dwa przykłady. Jeden z <header> wnętrzem .container , a drugi z nim zewnątrz .

Obie wersje powinny działać poprawnie. Zwróć uwagę na użycie następującego @mediazapytania, aby usunąć dodatkowe wypełnienie na mniejszych ekranach ...

@media screen and (max-width:991px) {
    .content { padding-top:0; }
}

Poza tym te przykłady powinny rozwiązać problem.


dobre wezwanie do usunięcia dodatkowego wypełnienia na mniejszych ekranach gio
David Mann

Kciuki za skrzypce z zewnętrznym nagłówkiem, to było jedyne, które działało w mojej sprawie.
Tinus Tate

2

jest o wiele łatwiejszy sposób na zrobienie tego, jeśli martwisz się jedynie nałożeniem koloru.

Umieść to na początku lub na końcu w tagu body

<div id="nfc" class="col col-md-2"></div>

i to w twoim css

#nfc{
  background: red;
  top: 0;
  left: 0;
  bottom: 0;
  position: fixed;
  z-index: -99;
}

tworzysz tylko kształt, przypinając go za stronę i rozciągając na pełną wysokość. Korzystając z istniejących klas bootstrap, uzyskasz odpowiednią szerokość i pozostanie responsywny.

Ta metoda ofc ma pewne ograniczenia, ale jeśli dotyczy struktury głównej strony, jest to najlepsza odpowiedź.


Dlaczego masz position: absolute, a potem position: fixed?
ADTC

nie mgliste, literówka :)
Simon Stevens,

Niezłe rozwiązanie. Mogę jednak tylko poprawnie ustawić go w szeregu .container-fluid. Chciałbym użyć .container. Pomysły?
Jibran

.containerlub .container-fluidnie mają z tym żadnego związku. gdy .col.col-md-2ustawia szerokość za pomocą startowej. Mój CSS powyżej zmusza div do pełnej wysokości, z wystarczającym ujemnym indeksem z, aby upewnić się, że stoi za wszystkim. Jak wspomniano powyżej, powinien to być pierwszy lub ostatni element <body>tagu
Simon Stevens

2

Napisałem prosty CSS zgodny z Bootstrap, aby utworzyć tabele o pełnej szerokości i wysokości:

Fiddle: https://jsfiddle.net/uasbfc5e/4/

Zasada jest następująca:

  • dodaj „tablefull” na głównym DIV
  • następnie domyślnie poniższy DIV utworzy wiersze
  • a następnie DIV poniżej wierszy będą komórki
  • Możesz użyć klasy „tableheader” dla nagłówków lub podobnych

HTML:

<div class="tablefull">
    <div class="tableheader">
        <div class="col-xs-4">Header A</div>
        <div class="col-xs-4">B</div>
        <div class="col-xs-4">C</div>
    </div>
    <div>
        <div class="col-xs-6">Content 50% width auto height</div>
        <div class="col-xs-6">Hello World</div>
    </div>
    <div>
        <div class="col-xs-9">Content 70% width auto height</div>
        <div class="col-xs-3">Merry Halloween</div>
    </div>
</div>

CSS:

div.tablefull {
    display: table;
    table-layout: fixed;
    width: 100%;
    height: 100%;
}

div.tablefull>div.tableheader, div.tablefull>div.tableheader>div{
    height: 0%;
}

div.tablefull>div {
    display: table-row;
}

div.tablefull>div>div {
    display: table-cell;
    height: 100%;
    padding: 0;
}

Uważaj na minizatory CSS, czasem zmieniają się one 0%;na 0;zupełnie inne. Jeśli tak się stanie, możesz użyć 1%;zamiast tego.
Guillaume F.

1

próbować

<div class="container">
    <div class="row">
        <div class="col-md-12">header section</div>

    </div>
     <div class="row fill">
        <div class="col-md-4">Navigation</div>
        <div class="col-md-8">Content</div>

    </div>
</div>

css dla klasy .fill jest poniżej

 .fill{
    width:100%;
    height:100%;
    min-height:100%;
    padding:10px;
    color:#efefef;
    background: blue;
}
.col-md-12
{
    background: red;

}

.col-md-4
{
    background: yellow;
    height:100%;
    min-height:100%;

}
.col-md-8
{
    background: green;
    height:100%;
    min-height:100%;

}

W celach informacyjnych spójrz na skrzypce.


Dzięki za odpowiedź, ale używam twitter bootstrap 3, a nie 2. Proszę przeczytać getbootstrap.com/getting-started/#migration
uladzimir

bootstrap 3, span nie jest używany, zmieniono na col.
Kooki3

Dobrze. Wysokość kolumn będzie równa wysokości zawartości w kolumnach, ale mogę mieć tylko jedną linię.
uladzimir

Dzięki @ Kooki3. Wystarczy zmienić spansię col-md-i pozwala zobaczyć, co się dzieje<div class="container"> <div class="row"> <div class="col-md-12">header section</div> </div> <div class="row"> <div class="col-md-4">Navigation</div> <div class="col-md-8">Content</div> </div> </div>
Krishna Rani Sahoo

nie działa Czy czytasz mój komentarz? jsfiddle.net/YQUQd/1/embedded/result
uladzimir

1

Spróbuj tego

 <div class="container">
     <!-- Header-->         
  </div>
</div>
 <div class="row-fluid">
     <div class="span3 well">
         <ul class="nav nav-list">
             <li class="nav-header">Our Services</li>
                <!-- Navigation  -->
             <li class="active"><a href="#">Overview</a></li>
             <li><a href="#">Android Applications</a></li>
             <li class="divider"></li>
         </ul>
     </div>
     <div class="span7 offset1">
      <!-- Content -->         
     </div>
 </div>

Odwiedź http://www.sitepoint.com/building-responsive-websites-using-twitter-bootstrap/

Dzięki Syedowi


2
Dzięki, czy mógłbyś zmienić swój przykład bootstrap 3.0?
uladzimir

-1

Jeśli nie będzie zadowolony po rzędzie (cała wysokość ekranu jest zajęta), trik z użyciem position: fixed; height: 100%dla .col:beforeelementu może pracować również:

header {
  background: green;
  height: 50px;
}
.col-xs-3 {
  background: pink;
}
.col-xs-3:before {
  background: pink;
  content: ' ';
  height: 100%;
  margin-left: -15px; /* compensates column's padding */
  position: fixed;
  width: inherit; /* bootstrap column's width */
  z-index: -1; /* puts behind content */
}
.col-xs-9 {
  background: yellow;
}
.col-xs-9:before {
  background: yellow;
  content: ' ';
  height: 100%;
  margin-left: -15px; /* compensates column's padding */
  position: fixed;
  width: inherit; /* bootstrap column's width */
  z-index: -1; /* puts behind content */
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>

<header>Header</header>
<div class="container-fluid">
    <div class="row">
        <div class="col-xs-3">Navigation</div>
        <div class="col-xs-9">Content</div>
    </div>
</div>


-2

Nie zostało to tutaj wspomniane przy kompensacji.

Możesz użyć wartości bezwzględnej do położenia dla lewego paska bocznego.

CSS

.sidebar-fixed{
  width: 16.66666667%;
  height: 100%;
}

HTML

<div class="row">
  <div class="sidebar-fixed">
    Side Bar
  </div>
  <div class="col-md-10 col-md-offset-2">
    CONTENT
  </div>
</div>

-3

Spróbuj tego

<div class="row row-offcanvas row-offcanvas-right">
<div class="col-xs-6 col-sm-3 sidebar-offcanvas" id="sidebar" role="navigation">Nav     Content</div>
<div class="col-xs-12 col-sm-9">Content goes here</div>
</div>

Używa Bootstrap 3, więc nie potrzebujesz dodatkowego CSS itp.


proszę, podaj skrzypce
uladzimir

Oto przykład pokazujący coś takiego ze strony Bootstrap: getbootstrap.com/examples/offcanvas
Dan Esparza

-3

Czy widziałeś poprawkę bootstrapu ? w sekcji JAvascript?

Myślę, że to byłoby najlepsze i najłatwiejsze rozwiązanie, koleś.

Zajrzyj tam: http://getbootstrap.com/javascript/#affix


Czy możesz podać przykład, w jaki sposób mogę utworzyć dwie kolumny z przyrostkiem?
uladzimir

Nawiasem mówiąc ... próbowałeś z minimalną wysokością ??? Może to przydatne, prawda? @Baxxabit
Despertaweb

-3

Po eksperymentowaniu z kodem podanym tutaj: Bootstrap Tutorial

Oto kolejna alternatywa przy użyciu najnowszego Bootstrap v3.0.2:

Narzut:

<div id="headcontainer" class="container">
           <p>Your Header</p>    
</div>
<div id="maincontainer" class="container">
      <div class="row">
         <div class="col-xs-4"> 
            <p>Your Navigation</p> 
         </div>
         <div class="col-xs-8"> 
            <p>Your Content</p> 
         </div>
      </div>
</div>

Dodatkowy CSS:

#maincontainer, #headcontainer {
width: 100%;
}

#headcontainer {
background-color:#CCCC99; 
height: 150px
}

#maincontainer .row .col-xs-4{
background-color:gray; 
height:1000px
}

#maincontainer .row .col-xs-8{
background-color:green;
height: 1000px
}

Przykładowy JSFiddle

Mam nadzieję, że pomoże to wszystkim zainteresowanym.


jsfiddle.net/zHRZr/7 oryginalne pytanie o dynamiczną wysokość, ale i tak dzięki
uladzimir
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.