Vlastnost z-index: podrobný přehled. Překryvné kontexty nebo když z-index nefunguje Css z index funguje pouze s fixem

Domov / Záchrana dat

z-index

CSS vlastnost z-index definuje pořadí prvků, když se při umístění navzájem překrývají. To znamená, že jej můžete použít k určení, který prvek (vrstva) bude nahoře a který (a v jakém pořadí) bude pod ním.

Ale není to tak jednoduché. Tato vlastnost je jednou z mála v CSS, která provádí dvě zcela odlišné funkce najednou (jako je pozice):

  1. Vlastnost z-index se používá k uspořádání umístěných prvků.
  2. Každý prvek se z-indexem, který se nerovná automatickému vytvoření nová úroveňřazení, vůči němuž se (řazení) vyskytuje u všech jeho potomků (potomci, jejichž z-index není roven auto, si přirozeně již vytvářejí svou vlastní úroveň řazení). To je důvod, proč například prvek z jedné úrovně uspořádání nemůže být „umístěn“ mezi dva prvky z jiné.
  3. Kořenový prvek vytvoří kořenovou úroveň řazení, i když nemá zadaný z-index.

Podívejme se na tento příklad:

DIV3
DIV4

V tomto příkladu pro jakékoli hodnoty z-indexu budete moci zaměnit pouze DIV3 a DIV4. Ale následující nebude fungovat:

  1. DIV3 a DIV4 nebude možné vložit pod DIV2, protože jsou zapnuté různé úrovně objednávání. DIV2 je na úrovni vytvořené prvkem DIV1 a DIV3 a DIV4 jsou na úrovni vytvořené prvkem DIV2. Aby byly na stejné úrovni, musíte odstranit z-index z DIV2 nebo jej nastavit na auto .
  2. Nebude fungovat umístit DIV2 pod DIV1. Aby to fungovalo, musíte nastavit auto již na DIV1.
  3. A tak dále...

V různých učebnicích a referenčních knihách se pojem „úroveň objednávky“ nazývá odlišně – místní poziční kontext, místní zásobníkový kontext atd. V oficiální specifikaci CSS je to napsáno jako „místní kontext skládání“. Ale podle mého názoru je fráze „úroveň uspořádání“ blíže k pochopení pro většinu rusky mluvících lidí, a proto jsem zavedl tuto definici.

Typ nemovitosti

Účel: polohování.

Platí pro: prvky s jinou než statickou polohou.

Zděděno: ne.

Hodnoty

Hodnota vlastnosti z-index je určit pořadí prvků jedním z následujících způsobů.

  • Číslo- jakékoli kladné nebo záporné celé číslo, které určuje pořadí prvků v rámci dané úrovně uspořádání. Prvek s vyšší hodnotou bude umístěn nad prvky s nižší hodnotou. Pokud mají dva prvky stejné hodnoty, pak ten níže v kódu HTML bude nahoře. Navíc prvek, který má číselnou hodnotu (včetně 0), vytváří novou úroveň řazení pro své umístěné potomky.
  • auto- s touto hodnotou má prvek v aktuální úrovni řazení stejný z-index jako jeho předchůdce, který vytvořil tuto úroveň. Samotný prvek však nevytváří novou úroveň řazení pro své potomky. Pokud existuje několik prvků s danou hodnotou, pak ten, který se objeví níže v kódu HTML stránky, bude nahoře.
  • zdědit- zdědí hodnotu z-indexu z rodičovského prvku.

Procentuální zadání: neexistuje.

Výchozí hodnota: auto.

Protože uvnitř prvku, který vytváří úroveň řazení, mohou být nejen umístěné prvky, ale i některé další, používají prohlížeče určitá pravidla pro jejich vrstvení v rámci dané úrovně:

  1. První vrstva obsahuje pozadí a rám prvku, který vytvořil tuto úroveň řazení.
  2. Nahoře, ve druhé vrstvě, jsou podřízené prvky, které mají záporné hodnoty z-indexu, kde prvek s hodnotou blíže nule je umístěn výše.
  3. Další vrstvou jsou potomkové prvky, které nejsou vestavěné (inline).
  4. Čtvrtou vrstvu tvoří plovoucí prvky (float) spolu s jejich obsahem.
  5. Pátá vrstva jsou vestavěné podřízené prvky.
  6. Šestá vrstva obsahuje prvky s z-index auto nebo 0, kde prvek níže v kódu je vyšší.
  7. Konečně prvky s kladnými hodnotami z-indexu jsou úplně nahoře, přičemž prvek s vyšší hodnotou je vyšší.

Syntax

z-index: auto | číslo | zdědit

Příklad CSS: Použití z-indexu

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

DIV1
DIV2
DIV3

Výsledek.

CSS verze

Verze:CSS 1CSS 2CSS 2.1CSS 3
Podpora:AnoAnoAnoAno

Prohlížeče

prohlížeč:Internet Explorer Google ChromeMozilla FirefoxOpera
Verze:6.0 a 7.08.0 a vyšší2.0 a vyšší2.0 3.0 a vyšší9.2 a vyšší3.1 a vyšší
Podpora:ČástečněAnoAnoČástečněAnoAnoAno

Internet Explorer 6.0 a 7.0 nerozumí hodnotě dědění. Také v těchto prohlížečích jsou nové úrovně řazení vytvářeny všemi umístěnými prvky, nejen těmi s číselnými hodnotami z-indexu.

IE 6.0 vždy umístí prvek , V Internetový prohlížeč Explorer 6 se vždy zobrazuje nad ostatními prvky, bez ohledu na hodnotu z-indexu.

Internet Explorer verze do 7.0 včetně nepodporují dědičnou hodnotu a interpretují auto jako 0.

Ve verzích prohlížeče Firefox až do 2.0 včetně záporná hodnota z-index umístí prvek pod pozadí webové stránky a jejího obsahu.

Problém z-indexu je v tom, že mnoho lidí jednoduše nechápe, jak to funguje.
Vše popsané níže je ve specifikaci W3C. Bohužel ne všichni to čtou.

Popis problému:

Řekněme tedy, že máme HTML kód sestávající ze 3 prvků.
Každá z nich v sobě obsahuje jednu. A každý má zase své vlastní pozadí: červené, zelené a modré. Navíc je každý z nich umístěn absolutně u levého horního okraje dokumentu tak, že mírně překrývá ten vedle něj. První má z-index rovný 1, další dva nemají nastaven z-index.

Níže je uveden HTML kód se základním CSS designem.

Červený
Zelený
Modrý

.červená, .zelená, .modrá ( pozice: absolutní; ) .červená ( pozadí: červená; z-index: 1; ) .zelená ( pozadí: zelená; ) .modrá ( pozadí: modrá; )
Příklad na jsfiddle

Úkol: ujistěte se, že červená je za modrou a zelenou, aniž byste porušili některá z následujících pravidel:

  • Značení HTML nelze změnit
  • K prvkům nelze měnit/přidávat z-index
  • Nemůžete měnit/přidávat umístění prvků

Řešení:

Řešením je přidat o něco méně než jednu neprůhlednost k prvnímu (rodič červené).
Zde je css ilustrující toto:
div:first-child ( neprůhlednost: 0,99; )

Hmm, tady je něco špatně. Co s tím má společného transparentnost? Jak může ovlivnit pořadí překrývajících se prvků? Myslíte si totéž? Vítejte v klubu!
Doufám, že v druhé části článku vše zapadne.

Pořadí překrývajících prvků:

Z-index se zdá velmi jednoduchý: čím vyšší hodnota, tím blíže nám bude prvek, tzn. prvek se z-indexem 5 bude překrývat prvek se z-indexem 2, že? Vlastně ne.
Toto je problém z-indexu. Všechno se zdá tak zřejmé, že většina vývojářů nevěnuje studiu této problematiky dostatek času.

Jakýkoli prvek v HTML dokument může být buď v popředí, nebo v pozadí. To ví každý. Pravidla, která toto pořadí definují, jsou jasně popsána ve specifikaci, ale jak jsem uvedl výše, ne každý jim plně rozumí.

Pokud vlastnosti z-index a positioning nejsou nastaveny explicitně, je vše jednoduché: pořadí překrývání se rovná pořadí prvků v HTML. (Ve skutečnosti je to trochu složitější, ale pokud nepoužijete záporné hodnoty výplně k překrytí vložených prvků, nenarazíte na okrajové případy)

Pokud explicitně určíte umístění pro prvky (a jejich potomky), pak takové prvky budou překrývat prvky bez explicitní vlastnosti umístění. (Když říkám „explicitně specifikujte umístění“, mám na mysli jakoukoli jinou hodnotu než statickou, například: absolutní nebo relativní).

A nakonec případ, kdy je uveden z-index. Pro začátek je přirozené předpokládat, že prvky s velkým z-indexem budou nad prvky s menším z-indexem a jakýkoli prvek se sadou z-indexů bude nad prvkem bez sady z-indexů, ale toto není tomu tak. Za prvé, z-index se bere v úvahu pouze u explicitně umístěných prvků. Pokud se pokusíte nastavit z-index na neumístěném prvku, nic se nestane. Za druhé, hodnoty z-indexu mohou vytvářet překryvné kontexty. Hmm, věci se hodně zkomplikovaly, že?

Překryvný kontext

Prvky se společnými rodiči, které se společně přesouvají do popředí nebo na pozadí, se nazývají překryvný kontext. Pochopení kontextu překrývání je klíčem k pochopení z-indexu a pořadí překrývání prvků.

Každý překryvný kontext má svůj vlastní kořenový prvek ve struktuře HTML. V okamžiku, kdy se na prvku vytvoří nový kontext, všechny podřízené prvky také spadají do tohoto kontextu a zaujmou své místo v pořadí překrytí. Pokud je prvek umístěn úplně dole v kontextu jednoho překryvu, neexistuje žádný způsob, jak ho sakra zobrazit nad jiným prvkem v sousedním kontextu překryvu výše v hierarchii, i když je z-index nastavený na milion.

