Svojstvo z-index: detaljan pregled. Preklapanje konteksta ili kada z-index ne radi Css z indeks radi samo sa fiksnim

Dom / Data Recovery

z-indeks

CSS svojstvo z-indeksa definira redoslijed elemenata kada se preklapaju kada su pozicionirani. Odnosno, možete ga koristiti da odredite koji će element (sloj) biti na vrhu, a koji (i kojim redoslijedom) će biti ispod njega.

Ali to nije tako jednostavno. Ovo svojstvo je jedno od rijetkih u CSS-u koje obavlja dvije potpuno različite funkcije odjednom (kao što je pozicija):

  1. Svojstvo z-index se koristi za raspoređivanje pozicioniranih elemenata.
  2. Svaki element sa z-indeksom koji nije jednak automatskom kreiranju novi nivo poredak, u odnosu na koji se ono (uređenje) javlja za sve njegove potomke (naravno, potomci čiji z-indeks nije jednak auto već kreiraju svoj vlastiti nivo uređenja). Zbog toga se, na primjer, element s jednog nivoa naručivanja ne može „postaviti“ između dva elementa s drugog.
  3. Root element kreira osnovni nivo reda, čak i ako nema specificiran z-indeks.

Pogledajmo ovaj primjer:

DIV3
DIV4

U ovom primjeru, za bilo koje vrijednosti z-indeksa, moći ćete zamijeniti samo DIV3 i DIV4. Ali sljedeće neće raditi:

  1. Neće biti moguće staviti DIV3 i DIV4 pod DIV2, pošto su uključeni različitim nivoima naručivanje. DIV2 je na nivou kreiranom elementom DIV1, a DIV3 i DIV4 su na nivou koji kreira DIV2. Da bi bili na istom nivou, morate ukloniti z-indeks iz DIV2 ili ga postaviti na auto .
  2. Neće raditi staviti DIV2 pod DIV1. Da bi to funkcioniralo, morate već postaviti auto na DIV1.
  3. I tako dalje...

U različitim udžbenicima i referentnim knjigama koncept „nivoa narudžbe“ naziva se različito - lokalni pozicijski kontekst, lokalni kontekst steka itd. U službenoj CSS specifikaciji to je napisano kao “lokalni kontekst slaganja”. Ali po mom mišljenju, fraza „nivo naručivanja“ je bliža razumijevanju za većinu ljudi koji govore ruski, zbog čega sam i uveo ovu definiciju.

Vrsta nekretnine

Svrha: pozicioniranje.

Odnosi se na: elemente sa položajem koji nije statički.

Naslijeđeno: ne.

Vrijednosti

Vrijednost svojstva z-indeks je specificiranje redoslijeda elemenata na jedan od sljedećih načina.

  • Broj- bilo koji pozitivan ili negativan cijeli broj koji specificira redoslijed elemenata unutar datog nivoa uređenja. Element s višom vrijednošću bit će postavljen iznad onih s nižom vrijednošću. Ako dva elementa imaju iste vrijednosti, onda će onaj ispod u HTML kodu biti na vrhu. Osim toga, element koji ima numeričku vrijednost (uključujući 0) kreira novi nivo reda za svoje pozicionirane potomke.
  • auto- sa ovom vrijednošću, element u trenutnom nivou naručivanja ima isti z-indeks kao i njegov predak koji je kreirao ovaj nivo. Međutim, sam element ne stvara novi nivo uređenja za svoje potomke. Ako postoji nekoliko elemenata sa datom vrijednošću, onda će onaj koji se pojavljuje ispod u HTML kodu stranice biti na vrhu.
  • naslijediti- nasljeđuje vrijednost z-indeksa od roditeljskog elementa.

Unos postotka: ne postoji.

Zadana vrijednost: auto.

