@name, w arsenale egipskiego architekta znajdowaly sie rozne narzedzia - dluto do precyzyjnej rzezby i dzwignia do przenoszenia wielkich blokow. Podobnie w CSS masz dwa potezne systemy ukladu: CSS Grid i Flexbox. Kazdy z nich ma swoje mocne strony i idealne zastosowania. Nauczmy sie, kiedy siegnac po ktore narzedzie!
CSS Grid to system dwuwymiarowy - kontrolujesz jednoczesnie kolumny I wiersze. Uzyj go, gdy potrzebujesz pelnej kontroli nad ukladem w obu osiach:
1/* Grid: idealny do calych layoutow stron */
2.page-layout {
3 display: grid;
4 grid-template-areas:
5 "header header header"
6 "nav main aside"
7 "footer footer footer";
8 grid-template-columns: 200px 1fr 250px;
9 grid-template-rows: auto 1fr auto;
10 min-height: 100vh;
11}Flexbox to system jednowymiarowy - kontrolujesz uklad w jednym kierunku na raz (wiersz LUB kolumna). Uzyj go do ukladania elementow w linii:
1/* Flexbox: idealny do nawigacji */
2.navbar {
3 display: flex;
4 justify-content: space-between;
5 align-items: center;
6 padding: 1rem 2rem;
7}
8
9/* Flexbox: idealny do centrowania */
10.hero-section {
11 display: flex;
12 flex-direction: column;
13 justify-content: center;
14 align-items: center;
15 min-height: 400px;
16}Zobaczmy ten sam problem rozwiazany na oba sposoby:
1/* Flexbox - karty dostosowuja sie do contentu */
2.cards-flex {
3 display: flex;
4 gap: 20px;
5 flex-wrap: wrap;
6}
7
8.card-flex {
9 flex: 1 1 300px; /* Rosnie, kurczy sie, min 300px */
10}
11
12/* Grid - karty maja rowne rozmiary */
13.cards-grid {
14 display: grid;
15 grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
16 gap: 20px;
17}Roznica? W Flexbox karty moga miec rozne rozmiary jesli content jest rozny. W Grid kazda karta ma dokladnie taki sam rozmiar. Jesli chcesz rownomierna siatke - wybierz Grid. Jesli chcesz elastycznosc - Flexbox.
1/* Flexbox - naturalny wybor dla nav */
2.nav {
3 display: flex;
4 gap: 1rem;
5 align-items: center;
6}
7
8.nav-logo { margin-right: auto; } /* Logo po lewej, reszta po prawej */Dla nawigacji Flexbox jest zdecydowanie lepszym wyborem - elementy sa w jednej linii i latwo kontrolujesz ich rozlozenie.
Najlepsze rezultaty uzyskasz laczac oba systemy! Grid do glownego layoutu, Flexbox do komponentow wewnetrznych:
1/* Grid: glowna struktura strony */
2.page {
3 display: grid;
4 grid-template-areas:
5 "header"
6 "main"
7 "footer";
8 grid-template-rows: auto 1fr auto;
9 min-height: 100vh;
10}
11
12/* Flexbox: nawigacja w headerze */
13.header {
14 grid-area: header;
15 display: flex;
16 justify-content: space-between;
17 align-items: center;
18 padding: 1rem 2rem;
19}
20
21/* Grid: siatka kart w main */
22.main {
23 grid-area: main;
24 display: grid;
25 grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
26 gap: 1.5rem;
27 padding: 2rem;
28}
29
30/* Flexbox: zawartosc pojedynczej karty */
31.card {
32 display: flex;
33 flex-direction: column;
34}
35
36.card-body {
37 flex: 1; /* Wypelnia dostepna przestrzen */
38}
39
40.card-footer {
41 display: flex;
42 justify-content: space-between;
43 align-items: center;
44}
45
46/* Flexbox: stopka */
47.footer {
48 grid-area: footer;
49 display: flex;
50 justify-content: center;
51 gap: 2rem;
52 padding: 1rem;
53}Zastanow sie nad swoim zadaniem:
To jak wybor narzedzi w warsztacie architekta piramidy - dluto do detali (Flexbox), dzwignia do wielkich blokow (Grid). Razem tworza monumentalne budowle!