Wyobraź sobie, że budujesz świątynię w Starożytnym Egipcie. Mury świątyni muszą pomieścić wszystkie hieroglify i rzeźby, niezależnie od tego, czy sala jest wąska, czy przestronna. W CSS działa to podobnie - kontener musi dostosowywać się do dostępnej przestrzeni.
Tradycyjnie strony budowano ze stałymi szerokościami w pikselach. Problem? Na małym telefonie treść wychodziła poza ekran, a na ogromnym monitorze zajmowała tylko wąski pasek.
1/* Stały layout - ZŁE podejście */
2.container {
3 width: 960px; /* Zawsze 960px, niezależnie od ekranu */
4}Rozwiązaniem jest fluid layout (płynny układ) - używamy jednostek procentowych zamiast pikseli:
1/* Płynny layout - DOBRE podejście */
2.container {
3 width: 100%; /* Zajmuje całą dostępną szerokość */
4}Kluczowym wzorcem w responsywnym CSS jest responsywny kontener. Łączy trzy właściwości:
1.container {
2 width: 100%; /* Pełna szerokość na małych ekranach */
3 max-width: 1200px; /* Ograniczenie na dużych ekranach */
4 margin: 0 auto; /* Wycentrowanie na stronie */
5}Jak to działa?
To jak korytarz w piramidzie - treść nigdy nie jest zbyt szeroka, ale na wąskich przejściach wykorzystuje całą dostępną przestrzeń.
Jedna z najważniejszych deklaracji CSS dla responsywnego projektowania:
1*, *::before, *::after {
2 box-sizing: border-box;
3}Bez
border-box, padding i border dodają się do szerokości elementu:1/* Bez border-box */
2.box {
3 width: 100%;
4 padding: 20px;
5 /* Rzeczywista szerokość: 100% + 40px padding = WYCHODZI POZA EKRAN! */
6}
7
8/* Z border-box */
9.box {
10 box-sizing: border-box;
11 width: 100%;
12 padding: 20px;
13 /* Rzeczywista szerokość: 100% (padding jest WEWNĄTRZ) */
14}To fundamentalna zasada - bez
border-box element o width: 100% z paddingiem będzie szerszy niż ekran!Zobaczmy jak zbudować responsywną sekcję strony bez użycia Flexboxa czy Grida:
1<section class="features">
2 <div class="container">
3 <h2>O Starożytnym Egipcie</h2>
4 <p>Cywilizacja egipska trwała ponad 3000 lat...</p>
5 </div>
6</section>1* {
2 box-sizing: border-box;
3}
4
5.features {
6 width: 100%; /* Sekcja na całą szerokość */
7 padding: 40px 20px; /* Wewnętrzne odstępy */
8 background-color: #F4E4C1;
9}
10
11.container {
12 width: 100%;
13 max-width: 1200px;
14 margin: 0 auto; /* Centrowanie */
15 padding: 0 20px; /* Boczne padding - treść nie przylega do krawędzi */
16}Siła wzorca kontenera polega na tym, że możesz go użyć wielokrotnie:
1<header class="hero">
2 <div class="container">
3 <h1>Piramida Cheopsa</h1>
4 </div>
5</header>
6
7<section class="about">
8 <div class="container">
9 <p>Informacje o piramidzie...</p>
10 </div>
11</section>
12
13<footer class="footer">
14 <div class="container">
15 <p>Stopka strony</p>
16 </div>
17</footer>Każda sekcja może mieć inny kolor tła na 100% szerokości, ale treść wewnątrz jest zawsze ograniczona przez kontener. Jeśli grafik zmieni projekt i trzeba poszerzyć układ z 1200px na 1440px - zmieniasz jedną wartość
max-width w klasie .container.Na urządzeniach mobilnych treść nie powinna przylegać do samej krawędzi ekranu. Dlatego dodajemy padding:
1.container {
2 width: 100%;
3 max-width: 1200px;
4 margin: 0 auto;
5 padding-left: 16px; /* Bezpieczna przestrzeń po lewej */
6 padding-right: 16px; /* Bezpieczna przestrzeń po prawej */
7}Na większych ekranach (tabletach) można zwiększyć ten padding za pomocą media queries:
1@media (min-width: 768px) {
2 .container {
3 padding-left: 32px;
4 padding-right: 32px;
5 }
6}Responsywny kontener to fundament każdej strony internetowej:
width: 100% - dopasowanie do małych ekranówmax-width - ograniczenie na dużych ekranachmargin: 0 auto - centrowaniebox-sizing: border-box - padding nie powiększa elementupadding - bezpieczna przestrzeń od krawędziWypróbuj ten wzorzec w edytorze poniżej: