Proprietatea z-index: o prezentare detaliată. Contexte de suprapunere sau când z-index nu funcționează Css z index funcționează doar cu fix

Acasă / Recuperarea datelor

z-index

Proprietatea z-index CSS definește ordinea elementelor atunci când acestea se suprapun între ele când sunt poziționate. Adică, îl puteți folosi pentru a specifica ce element (layer) va fi deasupra și care (și în ce ordine) va fi sub el.

Dar nu este atât de simplu. Această proprietate este una dintre puținele din CSS care îndeplinește două funcții complet diferite simultan (cum ar fi poziția):

  1. Proprietatea z-index este folosită pentru a aranja elementele poziționate.
  2. Fiecare element cu un index z care nu este egal cu auto creează nou nivel ordonarea, în raport cu care aceasta (ordonarea) apare pentru toți descendenții săi (în mod firesc, descendenții al căror indice z nu este egal cu auto își creează deja propriul nivel de ordonare). Acesta este motivul pentru care, de exemplu, un element de la un nivel de ordonare nu poate fi „plasat” între două elemente de la altul.
  3. Element rădăcină creează un nivel de ordonare rădăcină, chiar dacă nu are un index z specificat.

Să ne uităm la acest exemplu:

DIV3
DIV4

În acest exemplu, pentru orice valoare z-index, veți putea schimba doar DIV3 și DIV4. Dar următoarele nu vor funcționa:

  1. Nu va fi posibil să puneți DIV3 și DIV4 sub DIV2, deoarece sunt activate diferite niveluri ordonând. DIV2 este la nivelul creat de elementul DIV1, iar DIV3 și DIV4 sunt la nivelul creat de DIV2. Pentru ca acestea să fie la același nivel, trebuie să eliminați indexul z din DIV2 sau să îl setați pe auto .
  2. Nu va funcționa să puneți DIV2 sub DIV1. Pentru ca acesta să funcționeze, trebuie să setați automat deja la DIV1.
  3. Și așa mai departe...

În diferite manuale și cărți de referință, conceptul de „nivel de comandă” este numit diferit - context pozițional local, context local de stivă etc. În specificația oficială CSS este scris ca „context local de stivuire”. Dar, în opinia mea, expresia „nivel de ordonare” este mai aproape de înțelegere pentru majoritatea oamenilor vorbitori de limbă rusă, motiv pentru care am introdus această definiție.

Tip de proprietate

Scop: pozitionare.

Se aplică: elementelor cu altă poziție decât statică.

Moștenit: nu.

Valori

Valoarea proprietății z-index este de a specifica ordinea elementelor într-unul din următoarele moduri.

  • Număr- orice număr întreg pozitiv sau negativ care specifică ordinea elementelor într-un anumit nivel de ordonare. Un element cu o valoare mai mare va fi plasat deasupra celor cu o valoare mai mică. Dacă două elemente au aceleași valori, atunci cel de mai jos în codul HTML va fi în partea de sus. În plus, un element care are o valoare numerică (inclusiv 0) creează un nou nivel de ordonare pentru copiii săi poziționați.
  • auto- cu această valoare, elementul din nivelul de ordonare curent are același z-index ca strămoșul său care a creat acest nivel. Cu toate acestea, elementul în sine nu creează un nou nivel de ordonare pentru descendenții săi. Dacă există mai multe elemente cu o valoare dată, atunci cel care apare mai jos în codul HTML al paginii va fi deasupra.
  • moşteni- moștenește valoarea z-index din elementul părinte.

Intrare procentuală: nu există.

Valoare implicită: auto.

Deoarece în interiorul elementului care creează nivelul de ordonare pot exista nu numai elemente poziționate, ci și altele, browserele folosesc anumite reguli pentru stratificarea acestora într-un anumit nivel:

  1. Primul strat conține fundalul și cadrul elementului care a creat acest nivel de ordonare.
  2. Deasupra, în al doilea strat, sunt elemente descendente care au valori negative ale indicelui z, unde elementul cu o valoare mai apropiată de zero este situat deasupra.
  3. Următorul strat sunt elemente descendente care nu sunt încorporate (inline).
  4. Al patrulea strat este format din elemente plutitoare (float) împreună cu conținutul acestora.
  5. Al cincilea strat este încorporat în elemente descendente.
  6. Al șaselea strat conține elemente cu z-index auto sau 0, unde elementul de mai jos din cod este mai mare.
  7. În cele din urmă, elementele cu valori pozitive ale indicelui z sunt foarte în vârf, elementul cu valoarea mai mare fiind mai mare.

Sintaxă

z-index: auto | număr | moşteni

Exemplu CSS: Utilizarea z-index

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

DIV1
DIV2
DIV3

Rezultat.

versiuni CSS

Versiune:CSS 1CSS 2CSS 2.1CSS 3
Sprijin:DaDaDaDa

Browsere

Browser:Internet Explorer Google ChromeMozilla FirefoxOperă
Versiune:6.0 și 7.08.0 și mai mare2.0 și mai mare2.0 3.0 și mai mare9.2 și mai sus3.1 și mai sus
Sprijin:ParţialDaDaParţialDaDaDa