Budući da unutar elementa koji kreira nivo narudžbine mogu biti ne samo pozicionirani elementi, već i neki drugi, pretraživači koriste određena pravila za njihovo postavljanje u slojeve unutar datog nivoa:

  1. Prvi sloj sadrži pozadinu i okvir elementa koji je kreirao ovaj nivo uređenja.
  2. Na vrhu, u drugom sloju, nalaze se elementi potomci koji imaju negativne vrijednosti z-indeksa, gdje se iznad nalazi element čija je vrijednost bliža nuli.
  3. Sljedeći sloj su elementi potomci koji nisu ugrađeni (inline).
  4. Četvrti sloj se sastoji od plutajućih elemenata (plovka) zajedno sa njihovim sadržajem.
  5. Peti sloj su ugrađeni elementi potomci.
  6. Šesti sloj sadrži elemente sa z-indeksom auto ili 0, pri čemu je element ispod u kodu viši.
  7. Konačno, elementi sa pozitivnim vrijednostima z-indeksa nalaze se na samom vrhu, pri čemu je element sa višom vrijednošću viši.

Sintaksa

z-indeks: auto | broj | naslijediti

CSS primjer: Korištenje z-indexa

seodon.ru - <a href="https://ermake.ru/bs/css-perenos-dlinnyh-slov-kak-dobavit-s-pomoshchyu-svoistv-css-perenos-stroki/">CSS svojstvo</a> z-indeks

DIV1
DIV2
DIV3

Rezultat.

CSS verzije

verzija:CSS 1CSS 2CSS 2.1CSS 3
Podrška:DaDaDaDa

Pregledači

Preglednik:Internet Explorer Google ChromeMozilla FirefoxOpera
verzija:6.0 i 7.08.0 i više2.0 i više2.0 3.0 i više9.2 i više3.1 i više
Podrška:DjelimičnoDaDaDjelimičnoDaDaDa

Internet Explorer 6.0 i 7.0 ne razumiju vrijednost nasljeđivanja. Takođe u ovim pretraživačima, novi nivoi naručivanja kreiraju svi pozicionirani elementi, a ne samo oni sa numeričkim vrednostima z-indeksa.

IE 6.0 uvijek pozicionira element , V Internet pretraživač Explorer 6 se uvijek pojavljuje na vrhu drugih elemenata, bez obzira na vrijednost z-indeksa.

Verzije Internet Explorera do i uključujući 7.0 ne podržavaju naslijeđenu vrijednost i tumače auto kao 0.

U verzijama pretraživača Firefox do i uključujući 2.0, negativna vrijednost z-indeksa pozicionira element ispod pozadine web stranice i njenog sadržaja.

Problem sa z-indeksom je što mnogi ljudi jednostavno ne razumiju kako on funkcionira.
Sve dolje opisano je u W3C specifikaciji. Nažalost, ne čitaju ga svi.

Opis problema:

Dakle, recimo da imamo HTML kod koji se sastoji od 3 elementa.
Svaki od njih sadrži jednu u sebi. I svaki, zauzvrat, ima svoju pozadinu: crvenu, zelenu i plavu. Osim toga, svaki je pozicioniran apsolutno na gornjoj lijevoj ivici dokumenta na način da se malo preklapa s onim pored. Prvi ima z-indeks jednak 1, druga dva nemaju postavljen z-indeks.

Ispod je HTML kod sa osnovnim CSS dizajnom.

Crveni
Zeleno
Plava

.crvena, .zelena, .plava (pozicija: apsolutna; ) .crvena (pozadina: crvena; z-indeks: 1; ) .zelena (pozadina: zelena; ) .plava (pozadina: plava; )
Primjer na jsfiddle

zadatak: pobrinite se da je crvena iza plave i zelene, bez kršenja bilo kojeg od sljedećih pravila:

  • Ne možete promijeniti HTML oznake
  • Ne možete mijenjati/dodati z-indeks elementima
  • Ne možete mijenjati/dodati pozicioniranje elementima

Rješenje:

Rješenje je dodati malo manje od jedne prozirnosti na prvu (roditelj crvene boje).
Evo css-a koji ovo ilustruje:
div:first-child (prozirnost: .99; )

Hmm, tu nešto nije u redu. Kakve veze ima transparentnost s tim? Kako to može utjecati na redoslijed preklapajućih elemenata? Da li mislite isto? Dobrodošli u klub!
Nadam se da će u drugom dijelu članka sve doći na svoje mjesto.

