CSS Grid i Flexbox w projektowaniu stron WWW

Spis treści:

CSS Grid i Flexbox to kluczowe technologie w dziedzinie projektowania stron internetowych, które rewolucjonizują sposób tworzenia układów stron. Pozwalają one na tworzenie responsywnych, elastycznych i złożonych układów bez konieczności stosowania dodatkowych bibliotek czy skomplikowanych hacków. W tym artykule przedstawię szczegółowe omówienie obu technologii, ich zastosowania, zalety, różnice oraz praktyczne przykłady użycia.

Wprowadzenie do CSS Grid

Czym jest CSS Grid?

CSS Grid Layout, znany również jako CSS Grid, to moduł CSS wprowadzony w specyfikacji CSS3. Umożliwia on tworzenie dwuwymiarowych układów stron internetowych, pozwalając na definiowanie zarówno wierszy, jak i kolumn. Dzięki CSS Grid projektanci mają pełną kontrolę nad pozycjonowaniem elementów na stronie WWW, co jest szczególnie przydatne w przypadku złożonych układów.

Podstawowe pojęcia CSS Grid

Grid Container: Element rodzic, na którym zastosowano display: grid;.

Grid Items: Bezpośrednie dzieci Grid Containera.

Grid Lines: Linie dzielące siatkę na komórki.

Grid Tracks: Wiersze i kolumny utworzone przez linie siatki.

Grid Cells: Pojedyncze komórki powstałe z przecięcia wiersza i kolumny.

Grid Areas: Obszary utworzone przez połączenie kilku komórek.

Zastosowania CSS Grid

Tworzenie złożonych układów stron: Ułatwia budowę skomplikowanych layoutów, takich jak portale informacyjne czy magazyny online.

Responsywne projektowanie: Pozwala na tworzenie układów, które dostosowują się do różnych rozmiarów ekranów bez konieczności stosowania wielu media queries.

Elastyczność w pozycjonowaniu: Umożliwia precyzyjne rozmieszczanie elementów za pomocą właściwości takich jak grid-template-areas, grid-template-columns czy grid-template-rows.

<div class="grid-container">
  <header>Header</header>
  <nav>Navigation</nav>
  <main>Main Content</main>
  <aside>Sidebar</aside>
  <footer>Footer</footer>
</div>
.grid-container {
  display: grid;
  grid-template-areas:
    'header header header'
    'nav main aside'
    'footer footer footer';
  grid-gap: 10px;
}

header { grid-area: header; }
nav { grid-area: nav; }
main { grid-area: main; }
aside { grid-area: aside; }
footer { grid-area: footer; }

Wprowadzenie do Flexbox

Czym jest Flexbox?

Flexible Box Layout Module, znany jako Flexbox, to moduł CSS umożliwiający tworzenie elastycznych układów jednowymiarowych. Wprowadzony w CSS3, Flexbox ułatwia rozmieszczanie i wyrównywanie elementów w kontenerze, niezależnie od ich rozmiaru i liczby.

Podstawowe pojęcia Flexbox

Flex Container: Element rodzic z właściwością display: flex;.

Flex Items: Bezpośrednie dzieci Flex Containera.

Main Axis: Główny kierunek osi (domyślnie poziomy).

Cross Axis: Kierunek prostopadły do osi głównej.

Zastosowania Flexbox

Tworzenie nawigacji: Idealny do tworzenia zarówno poziomych, jak i pionowych menu.

Wyrównywanie elementów: Ułatwia centrowanie i rozkładanie elementów w kontenerze.

Elastyczne układy: Pozwala na dynamiczne dostosowywanie elementów do dostępnej przestrzeni.

Przykład zastosowania Flexbox:

<div class="flex-container">
  <div class="item">Item 1</div>
  <div class="item">Item 2</div>
  <div class="item">Item 3</div>
</div>
.flex-container {
  display: flex;
  justify-content: space-around;
  align-items: center;
}

Porównanie CSS Grid i Flexbox

Różnice między CSS Grid a Flexbox

