Ustal pozycję kolumny w bootstrapie


83

Używając Bootstrap, mam klasę kolumny siatki = "col-lg-3", którą chcę umieścić na miejscu: ustalona, ​​podczas gdy druga .col-lg-9 jest normalną pozycją (można przewijać stronę).

<div class="row">
    <div class="col-lg-3">
        Fixed content
    </div>
    <div class="col-lg-9">
        Normal scrollable content
    </div>

</div>

Tak samo jak lewa kolumna w LifeHacker.com Zobaczysz, że lewa część jest naprawiona, ale przewijam stronę.

Używam bootstrap 3.1.1


@Lowkase Załączam kod na żądanie.

1
Oczekiwanie na wyjęcie tematu „wstrzymane”. W międzyczasie możesz zobaczyć moją odpowiedź tutaj: jsfiddle.net/dRbe4 . Mogę to lepiej wyjaśnić, gdy pytanie zostanie ponownie otwarte.
— Lowkase

Odpowiedzi:


87
<div class="row">
    <div class="col-lg-3">
       <div class="affix">
           fixed position 
        </div>
    </div>
    <div class="col-lg-9">
       Normal data enter code here
    </div>
</div>

3
Zdecydowanie teraz preferowane rozwiązanie!
— Scott

12
To nie działa poprawnie na mniejszych ekranach, prawy element div zostanie umieszczony nad lewym kolumną zawierającą element fixeddiv
— thefoxrocks

12
bootstrap 4 ?? jakieś pomysły
— PirateApp,

22
W Bootstrap 4 zmień „affix” na „sticky-top”
— Tacio Costa

3
Dla informacji: Bootstrap zrezygnował z obsługi afiksu w Bootstrap 4.0. Użyj teraz „position: sticky” zgodnie z sugestią tutaj: getbootstrap.com/docs/4.1/migration/#components
— Antoine Delia

50

iterując po odpowiedzi Ihab, używając tylko position:fixedi bootstrapów col-offset, nie musisz być konkretny co do szerokości.

<div class="row">
    <div class="col-lg-3" style="position:fixed">
        Fixed content
    </div>
    <div class="col-lg-9 col-lg-offset-3">
        Normal scrollable content
    </div>
</div>

5
to nie działa, jeśli zmienisz położenie kolumn
— didando8a

To lepsze rozwiązanie! działa idealnie i nie jest potrzebny CSS. @ didando8a Jeśli zmienisz pozycję kolumn, po prostu zmień col-lg-offset na nowy offset.
— Roy Shoa

Jeśli ktoś potrzebuje również możliwości przewijania do stałej kolumny, wystarczy dodać wysokość i przepełnienie. np style="position:fixed;height:100%;overflow-y:auto;".
— Roy Shoa

7
@Roy "Żaden CSS nie jest potrzebny" - tak, jest tylko w tagu stylu;)
— Mike Furlender

4
To jest to, czego potrzebowałem! Zauważ, że klasy przesunięcia są różne w Bootstrap 4, np offset-lg-3. getbootstrap.com/docs/4.0/layout/grid/#offsetting-columns
— nickwesselman

29

Postępując zgodnie z rozwiązaniem tutaj http://jsfiddle.net/dRbe4/ ,

<div class="row">
    <div class="col-lg-3 fixed">
        Fixed content
    </div>
    <div class="col-lg-9 scrollit">
        Normal scrollable content
    </div>

 </div>

Zmodyfikowałem niektóre css, aby działały idealnie:

.fixed {
        position: fixed;
        width: 25%;
}
.scrollit {
        float: left;
        width: 71%
}

Dzięki @Lowkase za udostępnienie rozwiązania.


10
Czy można uzyskać ten sam wynik bez określenia atrybutu szerokości?
— ADIMO