Redoslijed preklapanja elemenata:

Z-indeks se čini vrlo jednostavnim: što je veća vrijednost, to će nam element biti bliži, tj. element sa z-indeksom 5 će se preklapati sa elementom sa z-indeksom 2, zar ne? Ne baš.
Ovo je problem z indeksa. Sve izgleda tako očigledno da većina programera ne provodi dovoljno vremena proučavajući ovo pitanje.

Bilo koji element u HTML dokument može biti u prvom planu ili u pozadini. Svi to znaju. Pravila koja definiraju ovaj redoslijed jasno su opisana u specifikaciji, ali, kao što sam već rekao, ne razumiju ih svi u potpunosti.

Ako z-indeks i svojstva pozicioniranja nisu eksplicitno postavljeni, sve je jednostavno: redoslijed slaganja jednak je redoslijedu elemenata u HTML-u. (Zapravo je malo kompliciranije od toga, ali sve dok ne koristite negativne vrijednosti paddinga za preklapanje inline elemenata, nećete naići na rubne slučajeve)

Ako eksplicitno navedete pozicioniranje za elemente (i njihovu djecu), onda će takvi elementi preklapati elemente bez eksplicitnog svojstva pozicioniranja. (Kada kažem „eksplicitno navedite pozicioniranje“, mislim na bilo koju vrijednost osim statičke, na primjer: apsolutnu ili relativnu).

I konačno, slučaj u kojem je zadan z-indeks. Za početak, prirodno je pretpostaviti da će elementi sa velikim z-indeksom biti iznad elemenata sa manjim z-indeksom, a bilo koji element sa skupom z-indeksa će biti iznad elementa bez skupa z-indeksa, ali ovo nije slučaj. Prvo, z-indeks se uzima u obzir samo na eksplicitno pozicioniranim elementima. Ako pokušate postaviti z-indeks na nepozicionirani element, ništa se neće dogoditi. Drugo, vrijednosti z-indeksa mogu stvoriti kontekste preklapanja. Hmm, stvari su postale mnogo komplikovanije, zar ne?

Preklapanje konteksta

Elementi sa zajedničkim roditeljima koji se zajedno kreću u prvi plan ili pozadinu poznati su kao kontekst preklapanja. Razumijevanje konteksta slaganja ključno je za razumijevanje z-indeksa i redoslijeda slaganja elemenata.

Svaki kontekst preklapanja ima svoj vlastiti osnovni element u HTML strukturi. U trenutku kada se na elementu formira novi kontekst, svi podređeni elementi također spadaju u ovaj kontekst i zauzimaju svoje mjesto u redoslijedu preklapanja. Ako je element pozicioniran na samom dnu jednog konteksta preklapanja, ne postoji način da se u paklu prikaže iznad drugog elementa u susednom kontekstu preklapanja više u hijerarhiji, čak i sa z-indeksom postavljenim na milion.

Novi kontekst se može formirati u sljedećim slučajevima:

  • Ako je element osnovni element dokumenta (element)
    Ako element nije statički pozicioniran i njegova vrijednost z-indeksa nije auto
    Ako element ima neprozirnost manju od 1

Problem sa z-indeksom je što mnogi ljudi jednostavno ne razumiju kako on funkcionira.
Sve dolje opisano je u W3C specifikaciji. Nažalost, ne čitaju ga svi.

Opis problema:

Dakle, recimo da imamo HTML kod koji se sastoji od 3 elementa.
Svaki od njih sadrži jednu u sebi. I svaki, zauzvrat, ima svoju pozadinu: crvenu, zelenu i plavu. Osim toga, svaki je pozicioniran apsolutno na gornjoj lijevoj ivici dokumenta na način da se malo preklapa s onim pored. Prvi ima z-indeks jednak 1, druga dva nemaju postavljen z-indeks.

Ispod je HTML kod sa osnovnim CSS dizajnom.

Crveni
Zeleno
Plava

.crvena, .zelena, .plava (pozicija: apsolutna; ) .crvena (pozadina: crvena; z-indeks: 1; ) .zelena (pozadina: zelena; ) .plava (pozadina: plava; )
Primjer na jsfiddle