Internet Explorer 6.0 și 7.0 nu înțeleg valoarea de moștenire. Tot în aceste browsere sunt create noi niveluri de ordonare de către toate elementele poziționate, nu doar cele cu valori numerice z-index.

IE 6.0 poziționează întotdeauna elementul , V browser de internet Explorer 6 apare întotdeauna deasupra altor elemente, indiferent de valoarea indexului z.

Versiunile de Internet Explorer până la 7.0 inclusiv nu acceptă valoarea de moștenire și interpretează automat ca 0.

În versiunile browserului Firefox până la 2.0 inclusiv, o valoare z-index negativă poziționează elementul sub fundalul paginii web și al conținutului acesteia.

Problema cu indexul z este că mulți oameni pur și simplu nu înțeleg cum funcționează.
Tot ceea ce este descris mai jos este în specificația W3C. Din păcate, nu toată lumea o citește.

Descrierea problemei:

Deci, să presupunem că avem un cod HTML format din 3 elemente.
Fiecare dintre ele conține unul în sine. Și fiecare, la rândul său, are propriul fundal: roșu, verde și, respectiv, albastru. În plus, fiecare este poziționat absolut la marginea din stânga sus a documentului în așa fel încât să se suprapună ușor pe cel de lângă el. Prima are un z-index egal cu 1, celelalte două nu au un set de z-index.

Mai jos este codul HTML cu design CSS de bază.

Roşu
Verde
Albastru

.roșu, .verde, .albastru ( poziție: absolut; ) .roșu ( fundal: roșu; z-index: 1; ) .verde ( fundal: verde; ) .albastru ( fundal: albastru; )
Exemplu pe jsfiddle

Sarcină: asigurați-vă că roșul este în spatele albastrului și al verdelui, fără a încălca niciuna dintre următoarele reguli:

  • Nu puteți schimba marcajul HTML
  • Nu puteți modifica/adăuga z-index la elemente
  • Nu puteți modifica/adăuga poziționarea elementelor

Soluţie:

Soluția este să adăugați puțin mai puțin de o opacitate la prima (părintele roșului).
Iată css-ul care ilustrează asta:
div:primul copil ( opacitate: .99; )

Hmm, ceva nu este în regulă aici. Ce legătură are transparența cu asta? Cum poate influența ordinea elementelor care se suprapun? Crezi la fel? Bun venit în club!
Sper că în a doua parte a articolului totul va fi la locul lor.

Ordinea elementelor de suprapunere:

Indicele Z pare foarte simplu: cu cât valoarea este mai mare, cu atât elementul va fi mai aproape de noi, adică. un element cu un indice z de 5 se va suprapune pe un element cu un indice z de 2, nu? Nu chiar.
Aceasta este problema indexului z. Totul pare atât de evident încât majoritatea dezvoltatorilor nu petrec suficient timp studiind această problemă.

Orice element din document HTML poate fi fie în prim-plan, fie în fundal. Toată lumea știe asta. Regulile care definesc această ordine sunt descrise clar în specificație, dar, așa cum am spus mai sus, nu toată lumea le înțelege pe deplin.

Dacă indexul z și proprietățile de poziționare nu sunt setate în mod explicit, totul este simplu: ordinea de stivuire este egală cu ordinea elementelor din HTML. (De fapt, este puțin mai complicat decât atât, dar atâta timp cât nu folosiți valori negative de umplutură pentru a suprapune elementele inline, nu veți întâlni cazuri de margine)

Dacă specificați în mod explicit poziționarea elementelor (și copiii lor), atunci astfel de elemente se vor suprapune elementelor fără o proprietate explicită de poziționare. (Când spun „specificați în mod explicit poziționarea”, mă refer la orice altă valoare decât statică, de exemplu: absolută sau relativă).

Și în sfârșit, cazul în care este dat indicele z. Pentru început, este firesc să presupunem că elementele cu un indice z mare vor fi deasupra elementelor cu un indice z mai mic, iar orice element cu un set de indice z va fi deasupra unui element fără un set de indice z, dar acest lucru nu este cazul. În primul rând, indicele z este luat în considerare doar pe elementele poziționate în mod explicit. Dacă încercați să setați indexul z pe un element nepoziționat, nu se va întâmpla nimic. În al doilea rând, valorile z-index pot crea contexte suprapuse. Hmm, lucrurile s-au complicat mult, nu-i așa?

Suprapunerea contextului

Elementele cu părinți comuni care se mută împreună în prim-plan sau în fundal sunt cunoscute sub denumirea de context de suprapunere. Înțelegerea contextului de stivuire este cheia pentru înțelegerea indexului z și a ordinii de stivuire a elementelor.

Fiecare context de suprapunere are propriul său element rădăcină în structura HTML. În momentul în care se formează un nou context pe un element, toate elementele copil intră și ele în acest context și își iau locul în ordinea de suprapunere. Dacă un element este poziționat în partea de jos a unui context de suprapunere, nu există nicio modalitate de a fi afișat deasupra altui element într-un context de suprapunere adiacent mai sus în ierarhie, chiar și cu un index z setat la un milion.