CechaCSS GridFlexbox
UkładDwuwymiarowy (wiersze i kolumny)Jednowymiarowy (wiersz lub kolumna)
Główne zastosowanieOgólna struktura stronyUkład wewnątrz komponentów
PozycjonowaniePrecyzyjne w siatceElastyczne wzdłuż osi
Oś głównaBrak (operuje w dwóch wymiarach)Wiersz lub kolumna
Wsparcie przeglądarek98% globalnego udziału98% globalnego udziału
Różnice między CSS Grid, a Flexbox

Kiedy używać CSS Grid?

• Gdy układ wymaga kontrolowania zarówno wierszy, jak i kolumn.

• Przy projektowaniu złożonych layoutów z wieloma sekcjami.

• Kiedy potrzebna jest precyzyjna kontrola nad rozmieszczeniem elementów.

Kiedy używać Flexbox?

• Gdy układ jest jednowymiarowy, np. menu nawigacyjne.

• Przy centrowaniu elementów w kontenerze.

• Kiedy potrzebna jest elastyczność w rozmieszczaniu elementów wzdłuż jednej osi.

Współpraca CSS Grid i Flexbox

CSS Grid i Flexbox mogą być używane razem w jednym projekcie. Na przykład, CSS Grid może być zastosowany do ogólnego układu strony internetowej, podczas gdy Flexbox może zarządzać układem wewnątrz poszczególnych sekcji.

Przykład integracji:

<div class="grid-container">
  <header>Header</header>
  <nav class="flex-nav">
    <a href="#">Link 1</a>
    <a href="#">Link 2</a>
    <a href="#">Link 3</a>
  </nav>
  <main>Main Content</main>
  <footer>Footer</footer>
</div>
.flex-nav {
  display: flex;
  justify-content: space-between;
}

Responsywność z CSS Grid i Flexbox

Automatyczne dostosowywanie układu

CSS Grid: Użycie funkcji takich jak repeat(auto-fit, minmax()) pozwala na automatyczne dostosowywanie liczby kolumn do szerokości ekranu.

Flexbox: Właściwość flex-wrap umożliwia zawijanie elementów do nowego wiersza, gdy brakuje miejsca.

Przykład responsywnego układu z CSS Grid:

.grid-container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  grid-gap: 20px;
}

Wsparcie przeglądarek

Obie technologie są szeroko wspierane przez nowoczesne przeglądarki.

PrzeglądarkaWsparcie dla FlexboxWsparcie dla CSS Grid
Chrome (od wersji 29)TakTak (od wersji 57)
Firefox (od wersji 28)TakTak (od wersji 52)
Safari (od wersji 9)TakTak (od wersji 10.1)
Edge (od wersji 12)TakTak (od wersji 16)
Internet Explorer 11Tak (częściowe)Nie
Wsparcie przeglądarek

Najlepsze praktyki

Używanie jednostek elastycznych

fr: Jednostka frakcyjna w CSS Grid pozwala na podział dostępnego miejsca proporcjonalnie.

Flex properties: Właściwości flex-grow, flex-shrink i flex-basis w Flexbox umożliwiają kontrolę nad wzrostem i kurczeniem się elementów.

Unikanie błędów

Hierarchia elementów: Upewnij się, że elementy gridowe i flexowe są bezpośrednimi dziećmi odpowiednich kontenerów.

Resetowanie stylów: Stosowanie resetów CSS lub normalizacji stylów może zapobiec nieoczekiwanym zachowaniom.

Narzędzia i zasoby

DevTools: Nowoczesne przeglądarki oferują narzędzia do wizualizacji siatek CSS Grid i osi Flexbox.

Generatorzy układów: Narzędzia online, takie jak CSS Grid Generator czy Flexbox Playground, ułatwiają tworzenie kodu.

Frameworki CSS: Biblioteki takie jak Bootstrap 5 i Tailwind CSS integrują funkcje CSS Grid i Flexbox.

Praktyczne przykłady

Galeria obrazów z CSS Grid

<div class="gallery">
  <img src="image1.jpg" alt="Obraz 1">
  <img src="image2.jpg" alt="Obraz 2">
  <img src="image3.jpg" alt="Obraz 3">
  <!-- Więcej obrazów -->
</div>
.gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  grid-gap: 10px;
}

Formularz z Flexbox:

<form class="flex-form">
  <label for="name">Imię:</label>
  <input type="text" id="name" name="name">
  <label for="email">Email:</label>
  <input type="email" id="email" name="email">
  <button type="submit">Wyślij</button>
