Svenska

Utforska CSS Subgrid och lär dig hur du skapar komplexa, responsiva och underhållbara nästlade layouter för modern webbdesign. Bemästra avancerade grid-tekniker.

CSS Subgrid: Släpp loss kraften i nästlade layouter

CSS Grid har revolutionerat webblayout och erbjuder oöverträffad flexibilitet och kontroll. Att hantera nästlade rutnät kan dock ibland bli besvärligt. Det är där CSS Subgrid kommer till undsättning. Subgrid tillåter ett grid-objekt att ärva spårstorleken från sitt överordnade rutnät, vilket förenklar komplexa layouter och gör din kod mer underhållbar. Denna artikel ger en omfattande guide för att förstå och implementera CSS Subgrid, komplett med praktiska exempel och insikter för utvecklare på alla nivåer.

Vad är CSS Subgrid?

Subgrid är en funktion i CSS Grid som gör det möjligt för ett grid-objekt att bli ett eget rutnät, som ärver de rad- och kolumnspår som definierats av dess överordnade rutnät. Detta innebär att du kan justera innehåll över flera nästlade rutnät utan att explicit definiera spårstorlekar i varje nästlat rutnät. Se det som ett sätt att utvidga det överordnade rutnätets struktur till dess barn, vilket skapar en mer sammanhängande och konsekvent layout.

Varför använda Subgrid?

Webbläsarkompatibilitet

Innan du dyker in i implementeringen är det viktigt att kontrollera webbläsarkompatibilitet. I slutet av 2023 har Subgrid bra stöd i moderna webbläsare inklusive Chrome, Firefox, Safari och Edge. Det är dock alltid en god praxis att använda Can I use för att verifiera den senaste supportstatusen.

Grundläggande implementering av Subgrid

Låt oss börja med ett enkelt exempel för att illustrera de grundläggande koncepten med Subgrid.

HTML-struktur

Först definierar vi den grundläggande HTML-strukturen för vårt rutnät.


<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>

CSS-styling

Nu ska vi definiera CSS:en för att skapa det överordnade rutnätet och subgridet inom .content-elementet.


.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;
}

/* Definiera placeringen av objekt inuti .content subgrid */
.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; }


I det här exemplet definieras elementet .content som ett subgrid. Egenskaperna grid-template-columns: subgrid; och grid-template-rows: subgrid; instruerar subgridet att ärva spårstorleken från det överordnade rutnätet. Innehållsområdet anpassar sig nu till spårstorleken som definierats i huvudrutnätet, utan att behöva några explicita inställningar för själva subgridet. Detta säkerställer perfekt justering mellan sidofältet och objekten inom innehållsområdet.

Avancerade Subgrid-tekniker

Att spänna över spår

Subgrid tillåter också objekt inom subgridet att spänna över flera spår, precis som i ett vanligt rutnät. Detta ger ännu mer flexibilitet för att skapa komplexa layouter.


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

Denna kod kommer att få .item-1 att spänna över de två första kolumnerna i subgridet.

Namngivna grid-linjer

Du kan använda namngivna grid-linjer med Subgrid för ännu större tydlighet och kontroll. Låt oss säga att du har namngivna linjer i ditt överordnade rutnät:


.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;
}

Du kan sedan referera till dessa namngivna linjer inom ditt subgrid:


.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;
}

Hantering av implicita spår

Om antalet grid-objekt överstiger antalet definierade spår i det överordnade rutnätet kommer Subgrid att skapa implicita spår. Du kan styra storleken på dessa implicita spår med egenskaperna grid-auto-rows och grid-auto-columns, liknande vanligt CSS Grid.

Praktiska exempel och användningsfall

Låt oss utforska några praktiska exempel på hur Subgrid kan användas för att skapa sofistikerade layouter.

Komplex produktlistning

