Polski

Odkryj CSS Subgrid i naucz się tworzyć złożone, responsywne i łatwe w utrzymaniu zagnieżdżone układy dla nowoczesnego web designu. Opanuj zaawansowane techniki siatki.

CSS Subgrid: Wykorzystaj Potencjał Zagnieżdżonych Układów

CSS Grid zrewolucjonizował układy stron internetowych, oferując niezrównaną elastyczność i kontrolę. Jednak zarządzanie zagnieżdżonymi siatkami może czasami stać się kłopotliwe. Właśnie tutaj z pomocą przychodzi CSS Subgrid. Subgrid pozwala elementowi siatki dziedziczyć rozmiary ścieżek siatki nadrzędnej, upraszczając złożone układy i czyniąc kod łatwiejszym w utrzymaniu. Ten artykuł stanowi kompleksowy przewodnik po zrozumieniu i implementacji CSS Subgrid, wraz z praktycznymi przykładami i wskazówkami dla deweloperów na każdym poziomie zaawansowania.

Czym jest CSS Subgrid?

Subgrid to funkcja CSS Grid, która umożliwia elementowi siatki stanie się siatką samą w sobie, dziedzicząc ścieżki wierszy i kolumn zdefiniowane przez siatkę nadrzędną. Oznacza to, że można wyrównywać zawartość w wielu zagnieżdżonych siatkach bez jawnego definiowania rozmiarów ścieżek w każdej zagnieżdżonej siatce. Pomyśl o tym jak o sposobie na rozszerzenie struktury siatki nadrzędnej na jej elementy potomne, tworząc bardziej spójny i konsekwentny układ.

Dlaczego warto używać Subgrid?

Kompatybilność z przeglądarkami

Przed przystąpieniem do implementacji, kluczowe jest sprawdzenie kompatybilności z przeglądarkami. Pod koniec 2023 roku Subgrid cieszy się dobrym wsparciem w nowoczesnych przeglądarkach, w tym w Chrome, Firefox, Safari i Edge. Jednak zawsze dobrą praktyką jest korzystanie z Can I use, aby zweryfikować najnowszy status wsparcia.

Podstawowa implementacja Subgrid

Zacznijmy od prostego przykładu, aby zilustrować podstawowe koncepcje Subgrid.

Struktura HTML

Najpierw zdefiniujmy podstawową strukturę HTML dla naszej siatki.


<div class="container">
  <div class="header">Header</div>
  <div class="sidebar">Sidebar</div>
  <div class="content">
    <div class="item-1">Item 1</div>
    <div class="item-2">Item 2</div>
    <div class="item-3">Item 3</div>
    <div class="item-4">Item 4</div>
  </div>
  <div class="footer">Footer</div>
</div>

Stylizacja CSS

Teraz zdefiniujmy CSS, aby stworzyć siatkę nadrzędną i podsiatkę wewnątrz elementu .content.


.container {
  display: grid;
  grid-template-columns: 200px 1fr;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header header"
    "sidebar content"
    "footer footer";
  height: 100vh;
}

.header {
  grid-area: header;
  background-color: #eee;
  padding: 10px;
}

.sidebar {
  grid-area: sidebar;
  background-color: #ddd;
  padding: 10px;
}

.content {
  grid-area: content;
  display: grid;
  grid-template-columns: subgrid;
  grid-template-rows: subgrid;
  background-color: #ccc;
  padding: 10px;
}

.item-1, .item-2, .item-3, .item-4 {
  background-color: #bbb;
  padding: 10px;
}

.footer {
  grid-area: footer;
  background-color: #eee;
  padding: 10px;
}

/* Zdefiniuj rozmieszczenie elementów wewnątrz podsiatki .content */
.content {
    grid-template-columns: subgrid;
    grid-template-rows: subgrid;
    display: grid;
}

.item-1 { grid-column: 1; grid-row: 1; }
.item-2 { grid-column: 2; grid-row: 1; }
.item-3 { grid-column: 1; grid-row: 2; }
.item-4 { grid-column: 2; grid-row: 2; }


W tym przykładzie element .content jest zdefiniowany jako podsiatka. Właściwości grid-template-columns: subgrid; i grid-template-rows: subgrid; instruują podsiatkę, aby dziedziczyła rozmiary ścieżek z siatki nadrzędnej. Obszar treści dostosowuje się teraz do rozmiarów ścieżek zdefiniowanych w głównej siatce kontenera, bez potrzeby jawnych ustawień dla samej podsiatki. Zapewnia to idealne wyrównanie między paskiem bocznym a elementami wewnątrz obszaru treści.

