bootstrap-responsywny-szablon

Działanie Bootstrapa w kontekście responsywnych stron

Framework Twitter Bootstrap w ostatnich kilku latach szturmem zdobywa serca programistów, pragnących budować responsywne strony. Praktycznie każdy, kto tworzy nowy projekt, rozważa wykorzystanie Bootstrapa do „zasilania” frontendu. Nic dziwnego, bo z każdą kolejną wersją Bootstrapa dostajemy zestaw gotowych klas, które znacząco ułatwiają i przyspieszają budowę responsywnych stron internetowych (a z wersją Bootstrap 3 również stron mobilnych).

Zatem przyjrzyjmy się bliżej jak działa Bootstrap i dlaczego tak dobrze wspiera budowę responsywnych stron.

Zapytania mediów

Po pierwsze, Bootstrap dzieli urządzenia na których przeglądana jest strona na 4 kategorie pod kątem rozmiaru ekranu:

  • Extra Small Devices – urządzenia z ekranem o szerokości mniejszej niż 768px, np. smartfony.

  • Small Devices – urządzenia z ekranem o minimalnej szerokości min-width: 768px i maksymalnej szerokości max-width: 991px. Na przykład tablety.

  • Medium Sized Devices – urządzenia z ekranem o minimalnej szerokości min-width:992px oraz maksymalnej szerokości max-width:1199px. Na przykład monitory komputerów stacjonarnych.

  • Larger devices – urządzenia z ekranem szerszym niż min-width: 1200px, np. monitory panoramiczne.

Bootstrap dopasowuje arkusz stylów CSS do danego urządzenia dzięki zastosowaniu zapytań @media.

Layout oparty o Grid

Po drugie, Bootstrap działa w oparciu o tzw. GRID system. W uproszczeniu, po prostu dzieli stronę na kolumny, a precyzyjniej – na 12 kolumn. Poniżej znajduje się szablon według którego tworzona jest struktura treści strony – w tym wypadku jest ona dwukolumnowa:

<div class="container">
    <div class="row">
        <div class="col-xs-6">
            <p>kolumna 1</p>
        </div>
        <div class="col-xs-6">
            <p>kolumna 2</p>
        </div>
    </div>
</div>

Według powyższego, struktura strony zawiera się w div.container. Obejmuje ona całą powierzchnię ekranu z odstępem 15px od lewej i prawej krawędzi ekranu (padding-left:15px oraz padding-right:15px zdefiniowane w bootstrap.css). Dzięki powyższym zapytaniom mediów, .container może przyjmować następujące szerokości:

  • width: auto (lub brak) na smartfonach (ekran mniejszy niż 768px)
  • width: 750px na tabletach (ekran większy równy 768px)
  • width: 970px na komputerach stacjonarnych (ekran większy równy 992px)
  • width: 1170px na monitorach panoramicznych (ekran większy równy 1200px)

Kolejnym elementem jest div z klasą .row. Jest on używany jako „opakowanie” dla kolumn. Jego najważniejsze atrybuty to margin-left:-15px oraz margin-right:-15px. Te minusowe wartości marginesów niwelują padding nadany klasie .container, która obejmuje .row. W wyniku tego .row dotyka lewej i prawej krawędzi ekranu. Dlaczego? Wszystko wyjaśnia się, jeśli zobaczymy jak zaprogramowane są kolumny. Poniżej klasa .xs-col-6:

.col-xs-6 {
padding-right: 15px;
padding-left: 15px;
}

A więc widzimy, że kolumny posiadają 15px padding. Dzięki temu zapewniona jest nie tylko odległość zawartości kolumn od krawędzi ekranu (zaznaczam, padding zapewnia odległość zawartości kolumn, sama krawędź kolumny dotyka krawędzi ekranu), ale także symetryczne odległości między zawartością sąsiadujących kolumn.

Taka struktura sprawia, że zawartość strony pozostaje w odległości 15px od krawędzi ekranu. Gdybyśmy chcieli tworzyć na całej szerokości, korzystamy z klasy .container-fluid zamiast .container, która wypełnia całą szerokość ekranu.

O co chodzi z tymi kolumnami i systemem GRID

Przestrzeń każdej strony opartej na Bootstrapie zajmuje w sumie 12 „niewidocznych” kolumn. To od nas jako developerów zależy, ile z tych kolumn chcemy wykorzystywać w danym miejscu. W jaki sposób wpływa to na responsywność? Po pierwsze, istnieją 4 kategorie klas dla kolumn w zależności od tego jak dużo miejsca mają zajmować, i na jakim urządzeniu przeglądana jest strona:

  • .col-xs-… – na smartfonach
  • .col-sm-… – na tabletach
  • .col-md-… – na komputerach
  • .col-lg-… – na dużych monitorach panoramicznych

W deklaracji każdej klasy po ostatnim myślniku dodajemy cyfrę od 1 do 12. Wyznacza ona liczbę kolumn, jaką zajmie nasz div. Na przykład col-xs-6 tworzy kolumnę szeroką 6 razy bardziej od pojedynczej kolumny:

bootstrap-tutorial

Po drugie, w domyśle szerokości tych kolumn nie są zdefiniowane (width:auto) jednak w wyniku zapytań mediów, szerokość każdej kolumny przyjmuje wartości procentowe:

.col-*-12 { width: 100%; }

.col-*-11 { width: 91.66666667%; }

.col-*-10 { width: 83.33333333%; }

.col-*-9 { width: 75%; }

.col-*-8 { width: 66.66666667%; }

.col-*-7 { width: 58.33333333%; }

.col-*-6 { width: 50%; }

.col-*-5 { width: 41.66666667%; }

.col-*-4 { width: 33.33333333%; }

.col-*-3 { width: 25%; }

.col-*-2 { width: 16.66666667%; }

.col-*-1 { width: 8.33333333%; }

Responsywne tabele

W Bootstrapie tworzymy tabele za pomocą klasy .table. W jej wyniku tabela wypełnia całą szerokość elementu, w którym sięznajduje (rodzica DOM), ponieważ posiada atrybuty width:100% oraz max-width:100%.

To sprawia, że tabela odpowiednio reaguje na zmniejszanie/powiększanie ekranu. Ale bardzo duże (wielokolumnowe) tabele wyglądają nieczytelnie na bardzo wąskich ekranach, kiedy je tak „miażdżymy”. Z pomocą przychodzi nam druga klasa Bootstrapa poświęcona tabelom: .table-responsive. Zastosowanie .table-responsive zamiast .table sprawia, że nie pozwalamy tabeli zwężać się na małych ekranach, ale zamiast tego dodajemy możliwość przewijania zawartości tabeli w poziomie:

tutorial-bootstrap-responsywna-strona

Ciekaw jestem czy znalezliście jeszcze inne pomysły autorów Bootstrapa zastosowane w celu radzenia sobie z responsywnością stron i prawidłowym wyświetlaniem contentu na różnych ekranach.