Un nou context se poate forma în următoarele cazuri:

  • Dacă elementul este elementul rădăcină al documentului (elementului)
    Dacă elementul nu este poziționat static și valoarea lui z-index nu este automată
    Dacă elementul are opacitate mai mică de 1

Problema cu indexul z este că mulți oameni pur și simplu nu înțeleg cum funcționează.
Tot ceea ce este descris mai jos este în specificația W3C. Din păcate, nu toată lumea o citește.

Descrierea problemei:

Deci, să presupunem că avem un cod HTML format din 3 elemente.
Fiecare dintre ele conține unul în sine. Și fiecare, la rândul său, are propriul fundal: roșu, verde și, respectiv, albastru. În plus, fiecare este poziționat absolut la marginea din stânga sus a documentului în așa fel încât să se suprapună ușor pe cel de lângă el. Prima are un z-index egal cu 1, celelalte două nu au un set de z-index.

Mai jos este codul HTML cu design CSS de bază.

Roşu
Verde
Albastru

.roșu, .verde, .albastru ( poziție: absolut; ) .roșu ( fundal: roșu; z-index: 1; ) .verde ( fundal: verde; ) .albastru ( fundal: albastru; )
Exemplu pe jsfiddle

Sarcină: asigurați-vă că roșul este în spatele albastrului și al verdelui, fără a încălca niciuna dintre următoarele reguli:

  • Nu puteți schimba marcajul HTML
  • Nu puteți modifica/adăuga z-index la elemente
  • Nu puteți modifica/adăuga poziționarea elementelor

Soluţie:

Soluția este să adăugați puțin mai puțin de o opacitate la prima (părintele roșului).
Iată css-ul care ilustrează asta:
div:primul copil ( opacitate: .99; )

Hmm, ceva nu este în regulă aici. Ce legătură are transparența cu asta? Cum poate influența ordinea elementelor care se suprapun? Crezi la fel? Bun venit în club!
Sper că în a doua parte a articolului totul va fi la locul lor.

Ordinea elementelor de suprapunere:

Indicele Z pare foarte simplu: cu cât valoarea este mai mare, cu atât elementul va fi mai aproape de noi, adică. un element cu un indice z de 5 se va suprapune pe un element cu un indice z de 2, nu? Nu chiar.
Aceasta este problema indexului z. Totul pare atât de evident încât majoritatea dezvoltatorilor nu petrec suficient timp studiind această problemă.

Orice element dintr-un document HTML poate fi fie în prim-plan, fie în fundal. Toată lumea știe asta. Regulile care definesc această ordine sunt descrise clar în specificație, dar, așa cum am spus mai sus, nu toată lumea le înțelege pe deplin.

Dacă indexul z și proprietățile de poziționare nu sunt setate în mod explicit, totul este simplu: ordinea de stivuire este egală cu ordinea elementelor din HTML. (De fapt, este puțin mai complicat decât atât, dar atâta timp cât nu folosiți valori negative de umplutură pentru a suprapune elementele inline, nu veți întâlni cazuri de margine)

Dacă specificați în mod explicit poziționarea elementelor (și copiii lor), atunci astfel de elemente se vor suprapune elementelor fără o proprietate explicită de poziționare. (Când spun „specificați în mod explicit poziționarea”, mă refer la orice altă valoare decât statică, de exemplu: absolută sau relativă).

Și în sfârșit, cazul în care este dat indicele z. Pentru început, este firesc să presupunem că elementele cu un indice z mare vor fi deasupra elementelor cu un indice z mai mic, iar orice element cu un set de indice z va fi deasupra unui element fără un set de indice z, dar acest lucru nu este cazul. În primul rând, indicele z este luat în considerare doar pe elementele poziționate în mod explicit. Dacă încercați să setați indexul z pe un element nepoziționat, nu se va întâmpla nimic. În al doilea rând, valorile z-index pot crea contexte suprapuse. Hmm, lucrurile s-au complicat mult, nu-i așa?

Suprapunerea contextului

Elementele cu părinți comuni care se mută împreună în prim-plan sau în fundal sunt cunoscute sub denumirea de context de suprapunere. Înțelegerea contextului de stivuire este cheia pentru înțelegerea indexului z și a ordinii de stivuire a elementelor.

Fiecare context de suprapunere are propriul său element rădăcină în structura HTML. În momentul în care se formează un nou context pe un element, toate elementele copil intră și ele în acest context și își iau locul în ordinea de suprapunere. Dacă un element este poziționat în partea de jos a unui context de suprapunere, nu există nicio modalitate de a fi afișat deasupra altui element într-un context de suprapunere adiacent mai sus în ierarhie, chiar și cu un index z setat la un milion.

Un nou context se poate forma în următoarele cazuri:

  • Dacă elementul este elementul rădăcină al documentului (elementului)
    Dacă elementul nu este poziționat static și valoarea lui z-index nu este automată
    Dacă elementul are opacitate mai mică de 1

© 2024 ermake.ru -- Despre repararea PC-ului - Portal de informații