Föreställ dig en produktlistning där du vill visa flera produktdetaljer (bild, namn, beskrivning, pris) på ett konsekvent och justerat sätt. Subgrid kan hjälpa till att uppnå detta enkelt.


<div class="product-grid">
  <div class="product">
    <img src="product1.jpg" alt="Produkt 1">
    <h3>Produktnamn 1</h3>
    <p>Beskrivning av produkt 1.</p>
    <span>$99.99</span>
  </div>
  <div class="product">
    <img src="product2.jpg" alt="Produkt 2">
    <h3>Produktnamn 2</h3>
    <p>Beskrivning av produkt 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;
}

I det här exemplet använder .product-elementen Subgrid för att justera bild, namn, beskrivning och pris konsekvent över alla produkter, även om deras innehållslängd varierar. Detta säkerställer en ren och professionell presentation.

Tidningslayout

Att skapa layouter i tidningsstil med varierande innehållsblock kan vara utmanande. Subgrid förenklar processen genom att låta dig justera element över olika delar av layouten.


<div class="magazine-layout">
  <div class="main-article">
    <h2>Huvudartikelns titel</h2>
    <p>Huvudartikelns innehåll...</p>
  </div>
  <div class="sidebar-article">
    <h3>Sidoartikelns titel</h3>
    <p>Sidoartikelns innehåll...</p>
  </div>
  <div class="featured-image">
    <img src="featured.jpg" alt="Utvald bild">
  </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;
}

I det här exemplet delar huvudartikeln, sidoartikeln och den utvalda bilden alla samma grid-struktur, vilket säkerställer konsekvent justering av titlar och innehåll över olika sektioner. Användningen av Subgrid förenklar CSS:en och gör layouten mer underhållbar.

Formulärlayouter

Att skapa komplexa formulärlayouter med justerade etiketter och inmatningsfält kan vara knepigt. Subgrid erbjuder en enkel lösning.


<form class="form-grid">
  <div class="form-row">
    <label for="name">Namn:</label>
    <input type="text" id="name" name="name">
  </div>
  <div class="form-row">
    <label for="email">E-post:</label>
    <input type="email" id="email" name="email">
  </div>
  <div class="form-row">
    <label for="message">Meddelande:</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; /* Definiera spårstorlekar i det överordnade rutnätet */
    gap: 10px;
}

Här använder .form-row-elementen Subgrid för att justera etiketterna och inmatningsfälten konsekvent över alla rader. Spårstorlekarna definieras i det överordnade rutnätet (.form-grid), vilket säkerställer ett enhetligt utseende.

Bästa praxis och överväganden

Subgrid vs. vanligt CSS Grid

Även om både Subgrid och CSS Grid är kraftfulla layoutverktyg, tjänar de olika syften. Vanligt CSS Grid är idealiskt för att skapa övergripande sidlayouter och definiera den grundläggande strukturen för ditt innehåll. Subgrid, å andra sidan, är bäst lämpat för att hantera nästlade layouter och justera innehåll över flera nivåer av nästling. Tänk på Subgrid som en förlängning av CSS Grid som förenklar komplexa layoutscenarier.

Felsökning av vanliga problem

Slutsats

CSS Subgrid är ett värdefullt tillskott till CSS Grid-verktygslådan och erbjuder ett kraftfullt sätt att hantera komplexa nästlade layouter och skapa visuellt tilltalande, underhållbara och responsiva webbdesigner. Genom att förstå de grundläggande koncepten och utforska praktiska exempel kan du utnyttja Subgrid för att bygga sofistikerade layouter som tidigare var svåra eller omöjliga att uppnå med traditionella CSS-tekniker. Omfamna Subgrid och lås upp nya möjligheter i dina webbutvecklingsprojekt. Subgrid låter dig verkligen utvidga kraften i CSS Grid till de nästlade elementen, vilket möjliggör större kontroll och kodunderhåll. Experimentera med det och utforska fördelarna med att förenkla komplicerade CSS-layouter.

Ytterligare resurser