A Z-Index magyarázata: Hogyan helyezhetünk el elemeket CSS használatával

Mindig küzdöttem a CSS tulajdonság z-indexével. Eleinte olyan könnyen hangzik. A magasabb z-index értékű elemek az alacsonyabb z-index értékűek előtt jelennek meg. Ennek ellenére sokszor kerültem olyan helyzetekbe, ahol úgy tűnik, hogy a z-index értéknek egyáltalán nem volt hatása.

Úgy döntöttem, hogy elegem van a z-index próbáiból és hibáiból, és szeretnék jobban megérteni. Remélem, hogy ez a cikk segíthet Önnek, így soha nem fog csodálkozni azon, hogy a z-index miért nem azt csinálja, amit elvár.

Alapértelmezett halmozási sorrend

Először is említsük meg az alapértelmezett sorrendet, amelyben a böngésző elemeit halmozza, ha nem alkalmaznak z-indexet:

  1. Gyökérelem (az elem)
  2. A nem pozicionált elemek a meghatározott sorrendben
  3. Az elemek a meghatározott sorrendben helyezkednek el

A nem pozícionált elem az alapértelmezett helyzetértékű statikus elem. A pozicionált elem bármely más pozícióértékkel rendelkező elem. Példák egyéb értékekre: abszolút, relatív, ragadós vagy rögzített.

HTML:

CSS:

/* This is only the CSS that is relevant for the example. For the complete CSS check the links below the pictures. */
.blue, .pink, .orange { position: absolute;}

A zöld mezőt utoljára definiáltuk a dokumentumban. Ennek ellenére azért jelenik meg a többiek mögött, mert nincs pozicionálva.

Halmozás z-indexszel

Ha most meg akarjuk változtatni ezen elemek halmozási sorrendjét, használhatjuk a z-index tulajdonságot. Magasabb z indexű elem jelenik meg egy alacsonyabb z indexű elem előtt. Egy dolgot meg kell jegyezni, hogy a z-index csak pozicionált elemekkel működik .

.blue, .pink, .orange { position: absolute;}
.blue { z-index: 2;}
.orange { z-index: 3;}
.green { z-index: 100; // has no effect since the green box is non- positioned}

A magasabb z-indexű narancssárga doboz a kék mező előtt jelenik meg.

Halmozási kontextus

Tegyük fel, hogy hozzáadunk egy másik elhelyezett mezőt az elrendezéshez, amelyet a rózsaszín mező mögé akarunk helyezni. Kódunkat a következőkre frissítjük:

HTML:

CSS:

.blue, .pink, .orange, .purple { position: absolute;}
.purple { z-index: 0;}
.pink { z-index: 1;}
.blue { z-index: 2;}
.orange { z-index: 3;}
.green { z-index: 100;}

A rózsaszínű dobozunk a vártnak megfelelően jelenik meg a lila doboz előtt, de mi történt a narancssárga dobozkal? Miért van hirtelen a kék mögött, annak ellenére, hogy magasabb a z-indexe? Ennek az az oka, hogy egy elemhez hozzáadva egy z-index értéket kialakul az úgynevezett halmozási kontextus .

A rózsaszínű mezőnek az auto-tól eltérő z-index értéke van, amely új halmozási kontextust alkot. Az a tény, hogy egymásra helyezi a kontextust, befolyásolja a gyermekelemek megjelenítését.

Lehetőség van a rózsaszínű doboz gyermek elemek egymásra helyezésének sorrendjére. Azonban z-indexüknek csak jelentése van ebben a halmozási kontextusban . Ez azt jelenti, hogy a narancssárga mezőt nem tudjuk áthelyezni a kék mező elé, mert azok már nem ugyanazon a veremkörnyezeten belül vannak.

Ha azt akarjuk, hogy a kék és a narancssárga doboz ugyanazon a halmozási kontextusban legyen, akkor a kék mezőt definiálhatjuk a rózsaszínű doboz gyermekelemeként. Ezáltal a kék mező megjelenik a narancssárga mögött.

A halmozási összefüggések nem csak akkor jönnek létre, amikor a z-indexet egy elemre alkalmazzák. Számos olyan tulajdonság létezik, amelyek miatt az elemek egymásra helyezési összefüggéseket hoznak létre. Néhány példa: szűrés, átlátszatlanság és transzformáció.

Térjünk vissza az előző példánkra. A kék doboz ismét testvére a rózsaszínű doboznak. Ezúttal ahelyett, hogy a rózsaszínű mezőhöz z-indexet adnánk, szűrőt alkalmazunk rá.

HTML:

CSS:

.blue, .pink, .orange { position: absolute;}
.pink { filter: hue-rotate(20deg);}
.blue { z-index: 2;}
.orange { z-index: 3;}
.green { z-index: 100;}

A narancssárga doboz z-indexe még mindig magasabb, mint a kéké, de továbbra is megjelenik mögötte. Ennek oka, hogy a szűrő értéke miatt a rózsaszínű mező új egymásra helyezési kontextust alkotott.

Összegzés

A z-index használatával a pozicionált elemeken megváltoztathatjuk az alapértelmezett halmozási sorrendet.

Bizonyos CSS tulajdonságok alkalmazásakor egy elem egymásra épülő kontextust alkothat. A Z-index értékeknek csak ugyanabban a halmozási környezetben van jelentése.

További információkért a z-indexről ajánlom ezt a cikket. Nagyon sok ihletet kaptam belőle, amikor ezt írtam.

Köszönöm, hogy elolvasta! :)