</form>
.flex-form {
  display: flex;
  flex-direction: column;
  gap: 15px;
}

Dane statystyczne

Według raportu z 2022 roku (źródło: Stateodcss.com):

Flexbox jest używany na 80% stron internetowych.

CSS Grid zyskuje na popularności i jest stosowany na 60% nowych projektów.

Wsparcie przeglądarek dla obu technologii wynosi ponad 95%.

Jakie są zalety i wady CSS Grid i Flexbox?

Zalety CSS Grid

Elastyczność układu: Umożliwia tworzenie złożonych, dwuwymiarowych układów.

Czytelność kodu: Użycie nazwanych obszarów poprawia zrozumiałość kodu.

Oszczędność kodu: Redukuje potrzebę zagnieżdżania wielu elementów.

Wady CSS Grid

Wsparcie przeglądarek: Starsze przeglądarki mogą nie obsługiwać CSS Grid.

Krzywa uczenia się: Może być trudniejszy do opanowania dla początkujących.

Zalety Flexbox

Prostota: Łatwiejszy do nauki i implementacji.

Elastyczność osiowa: Umożliwia dynamiczne dostosowanie elementów wzdłuż osi głównej.

Wsparcie przeglądarek: Szerokie wsparcie, nawet w starszych przeglądarkach.

Wady Flexbox

Ograniczenia jednowymiarowe: Nie nadaje się do złożonych układów dwuwymiarowych.

Problemy z większą liczbą elementów: Zarządzanie dużą liczbą elementów może być trudniejsze.

Przyszłość CSS Grid i Flexbox

CSS Grid i Flexbox to technologie, które już teraz są standardam projektowaniu stron internetowych, a ich rozwój wciąż trwa, oferując jeszcze większe możliwości dla projektantów i deweloperów. Oto kilka trendów i kierunków, w których zmierzają te technologie.

CSS Grid Level 2 – Subgrid

Jednym z najważniejszych nowych elementów, które pojawiły się w CSS Grid Level 2, jest Subgrid. Subgrid pozwala elementom potomnym dziedziczyć układ siatki od elementu rodzica, co umożliwia bardziej spójne i elastyczne zarządzanie złożonymi układami. Subgrid eliminuje potrzebę wielokrotnego definiowania siatek dla różnych elementów na stronie, co znacząco upraszcza tworzenie bardziej złożonych układów.

Korzyści Subgrid:

• Lepsza kontrola nad wyrównaniem i rozmieszczeniem elementów potomnych w kontekście siatki nadrzędnej.

• Umożliwia synchronizację układu elementów w złożonych komponentach, takich jak nagłówki i treść w różnych sekcjach strony.

Przykład zastosowania Subgrid:

.container {
  display: grid;
  grid-template-columns: 1fr 2fr;
}

.header, .main, .footer {
  display: subgrid;
  grid-template-rows: auto;
}

Flexbox – dalsze optymalizacje i nowe funkcje

Flexbox jako jednowymiarowy system układu osiągnął stabilność i popularność, ale wciąż istnieje potencjał na dalsze ulepszenia i optymalizacje. Jednym z obszarów, który może się rozwijać, jest lepsza kontrola przestrzeni między elementami, szczególnie w kontekście dynamicznie zmieniającej się treści, oraz integracja Flexboxa z innymi systemami układu, takimi jak CSS Grid.

Dodatkowe funkcje, które mogą zostać wprowadzone:

Flexbox w trybie wielu osi: Chociaż Flexbox działa w jednym wymiarze, przyszłe iteracje mogą wprowadzić możliwość pracy na dwóch osiach, co zwiększyłoby jego elastyczność.

Lepsza współpraca z Gridem: Możemy spodziewać się dalszej integracji obu technologii, co pozwoli na automatyczne rozpoznawanie przez przeglądarki najlepszej technologii do zarządzania danym układem.

Rozwój wsparcia dla przeglądarek

Obie technologie mają już szerokie wsparcie w nowoczesnych przeglądarkach. Jednak przyszłość może przynieść dalsze optymalizacje wydajności w renderowaniu układów. Możemy również oczekiwać pełniejszej zgodności z nowymi funkcjami, jak Subgrid, nawet w przeglądarkach, które obecnie jeszcze nie obsługują tych możliwości (np. starsze wersje Safari).