1
Zdaję sobie sprawę, że to powinno być boleśnie oczywiste, ale nie mogę tego uruchomić ... Chcę przewijać kolumnę po lewej i nieruchomą kolumnę po prawej. Moja stała kolumna ma tylko etykietę, ale z jakiegoś powodu, kiedy ustawiam te klasy, etykieta „przykleja się” do lewego górnego rogu zamiast znajdować się w kolumnie. Bezskutecznie próbowałem różnych kombinacji atrybutów stylu. Doceniłby wskaźnik :)
— Reid

1
@ReidBelton udostępnij Jsfiddle, abym mógł Ci pomóc z kodem.

@ IhabAbdel-Rahim Bardzo dziękuję za ofertę! Nie jest to jednak konieczne, ponieważ od tego czasu odłożyłem ten projekt na półkę.
— Reid

zrobiłem to samo, ale kiedy dodam stałą klasę, zniknęła. Proszę pomóż.
— Arpan

21

w Bootstrap 3 class="affix"działa, ale w Bootstrap 4 nie. Rozwiązałem ten problem w Bootstrap 4 z class="sticky-top" (używanie position: fixedw CSS ma swoje własne problemy)

kod będzie wyglądał mniej więcej tak:

<div class="row">
    <div class="col-lg-3">
        <div class="sticky-top">
            Fixed content
        </div>
    </div>
    <div class="col-lg-9">
        Normal scrollable content
    </div>
</div>

Doskonały. position-fixedpracował również nad przyklejeniem kolumny do góry, jednak zawartość kolumny przelewała się. sticky-topnaprawiłem to.
— maxpaj

11

Zaktualizowano dla Bootstrap 4

Bootstrap 4 zawiera teraz position-fixedklasę do tego celu, więc nie ma potrzeby stosowania dodatkowego CSS ...

<div class="container">
    <div class="row">
        <div class="col-lg-3">
            <div class="position-fixed">
                Fixed content
            </div>
        </div>
        <div class="col-lg-9">
            Normal scrollable content
        </div>
    </div>
</div>

https://www.codeply.com/go/yOF9csaptw


1
Jeśli zrobię tak, jak w twoim przykładzie, zawartość kolumny „col-lg-3” zostanie usunięta z kolumny macierzystej. Trochę dziwne! (Spróbuj umieścić w tym więcej tekstu). To musi być błąd ...
— ThePhi

1
Nie jest to dziwne, ponieważ elementy o ustalonej pozycji są usuwane z normalnego przepływu DOM . To wykracza poza zakres pierwotnego pytania, ale musiałoby ustawić określony rozmiar dla stałego elementu.
— Zim

2
powoduje to jednak, że kolumny nakładają się na siebie
— ChumiestBucket

1
W moim przypadku było to preferowane, ponieważ zdefiniowanie pozycji: fixed styling do col-lg-3 div spowodowało, że kursory wewnętrznych elementów potomnych były wyświetlane jako domyślne (zamiast fx. Pointer).
— chri3g91

4

Użyj tego, działa dla mnie i rozwiązuj problemy z małym ekranem.

<div class="row">
    <!-- (fixed content) JUST VISIBLE IN LG SCREEN -->
    <div class="col-lg-3 device-lg visible-lg">
       <div class="affix">
           fixed position 
        </div>
    </div>
    <div class="col-lg-9">
    <!-- (fixed content) JUST VISIBLE IN NO LG SCREEN -->
    <div class="device-sm visible-sm device-xs visible-xs device-md visible-md ">
       <div>
           NO fixed position
        </div>
    </div>
       Normal data enter code here
    </div>
</div>

2

Z bootstrapem 4 po prostu użyj col-auto

<div class="container-fluid">
    <div class="row">
        <div class="col-sm-auto">
            Fixed content
        </div>
        <div class="col-sm">
            Normal scrollable content
        </div>
    </div>
</div>

1
nie działa dla mnie. obie kolumny przewijają się zgodnie z oczekiwaniami.
— ChumiestBucket

1
@star_trac spróbuj dodać trochę css, powinno pomóc:.container-fluid { flex: 1; }
— stefanitsky
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.