Nový kontext lze vytvořit v následujících případech:

  • Pokud je prvek kořenovým prvkem dokumentu (prvkem)
    Pokud prvek není staticky umístěn a jeho hodnota z-indexu není automatická
    Pokud má prvek neprůhlednost menší než 1

Problém z-indexu je v tom, že mnoho lidí jednoduše nechápe, jak to funguje.
Vše popsané níže je ve specifikaci W3C. Bohužel ne všichni to čtou.

Popis problému:

Řekněme tedy, že máme HTML kód sestávající ze 3 prvků.
Každá z nich v sobě obsahuje jednu. A každý má zase své vlastní pozadí: červené, zelené a modré. Navíc je každý z nich umístěn absolutně u levého horního okraje dokumentu tak, že mírně překrývá ten vedle něj. První má z-index rovný 1, další dva nemají nastaven z-index.

Níže je uveden HTML kód se základním CSS designem.

Červený
Zelený
Modrý

.červená, .zelená, .modrá ( pozice: absolutní; ) .červená ( pozadí: červená; z-index: 1; ) .zelená ( pozadí: zelená; ) .modrá ( pozadí: modrá; )
Příklad na jsfiddle

Úkol: ujistěte se, že červená je za modrou a zelenou, aniž byste porušili některá z následujících pravidel:

  • Značení HTML nelze změnit
  • K prvkům nelze měnit/přidávat z-index
  • Nemůžete měnit/přidávat umístění prvků

Řešení:

Řešením je přidat o něco méně než jednu neprůhlednost k prvnímu (rodič červené).
Zde je css ilustrující toto:
div:first-child ( neprůhlednost: 0,99; )

Hmm, tady je něco špatně. Co s tím má společného transparentnost? Jak může ovlivnit pořadí překrývajících se prvků? Myslíte si totéž? Vítejte v klubu!
Doufám, že v druhé části článku vše zapadne.

Pořadí překrývajících prvků:

Z-index se zdá velmi jednoduchý: čím vyšší hodnota, tím blíže nám bude prvek, tzn. prvek se z-indexem 5 bude překrývat prvek se z-indexem 2, že? Vlastně ne.
Toto je problém z-indexu. Všechno se zdá tak zřejmé, že většina vývojářů nevěnuje studiu této problematiky dostatek času.

Jakýkoli prvek v dokumentu HTML může být popředí nebo pozadí. To ví každý. Pravidla, která toto pořadí definují, jsou jasně popsána ve specifikaci, ale jak jsem uvedl výše, ne každý jim plně rozumí.

Pokud vlastnosti z-index a positioning nejsou nastaveny explicitně, je vše jednoduché: pořadí překrývání se rovná pořadí prvků v HTML. (Ve skutečnosti je to trochu složitější, ale pokud nepoužijete záporné hodnoty výplně k překrytí vložených prvků, nenarazíte na okrajové případy)

Pokud explicitně určíte umístění pro prvky (a jejich potomky), pak takové prvky budou překrývat prvky bez explicitní vlastnosti umístění. (Když říkám „explicitně specifikujte umístění“, mám na mysli jakoukoli jinou hodnotu než statickou, například: absolutní nebo relativní).

A nakonec případ, kdy je uveden z-index. Pro začátek je přirozené předpokládat, že prvky s velkým z-indexem budou nad prvky s menším z-indexem a jakýkoli prvek se sadou z-indexů bude nad prvkem bez sady z-indexů, ale toto není tomu tak. Za prvé, z-index se bere v úvahu pouze u explicitně umístěných prvků. Pokud se pokusíte nastavit z-index na neumístěném prvku, nic se nestane. Za druhé, hodnoty z-indexu mohou vytvářet překryvné kontexty. Hmm, věci se hodně zkomplikovaly, že?

Překryvný kontext

Prvky se společnými rodiči, které se společně přesouvají do popředí nebo na pozadí, se nazývají překryvný kontext. Pochopení kontextu překrývání je klíčem k pochopení z-indexu a pořadí překrývání prvků.

Každý překryvný kontext má svůj vlastní kořenový prvek ve struktuře HTML. V okamžiku, kdy se na prvku vytvoří nový kontext, všechny podřízené prvky také spadají do tohoto kontextu a zaujmou své místo v pořadí překrytí. Pokud je prvek umístěn úplně dole v kontextu jednoho překryvu, neexistuje žádný způsob, jak ho sakra zobrazit nad jiným prvkem v sousedním kontextu překryvu výše v hierarchii, i když je z-index nastavený na milion.

Nový kontext lze vytvořit v následujících případech:

  • Pokud je prvek kořenovým prvkem dokumentu (prvkem)
    Pokud prvek není staticky umístěn a jeho hodnota z-indexu není automatická
    Pokud má prvek neprůhlednost menší než 1

© 2024 ermake.ru -- O opravě PC - Informační portál