Udoskonalone narzędzia do projektowania

Wraz z rozwojem CSS Grid i Flexbox, narzędzia deweloperskie przeglądarek stają się coraz bardziej zaawansowane. Obecnie narzędzia takie jak Chrome DevTools i Firefox DevTools oferują wizualne narzędzia do pracy z Gridem i Flexboxem, ułatwiające projektowanie i debugowanie układów.

Przyszłość może przynieść:

Lepsze narzędzia wizualne: Więcej interaktywnych narzędzi do edytowania układów bezpośrednio w przeglądarce.

Lepsze wsparcie dla Subgrid: Przeglądarki będą integrować wsparcie dla Subgrid w narzędziach deweloperskich, co ułatwi projektowanie bardziej złożonych układów.

Integracja z narzędziami low-code i no-code

Z biegiem czasu możemy spodziewać się lepszej integracji CSS Grid i Flexbox w narzędziach do tworzenia stron internetowych typu low-code i no-code. Te technologie już teraz są wykorzystywane w popularnych narzędziach do tworzenia stron, takich jak Webflow czy Elementor, ale ich zastosowanie może stać się jeszcze bardziej intuicyjne i zaawansowane.

Przyszłe kierunki rozwoju to:

Automatyczne układy: Algorytmy oparte na sztucznej inteligencji mogą tworzyć optymalne układy stron na podstawie wprowadzonej treści, automatycznie wykorzystując Flexbox i CSS Grid.

Zwiększona elastyczność dla użytkowników bez wiedzy technicznej: Narzędzia typu drag-and-drop będą wykorzystywać możliwości CSS Grid i Flexbox w bardziej przejrzysty i intuicyjny sposób.

Ewolucja standardów CSS

Organizacje takie jak W3C i WHATWG stale pracują nad nowymi standardami, które będą kontynuować rozwój CSS Grid i Flexbox. Nadchodzące specyfikacje mogą wprowadzić bardziej zaawansowane właściwości układów, takie jak lepsza kontrola nad siatkami, nowe typy jednostek i bardziej elastyczne modele układu, co poszerzy możliwości projektowania stron internetowych.

Wskazówki dotyczące optymalizacji

Optymalizacja układów przy użyciu CSS Grid i Flexbox jest kluczowa dla zapewnienia wydajności, responsywności oraz łatwej konserwacji kodu. Poniżej znajduje się 9 praktycznych wskazówek, które pomogą efektywnie wykorzystać te technologie i zminimalizować ewentualne problemy.

1. Używaj CSS Grid do złożonych układów, Flexbox do elementów jednowymiarowych

Jedną z najczęstszych pułapek jest używanie Flexboxa do złożonych układów stron, które bardziej pasują do CSS Grid. Flexbox działa najlepiej w przypadku jednowymiarowych układów (poziomych lub pionowych), takich jak nawigacje, listy lub grupy przycisków. Z kolei CSS Grid jest optymalnym wyborem do układów dwuwymiarowych, takich jak siatki zawierające wiele wierszy i kolumn.

Przykład:

• Flexbox: Tworzenie prostego menu nawigacyjnego.

• CSS Grid: Projektowanie głównej siatki strony z nagłówkiem, stopką i treścią podzieloną na sekcje.

2. Używaj jednostek elastycznych z rozwagą

Jednostki elastyczne, takie jak fr w CSS Grid i flex-grow, flex-shrink oraz flex-basis w Flexbox, są niezwykle przydatne do tworzenia responsywnych układów. Jednak zbyt częste używanie jednostek elastycznych bez jasnej struktury może prowadzić do trudności w utrzymaniu spójności układu, zwłaszcza przy różnorodnych rozdzielczościach ekranu.

Dobre praktyki:

• Używaj jednostki fr w CSS Grid tylko tam, gdzie elementy muszą wypełnić pozostałą przestrzeń proporcjonalnie.

• Dla Flexboxa stosuj właściwości flex-grow i flex-shrink, aby kontrolować elastyczność elementów tylko wtedy, gdy to konieczne, zamiast opierać cały układ na elastycznym rozciąganiu.

Przykład w CSS Grid:

.container {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
}

