Suomi

Tutustu CSS Subgridiin ja opi luomaan monimutkaisia, responsiivisia ja ylläpidettäviä sisäkkäisiä asetteluja moderniin web-suunnitteluun. Hallitse edistyneet grid-tekniikat.

CSS Subgrid: Vapauta sisäkkäisten asettelujen teho

CSS Grid on mullistanut web-asettelun tarjoten ennennäkemätöntä joustavuutta ja hallintaa. Sisäkkäisten gridien hallinnasta voi kuitenkin joskus tulla hankalaa. Tässä kohtaa CSS Subgrid tulee apuun. Subgrid antaa grid-elementin periä päägridinsä raitojen koon, mikä yksinkertaistaa monimutkaisia asetteluja ja tekee koodistasi helpommin ylläpidettävää. Tämä artikkeli tarjoaa kattavan oppaan CSS Subgridin ymmärtämiseen ja toteuttamiseen, täydennettynä käytännön esimerkeillä ja oivalluksilla kaiken tasoisille kehittäjille.

Mitä on CSS Subgrid?

Subgrid on CSS Gridin ominaisuus, joka mahdollistaa grid-elementin muuttumisen itsekin gridiksi, periäen sen päägridin määrittelemät rivi- ja sarakeraidat. Tämä tarkoittaa, että voit tasata sisältöä useiden sisäkkäisten gridien välillä ilman, että sinun tarvitsee erikseen määritellä raitojen kokoja jokaisessa sisäkkäisessä gridissä. Ajattele sitä tapana laajentaa päägridin rakenne sen lapsielementteihin, luoden yhtenäisemmän ja johdonmukaisemman asettelun.

Miksi käyttää Subgridiä?

Selainyhteensopivuus

Ennen toteutukseen sukeltamista on tärkeää tarkistaa selainyhteensopivuus. Vuoden 2023 loppupuolella Subgridillä on hyvä tuki moderneissa selaimissa, kuten Chromessa, Firefoxissa, Safarissa ja Edgessä. On kuitenkin aina hyvä käytäntö käyttää Can I use -sivustoa uusimman tukitilanteen tarkistamiseen.

Subgridin perusteet

Aloitetaan yksinkertaisella esimerkillä havainnollistamaan Subgridin peruskäsitteitä.

HTML-rakenne

Määritellään ensin gridin perus-HTML-rakenne.


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

Nyt määritellään CSS, jolla luodaan päägrid ja subgrid .content-elementin sisään.


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

/* Määritellään .content-aligridin sisällä olevien elementtien sijoittelu */
.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; }


Tässä esimerkissä .content-elementti on määritelty subgridiksi. Ominaisuudet grid-template-columns: subgrid; ja grid-template-rows: subgrid; ohjeistavat subgridiä perimään raitojen koon päägridiltä. Sisältöalue noudattaa nyt pääsäiliön gridissä määriteltyä raitojen kokoa ilman, että subgridille itselleen tarvitaan erillisiä asetuksia. Tämä varmistaa täydellisen tasauksen sivupalkin ja sisältöalueen elementtien välillä.

Edistyneet Subgrid-tekniikat

Usean raiteen kattaminen

Subgrid mahdollistaa myös subgridin sisällä olevien elementtien venyttämisen usean raiteen yli, aivan kuten tavallisessa gridissä. Tämä tarjoaa entistä enemmän joustavuutta monimutkaisten asettelujen luomiseen.


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

Tämä koodi saa .item-1-elementin venymään subgridin kahden ensimmäisen sarakkeen yli.

Nimettyt grid-viivat

Voit käyttää nimettyjä grid-viivoja Subgridin kanssa saadaksesi vieläkin enemmän selkeyttä ja hallintaa. Oletetaan, että päägridissäsi on nimetyt viivat:


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

Voit sitten viitata näihin nimettyihin viivoihin subgridissäsi:


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

Implisiittisten raitojen käsittely

Jos grid-elementtien määrä ylittää päägridissä määriteltyjen raitojen määrän, Subgrid luo implisiittisiä raitoja. Voit hallita näiden implisiittisten raitojen kokoa käyttämällä grid-auto-rows- ja grid-auto-columns-ominaisuuksia, samoin kuin tavallisessa CSS Gridissä.

Käytännön esimerkkejä ja käyttötapauksia

Tutkitaan joitakin käytännön esimerkkejä siitä, miten Subgridiä voidaan käyttää hienostuneiden asettelujen luomiseen.

Monimutkainen tuotelistaus