Zaawansowane techniki Subgrid

Rozciąganie na ścieżki

Subgrid pozwala również elementom wewnątrz podsiatki rozciągać się na wiele ścieżek, tak jak w zwykłej siatce. Zapewnia to jeszcze większą elastyczność w tworzeniu złożonych układów.


.item-1 {
  grid-column: 1 / span 2;
  grid-row: 1;
}

Ten kod sprawi, że .item-1 rozciągnie się na pierwsze dwie kolumny podsiatki.

Nazwane linie siatki

Możesz używać nazwanych linii siatki z Subgrid dla jeszcze większej przejrzystości i kontroli. Załóżmy, że masz nazwane linie w siatce nadrzędnej:


.container {
  display: grid;
  grid-template-columns: [sidebar-start] 200px [sidebar-end content-start] 1fr [content-end];
  grid-template-rows: [header-start] auto [header-end content-start] 1fr [content-end footer-start] auto [footer-end];
  grid-template-areas:
    "header header"
    "sidebar content"
    "footer footer";
  height: 100vh;
}

Możesz następnie odwoływać się do tych nazwanych linii wewnątrz swojej podsiatki:


.content {
  grid-area: content;
  display: grid;
  grid-template-columns: subgrid;
  grid-template-rows: subgrid;
}

.item-1 {
  grid-column: content-start / content-end;
  grid-row: content-start;
}

Obsługa niejawnych ścieżek

Jeśli liczba elementów siatki przekracza liczbę zdefiniowanych ścieżek w siatce nadrzędnej, Subgrid utworzy niejawne ścieżki. Możesz kontrolować rozmiar tych niejawnych ścieżek za pomocą właściwości grid-auto-rows i grid-auto-columns, podobnie jak w zwykłym CSS Grid.

Praktyczne przykłady i przypadki użycia

Przyjrzyjmy się kilku praktycznym przykładom, jak Subgrid może być używany do tworzenia zaawansowanych układów.

Złożona lista produktów

Wyobraź sobie listę produktów, na której chcesz wyświetlić wiele szczegółów produktu (zdjęcie, nazwę, opis, cenę) w spójny i wyrównany sposób. Subgrid może pomóc to łatwo osiągnąć.


<div class="product-grid">
  <div class="product">
    <img src="product1.jpg" alt="Produkt 1">
    <h3>Nazwa produktu 1</h3>
    <p>Opis produktu 1.</p>
    <span>$99.99</span>
  </div>
  <div class="product">
    <img src="product2.jpg" alt="Produkt 2">
    <h3>Nazwa produktu 2</h3>
    <p>Opis produktu 2.</p>
    <span>$129.99</span>
  </div>
</div>

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

.product {
  display: grid;
  grid-template-columns: subgrid;
  grid-template-rows: subgrid;
  border: 1px solid #ccc;
  padding: 10px;
}

.product > img {
  grid-column: 1;
  grid-row: 1;
  width: 100%;
  height: auto;
}

.product > h3 {
  grid-column: 1;
  grid-row: 2;
  margin-top: 10px;
}

.product > p {
  grid-column: 1;
  grid-row: 3;
  margin-top: 5px;
}

.product > span {
  grid-column: 1;
  grid-row: 4;
  margin-top: 10px;
  font-weight: bold;
}

W tym przykładzie elementy .product używają Subgrid do spójnego wyrównania zdjęcia, nazwy, opisu i ceny we wszystkich produktach, nawet jeśli długość ich treści jest różna. Zapewnia to czystą i profesjonalną prezentację.

Układ magazynowy

Tworzenie układów w stylu magazynowym z różnymi blokami treści może być wyzwaniem. Subgrid upraszcza ten proces, pozwalając na wyrównanie elementów w różnych sekcjach układu.


<div class="magazine-layout">
  <div class="main-article">
    <h2>Tytuł głównego artykułu</h2>
    <p>Treść głównego artykułu...</p>
  </div>
  <div class="sidebar-article">
    <h3>Tytuł artykułu na pasku bocznym</h3>
    <p>Treść artykułu na pasku bocznym...</p>
  </div>
  <div class="featured-image">
    <img src="featured.jpg" alt="Wyróżnione zdjęcie">
  </div>