3. Minimalizuj zagnieżdżenia

Zbyt głębokie zagnieżdżanie elementów za pomocą Flexboxa lub CSS Grid może prowadzić do nieczytelności kodu i problemów z wydajnością. Stosowanie zbyt wielu poziomów zagnieżdżenia (np. tworzenie siatek wewnątrz siatek) jest trudniejsze do debugowania i modyfikowania. Staraj się minimalizować liczbę warstw układu i korzystaj z Subgrid, jeśli to możliwe.

Optymalizacja:

Unikaj tworzenia złożonych układów poprzez gniazdowanie Flexboxa we Flexboxie. Zamiast tego podziel układ na logiczne komponenty.

• W CSS Grid korzystaj z Subgrid, aby unikać wielokrotnego definiowania siatek w zagnieżdżonych elementach.

4. Korzystaj z funkcji automatycznych (Auto-fit, Auto-fill)

CSS Grid oferuje funkcje takie jak auto-fit i auto-fill, które automatycznie dopasowują liczbę kolumn do dostępnej przestrzeni. Jest to szczególnie przydatne w responsywnych siatkach, gdzie liczba elementów w wierszu może dynamicznie się zmieniać w zależności od rozmiaru ekranu.

Auto-fit: Dopasowuje ilość kolumn, automatycznie rozciągając je do pełnej szerokości dostępnej przestrzeni.

Auto-fill: Działa podobnie jak auto-fit, ale wypełnia przestrzeń pustymi kolumnami, gdy nie ma wystarczającej liczby elementów.

Przykład w CSS Grid:

.grid-container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}

5. Testuj układy na różnych urządzeniach i przeglądarkach

Responsywność i zgodność z różnymi przeglądarkami są kluczowe. Upewnij się, że regularnie testujesz swoje układy na różnych urządzeniach (np. smartfony, tablety, laptopy) i przeglądarkach (Chrome, Firefox, Safari, Edge). Narzędzia takie jak BrowserStack lub Lighthouse w Google Chrome mogą być użyteczne do automatycznego testowania.

Dobre praktyki:

• Testuj układy na wielu rozdzielczościach (np. 320px, 768px, 1024px).

• Korzystaj z narzędzi deweloperskich w przeglądarkach, aby symulować różne rozmiary ekranów.

6. Korzystaj z Media Queries dla lepszej kontroli nad responsywnością

Chociaż CSS Grid i Flexbox oferują wbudowane mechanizmy responsywne, stosowanie media queries może dostarczyć większą kontrolę nad układami dla konkretnych szerokości ekranów. Możesz dostosować liczbę kolumn, sposób rozmieszczania elementów lub ich rozmiary w zależności od szerokości ekranu.

Przykład użycia Media Queries z CSS Grid:

.grid-container {
  display: grid;
  grid-template-columns: 1fr 1fr;
}

@media (max-width: 768px) {
  .grid-container {
    grid-template-columns: 1fr;
  }
}

7. Unikaj nadmiernego użycia floatów i przestarzałych metod układu

Technologie takie jak CSS Grid i Flexbox eliminują potrzebę stosowania starszych metod układu, takich jak floats czy inline-block. Stosowanie floatów do rozmieszczania elementów może prowadzić do problemów z responsywnością i zarządzaniem układem, a także komplikować kod.

Optymalizacja:

• Zastąp wszystkie układy oparte na floatach CSS Gridem lub Flexboxem, aby uprościć kod i zapewnić lepszą elastyczność.

8. Stosuj semantyczne elementy HTML

Wraz z CSS Grid i Flexbox możesz używać semantycznych znaczników HTML, takich jak <header>, <nav>, <main>, <article>, <footer>. Dzięki temu kod stanie się bardziej czytelny i zrozumiały, a układ strony będzie łatwiejszy do zarządzania.

Zalety semantycznych elementów:

• Ułatwiają SEO (Search Engine Optimization).

• Zwiększają dostępność stron internetowych dla użytkowników korzystających z czytników ekranu.

• Poprawiają czytelność i strukturę kodu.

9. Redukuj liczbę media queries

Zamiast stosować nadmiarowe media queries, staraj się projektować układy elastyczne od początku. CSS Grid i Flexbox oferują wiele wbudowanych właściwości, które automatycznie dostosowują układy do rozmiarów ekranu. Media queries powinny być używane tylko wtedy, gdy wymagane są znaczące zmiany w układzie.