Kuvittele tuotelistaus, jossa haluat näyttää useita tuotetietoja (kuva, nimi, kuvaus, hinta) johdonmukaisesti ja tasatusti. Subgrid auttaa saavuttamaan tämän helposti.


<div class="product-grid">
  <div class="product">
    <img src="product1.jpg" alt="Product 1">
    <h3>Tuotteen nimi 1</h3>
    <p>Tuotteen 1 kuvaus.</p>
    <span>99,99 €</span>
  </div>
  <div class="product">
    <img src="product2.jpg" alt="Product 2">
    <h3>Tuotteen nimi 2</h3>
    <p>Tuotteen 2 kuvaus.</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;
}

Tässä esimerkissä .product-elementit käyttävät Subgridiä tasatakseen kuvan, nimen, kuvauksen ja hinnan johdonmukaisesti kaikkien tuotteiden välillä, vaikka niiden sisällön pituus vaihtelisikin. Tämä takaa siistin ja ammattimaisen esitystavan.

Lehtiasettelu

Lehtityylisten asettelujen luominen vaihtelevilla sisältölohkoilla voi olla haastavaa. Subgrid yksinkertaistaa prosessia sallimalla elementtien tasaamisen asettelun eri osien välillä.


<div class="magazine-layout">
  <div class="main-article">
    <h2>Pääartikkelin otsikko</h2>
    <p>Pääartikkelin sisältö...</p>
  </div>
  <div class="sidebar-article">
    <h3>Sivu-artikkelin otsikko</h3>
    <p>Sivu-artikkelin sisältö...</p>
  </div>
  <div class="featured-image">
    <img src="featured.jpg" alt="Esittelykuva">
  </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;
}

Tässä esimerkissä pääartikkeli, sivu-artikkeli ja esittelykuva jakavat saman grid-rakenteen, mikä takaa otsikoiden ja sisällön johdonmukaisen tasauksen eri osioiden välillä. Subgridin käyttö yksinkertaistaa CSS:ää ja tekee asettelusta helpommin ylläpidettävän.

Lomakeasettelut

Monimutkaisten lomakeasettelujen luominen tasatuilla otsikoilla ja syöttökentillä voi olla hankalaa. Subgrid tarjoaa suoraviivaisen ratkaisun.


<form class="form-grid">
  <div class="form-row">
    <label for="name">Nimi:</label>
    <input type="text" id="name" name="name">
  </div>
  <div class="form-row">
    <label for="email">Sähköposti:</label>
    <input type="email" id="email" name="email">
  </div>
  <div class="form-row">
    <label for="message">Viesti:</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; /* Määritellään raitojen koot päägridissä */
    gap: 10px;
}

Tässä .form-row-elementit käyttävät Subgridiä tasatakseen otsikot ja syöttökentät johdonmukaisesti kaikkien rivien välillä. Raitojen koot määritellään päägridissä (.form-grid), mikä varmistaa yhtenäisen ulkoasun.

Parhaat käytännöt ja huomiot

Subgrid vs. tavallinen CSS Grid

Vaikka sekä Subgrid että CSS Grid ovat tehokkaita asettelutyökaluja, ne palvelevat eri tarkoituksia. Tavallinen CSS Grid on ihanteellinen yleisten sivuasettelujen luomiseen ja sisällön perusrakenteen määrittelyyn. Subgrid puolestaan sopii parhaiten sisäkkäisten asettelujen hallintaan ja sisällön tasaamiseen useiden sisäkkäisyyden tasojen välillä. Ajattele Subgridiä CSS Gridin laajennuksena, joka yksinkertaistaa monimutkaisia asettelutilanteita.

Yleisten ongelmien vianmääritys

Yhteenveto

CSS Subgrid on arvokas lisä CSS Gridin työkalupakkiin, tarjoten tehokkaan tavan hallita monimutkaisia sisäkkäisiä asetteluja ja luoda visuaalisesti miellyttäviä, ylläpidettäviä ja responsiivisia web-suunnitelmia. Ymmärtämällä peruskäsitteet ja tutkimalla käytännön esimerkkejä voit hyödyntää Subgridiä rakentaaksesi hienostuneita asetteluja, joita oli aiemmin vaikea tai mahdoton saavuttaa perinteisillä CSS-tekniikoilla. Ota Subgrid käyttöön ja avaa uusia mahdollisuuksia web-kehitysprojekteissasi. Subgrid antaa sinun todella laajentaa CSS Gridin voimaa sisäkkäisiin elementteihin, mikä mahdollistaa paremman hallinnan ja koodin ylläpidettävyyden. Kokeile sitä ja tutustu sen etuihin monimutkaisten CSS-asettelujen yksinkertaistamisessa.

Lisälähteet