</div>

.magazine-layout {
  display: grid;
  grid-template-columns: 2fr 1fr;
  grid-template-rows: auto 1fr auto;
  gap: 20px;
}

.main-article {
  grid-column: 1;
  grid-row: 1 / span 2;
  border: 1px solid #ccc;
  padding: 10px;
}

.sidebar-article {
  grid-column: 2;
  grid-row: 1;
  border: 1px solid #ccc;
  padding: 10px;
}

.featured-image {
  grid-column: 2;
  grid-row: 2;
  border: 1px solid #ccc;
  padding: 10px;
}

.magazine-layout > div {
    display: grid;
    grid-template-columns: subgrid;
    grid-template-rows: subgrid;
}

.magazine-layout h2, .magazine-layout h3 {
    grid-column: 1;
    grid-row: 1;
}

.magazine-layout p {
    grid-column: 1;
    grid-row: 2;
}

.magazine-layout img {
    grid-column: 1;
    grid-row: 1;
}

W tym przykładzie główny artykuł, artykuł na pasku bocznym i wyróżnione zdjęcie współdzielą tę samą strukturę siatki, zapewniając spójne wyrównanie tytułów i treści w różnych sekcjach. Użycie Subgrid upraszcza CSS i sprawia, że układ jest łatwiejszy w utrzymaniu.

Układy formularzy

Tworzenie złożonych układów formularzy z wyrównanymi etykietami i polami wejściowymi może być trudne. Subgrid dostarcza prostego rozwiązania.


<form class="form-grid">
  <div class="form-row">
    <label for="name">Imię i nazwisko:</label>
    <input type="text" id="name" name="name">
  </div>
  <div class="form-row">
    <label for="email">Email:</label>
    <input type="email" id="email" name="email">
  </div>
  <div class="form-row">
    <label for="message">Wiadomość:</label>
    <textarea id="message" name="message"></textarea>
  </div>
</form>

.form-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 10px;
}

.form-row {
  display: grid;
  grid-template-columns: subgrid;
  grid-template-rows: subgrid;
}

.form-row label {
  grid-column: 1;
  grid-row: 1;
  text-align: right;
  padding-right: 10px;
}

.form-row input, .form-row textarea {
  grid-column: 2;
  grid-row: 1;
  width: 100%;
}


.form-grid {
    display: grid;
    grid-template-columns: 150px 1fr; /* Zdefiniuj rozmiary ścieżek w siatce nadrzędnej */
    gap: 10px;
}

W tym przypadku elementy .form-row używają Subgrid do spójnego wyrównania etykiet i pól wejściowych we wszystkich wierszach. Rozmiary ścieżek są zdefiniowane w siatce nadrzędnej (.form-grid), co zapewnia jednolity wygląd.

Najlepsze praktyki i uwagi

Subgrid a zwykły CSS Grid

Chociaż zarówno Subgrid, jak i CSS Grid są potężnymi narzędziami do tworzenia układów, służą różnym celom. Zwykły CSS Grid jest idealny do tworzenia ogólnych układów stron i definiowania podstawowej struktury treści. Subgrid, z drugiej strony, najlepiej nadaje się do zarządzania zagnieżdżonymi układami i wyrównywania treści na wielu poziomach zagnieżdżenia. Pomyśl o Subgrid jako o rozszerzeniu CSS Grid, które upraszcza złożone scenariusze układów.

Rozwiązywanie typowych problemów

Podsumowanie

CSS Subgrid to cenne uzupełnienie zestawu narzędzi CSS Grid, oferujące potężny sposób zarządzania złożonymi zagnieżdżonymi układami i tworzenia atrakcyjnych wizualnie, łatwych w utrzymaniu i responsywnych projektów internetowych. Poprzez zrozumienie podstawowych koncepcji i zapoznanie się z praktycznymi przykładami, możesz wykorzystać Subgrid do budowania zaawansowanych układów, które wcześniej były trudne lub niemożliwe do osiągnięcia za pomocą tradycyjnych technik CSS. Otwórz się na Subgrid i odblokuj nowe możliwości w swoich projektach web developmentowych. Subgrid pozwala prawdziwie rozszerzyć moc siatki CSS na zagnieżdżone elementy, umożliwiając większą kontrolę i łatwość utrzymania kodu. Eksperymentuj z nim i odkryj zalety upraszczania skomplikowanych układów CSS.

Dalsze zasoby