Przykład minimalizacji media queries:

• Zamiast tworzyć oddzielne układy dla każdej szerokości ekranu, użyj właściwości elastycznych, takich jak minmax(), fr w CSS Grid i flex-wrap w Flexboxie.

10. Korzystaj z narzędzi do debugowania układów

Większość nowoczesnych przeglądarek oferuje narzędzia deweloperskie do wizualizacji układów tworzonych za pomocą CSS Grid i Flexbox. Warto z nich korzystać, aby szybko diagnozować problemy z rozmieszczeniem elementów.

Podsumowanie

CSS Grid i Flexbox to nieodzowne narzędzia w nowoczesnym projektowaniu stron WWW, oferujące ogromną elastyczność i precyzję w tworzeniu responsywnych układów stron internetowych. CSS Grid idealnie sprawdza się w zarządzaniu złożonymi, dwuwymiarowymi układami, podczas gdy Flexbox zapewnia łatwość w rozmieszczaniu i centrowaniu elementów w układach jednowymiarowych. Obie technologie są szeroko wspierane przez współczesne przeglądarki i mogą być stosowane w połączeniu, co pozwala na osiągnięcie optymalnych rezultatów.

W przyszłości możemy spodziewać się dalszego rozwoju tych technologii, w tym wprowadzenia nowych funkcji, takich jak Subgrid w CSS Grid, oraz integracji z narzędziami typu low-code i no-code, co pozwoli na jeszcze łatwiejsze tworzenie dynamicznych i responsywnych układów. Kluczowe jest także korzystanie z najlepszych praktyk, takich jak odpowiednie stosowanie jednostek elastycznych, unikanie nadmiernego zagnieżdżania elementów oraz testowanie układów na różnych urządzeniach.

Opanowanie CSS Grid i Flexbox oraz świadome ich wykorzystywanie w projektach to podstawa nowoczesnego projektowania stron internetowych, które są atrakcyjne wizualnie i funkcjonalne. Dzięki tym technologiom projektanci stron WWW mają pełną kontrolę nad układem stron, co przekłada się na lepsze doświadczenia użytkowników i bardziej efektywną pracę nad projektami webowymi.

Najczęściej zadawane pytania

Czy mogę używać CSS Grid i Flexbox w jednym projekcie?

Tak, CSS Grid i Flexbox są komplementarne i często używane razem w projektach. CSS Grid może służyć do tworzenia głównej struktury strony, podczas gdy Flexbox jest idealny do zarządzania układami wewnątrz komponentów.

Jakie są główne różnice między CSS Grid a Flexbox?

CSS Grid to system dwuwymiarowy (wiersze i kolumny), który jest odpowiedni do złożonych układów stron. Flexbox jest systemem jednowymiarowym (wiersz lub kolumna), który sprawdza się najlepiej w zarządzaniu elastycznymi układami w ramach pojedynczych elementów.

Jakie narzędzia mogą pomóc w nauce CSS Grid i Flexbox?

Do nauki i wizualizacji układów możesz używać narzędzi takich jak CSS Grid Generator i Flexbox Playground. Ponadto nowoczesne przeglądarki, takie jak Chrome i Firefox, oferują narzędzia deweloperskie do debugowania i testowania układów.

Która technologia jest bardziej odpowiednia do budowy responsywnych układów?

Obie technologie wspierają responsywność, ale CSS Grid daje większą elastyczność w zarządzaniu złożonymi układami. Flexbox jest natomiast bardziej intuicyjny w zarządzaniu prostszymi, jednowymiarowymi elementami.

Czy Flexbox automatycznie rozciąga elementy w ramach dostępnej przestrzeni?

Tak, Flexbox może automatycznie rozciągać lub kurczyć elementy, aby wypełnić dostępną przestrzeń za pomocą właściwości takich jak flex-grow, flex-shrink i flex-basis.

Czy mogę używać Flexboxa do centrowania elementów?

Tak, Flexbox jest świetnym narzędziem do centrowania elementów zarówno w pionie, jak i w poziomie. Można to osiągnąć za pomocą właściwości justify-content i align-items.