zadatak: pobrinite se da je crvena iza plave i zelene, bez kršenja bilo kojeg od sljedećih pravila:

  • Ne možete promijeniti HTML oznake
  • Ne možete mijenjati/dodati z-indeks elementima
  • Ne možete mijenjati/dodati pozicioniranje elementima

Rješenje:

Rješenje je dodati malo manje od jedne prozirnosti na prvu (roditelj crvene boje).
Evo css-a koji ovo ilustruje:
div:first-child (prozirnost: .99; )

Hmm, tu nešto nije u redu. Kakve veze ima transparentnost s tim? Kako to može utjecati na redoslijed preklapajućih elemenata? Da li mislite isto? Dobrodošli u klub!
Nadam se da će u drugom dijelu članka sve doći na svoje mjesto.

Redoslijed preklapanja elemenata:

Z-indeks se čini vrlo jednostavnim: što je veća vrijednost, to će nam element biti bliži, tj. element sa z-indeksom 5 će se preklapati sa elementom sa z-indeksom 2, zar ne? Ne baš.
Ovo je problem z indeksa. Sve izgleda tako očigledno da većina programera ne provodi dovoljno vremena proučavajući ovo pitanje.

Bilo koji element u HTML dokumentu može biti u prednjem planu ili u pozadini. Svi to znaju. Pravila koja definiraju ovaj redoslijed jasno su opisana u specifikaciji, ali, kao što sam već rekao, ne razumiju ih svi u potpunosti.

Ako z-indeks i svojstva pozicioniranja nisu eksplicitno postavljeni, sve je jednostavno: redoslijed slaganja jednak je redoslijedu elemenata u HTML-u. (Zapravo je malo kompliciranije od toga, ali sve dok ne koristite negativne vrijednosti paddinga za preklapanje inline elemenata, nećete naići na rubne slučajeve)

Ako eksplicitno navedete pozicioniranje za elemente (i njihovu djecu), onda će takvi elementi preklapati elemente bez eksplicitnog svojstva pozicioniranja. (Kada kažem „eksplicitno navedite pozicioniranje“, mislim na bilo koju vrijednost osim statičke, na primjer: apsolutnu ili relativnu).

I konačno, slučaj u kojem je zadan z-indeks. Za početak, prirodno je pretpostaviti da će elementi sa velikim z-indeksom biti iznad elemenata sa manjim z-indeksom, a bilo koji element sa skupom z-indeksa će biti iznad elementa bez skupa z-indeksa, ali ovo nije slučaj. Prvo, z-indeks se uzima u obzir samo na eksplicitno pozicioniranim elementima. Ako pokušate postaviti z-indeks na nepozicionirani element, ništa se neće dogoditi. Drugo, vrijednosti z-indeksa mogu stvoriti kontekste preklapanja. Hmm, stvari su postale mnogo komplikovanije, zar ne?

Preklapanje konteksta

Elementi sa zajedničkim roditeljima koji se zajedno kreću u prvi plan ili pozadinu poznati su kao kontekst preklapanja. Razumijevanje konteksta slaganja ključno je za razumijevanje z-indeksa i redoslijeda slaganja elemenata.

Svaki kontekst preklapanja ima svoj vlastiti osnovni element u HTML strukturi. U trenutku kada se na elementu formira novi kontekst, svi podređeni elementi također spadaju u ovaj kontekst i zauzimaju svoje mjesto u redoslijedu preklapanja. Ako je element pozicioniran na samom dnu jednog konteksta preklapanja, ne postoji način da se u paklu prikaže iznad drugog elementa u susednom kontekstu preklapanja više u hijerarhiji, čak i sa z-indeksom postavljenim na milion.

Novi kontekst se može formirati u sljedećim slučajevima:

  • Ako je element osnovni element dokumenta (element)
    Ako element nije statički pozicioniran i njegova vrijednost z-indeksa nije auto
    Ako element ima neprozirnost manju od 1

© 2024 ermake.ru -- O popravci računara - Informativni portal