contain
Vlastnost CSS označuje do prohlížeče, že prvek a jeho potomci jsou považovány za nezávislé na stromu dokumentů, stejně jako je to možné. To potenciálně poskytuje výhody výkonu s výpočty rozložení, stylu, barvy, velikosti nebo jakékoli kombinace pro omezenou oblast modelu DOM a ne pro celou stránku.
Vlastnost má pět standardních hodnot a dvě zkratkové hodnoty, které kombinují variace standardních hodnot. Každá hodnota má některé jedinečné a sdílené výhody v závislosti na kontextu prvku, který je používá.
Typickým použitím této vlastnosti je prvek, který obsahuje obsah nějakého typu. Zvažte widget, který vykresluje příchozí data, která mění rozložení a vizuály potomků prvku. Dalším prvkem, který je třeba vzít v úvahu, je ten, který obsahuje výsledky dat třetích stran, například bannerovou reklamu, kde nám výhody kontejnmentu umožňují buď upřednostnit malování určitého obsahu, jak zacházet s velikostí přijímaného obsahu, nebo určit, zda je obsah by měl být dokonce viditelný. Naproti tomu většinou statický web získá jen malou výhodu kromě prvního rozložení a vymalování obrazovky při načtení stránky.
Syntax
div ( contain: none | strict | content | ( size || layout || style || paint ); )
div ( contain: none; /* no containment on element */ contain: layout; /* influences how element relates to other elements in the document */ contain: paint; /* influences how element is painted to screen */ contain: size; /* influences how element affects size calculations for the page */ contain: style; /* is considered at-risk for removal from spec */
contain: content; /* combines layout and paint */ contain: strict; /* combines layout, paint, and size */ )
Hodnoty vlastností
Rozložení
Hodnota layout
zadržení informuje prohlížeč, že žádný z potomků prvku nemá vliv na ostatní prvky na stránce, ani tyto ostatní prvky nemají žádný vliv na potomky obsaženého prvku. To umožňuje prohlížeči potenciálně snížit počet výpočtů nezbytných při vytváření rozložení stránky
Další výhodou je, že pokud je obsažený prvek mimo obrazovku nebo je nějakým způsobem zakryt, prohlížeč může zpozdit nebo přesunout související výpočty na nižší prioritu. Příkladem toho je obsažený prvek, který se nezobrazuje na konci blokového prvku a jeho začátek je viditelný.
Element s layout
kontejnmentem se stane boxem obsahujícím umístěné potomky - například elementy s absolutním umístěním. Prvek obdrží nový kontext skládání ve vztahu ke stránce a z-inde
lze použít vlastnost x. Směrové vlastnosti, jako například top
nebo left
, se však nepoužijí.
I když potomci obsaženého prvku nemusí ovlivňovat jiné prvky na stránce, mohou stále ovlivňovat svůj obsažený předchůdce. Potomek může například způsobit změnu velikosti obsaženého prvku v reakci na změny. V takovém případě může obsažený prvek stále potenciálně ovlivňovat další prvky na stránce, ale potomci se do těchto výpočtů stále nezapojí.
Následující ukázka poskytuje jednoduché vysvětlení toho, co se stane při použití layout
kontejnmentu. Po kliknutí na každé z horních polí se použije kontejnment a červené šipky změní vzhled. Vzhled červených šipek naznačuje, zda potomci pole ovlivňují během výpočtů rozvržení ostatní pole na stránce.
Malovat
Hodnota paint
zadržení informuje prohlížeč, že žádný z potomků prvku nebude malován mimo rámeček prvku. Pokud je potomek umístěn tak, aby část jeho ohraničujícího rámečku byla oříznuta obsaženým prvkem, border-box
pak tato část nebude malována. Pokud je potomek elementu umístěn zcela mimo obsažený element, border-box
pak není vůbec malován. Je to podobné jako overflow: hidden;
u prvku, ale bez výhod přeskočení nebo snížení potřebných výpočtů.
Další výhodou je, že pokud obsažený prvek není ve výřezu nějakým způsobem viditelný, může při provádění malířských výpočtů přeskočit jeho potomky. Příkladem je prvek, který je umístěn mimo stránku nalevo od výřezu. Pokud obsažený prvek není viditelný, je to záruka, že jeho obsah nebude viditelný. Proto se od nich nevyžaduje, aby se účastnili výpočtů barev.
Element s paint
kontejnmentem se také stane boxem obsahujícím umístěné potomky - například elementy s absolutním umístěním. Prvek také obdrží nový kontext skládání ve vztahu ke stránce a z-index
vlastnost lze použít. Směrové vlastnosti, jako například top
nebo left
, se však nepoužijí.
Rolovací prvek může získat další výhody tím, že jeho potomci budou umístěni do nové vrstvy barvy, která může pomoci s rolovacím výkonem. Normálně mohou rolovací prvky způsobit neustálé překreslování, jak se potomci během rolování objevují a mizí. Rolovací prvek s zadržováním barvy může potenciálně přeskočit toto konstantní překreslování rolování potomků.
Následující ukázka poskytuje jednoduché vysvětlení toho, co se stane při použití paint
kontejnmentu. Kliknutím kamkoli přepnete kontejnment na fialovém poli. Když je použito zadržení, některé ze zelených rámečků se změní ve vzhledu. Vzhled zelených rámečků ukazuje, jak jsou nebo nejsou vybarveny.
Velikost
Hodnota size
zadržení informuje prohlížeč, že při provádění výpočtů rozložení stránky není třeba brát v úvahu žádného z potomků. Obsažený prvek musí mít height
a width
použity vlastnosti, jinak se sbalí na čtverec nulových pixelů. Pro výpočty rozložení stránky je třeba vzít v úvahu pouze samotný prvek, protože potomci nemohou ovlivnit velikost prvku. Potomci obsaženého prvku jsou v takových výpočtech zcela přeskočeni; jako by vůbec neměl potomky.
Pro plné využití optimalizace se size
kontejnment obvykle používá u jiných typů kontejnmentu.
Prvek s size
kontejnmentem obdrží nový kontext skládání ve vztahu ke stránce a z-index
lze použít vlastnost. Směrové vlastnosti, jako například top
nebo left
, se však nepoužijí.
Následující ukázka poskytuje jednoduché vysvětlení toho, co se stane při použití size
kontejnmentu. Kliknutím kamkoli přepnete kontejnment na fialovém poli. Když je kontejnment použit, velikost fialového rámečku se změní. Ve výchozím nastavení je výška fialového pole definována jeho podřízenými prvky, ale s omezením musí být definována výška. Jakmile je kontejnment použit, potomci už nejsou zapojeni do výpočtů rozložení souvisejících s velikostí.
Styl
Hodnota style
zadržení informuje prohlížeč, že některé vlastnosti CSS, jako jsou čítače a uvozovky, budou vymezeny na obsažený prvek.
Vlastnosti counter-increment
a counter-set
musí být vymezeny na podřízený strom obsaženého prvku. Pokud se rozšíří mimo obsažený prvek, vytvoří se nový čítač.
Hodnoty vlastnosti content se k open-quote
, close-quote
, no-open-quote
a no-close-quote
musí být rozsahem uzavřeném prvku dílčího stromu.
Tato hodnota omezení je považována za rizikovou z toho, že bude odstraněna ze specifikace.
Obsah
Hodnota content
zadržení je kombinací hodnot rozložení a zadržení barvy. Toto je ekvivalent použití kontejnmentu tímto způsobem:
div ( contain: layout paint; )
Všechny potenciální výhody popsané výše pro každou hodnotu by pak byly k dispozici obsaženému prvku. Toto omezení by bylo považováno za relativně bezpečné pro široké použití na více prvcích na stránce.
Přísný
strict
Hodnota obálka je kombinací layout
, paint
a size
hodnoty pro uzavření. Toto je ekvivalent použití kontejnmentu tímto způsobem:
div ( contain: layout paint size; )
Všechny potenciální výhody popsané výše pro každou hodnotu by pak byly k dispozici obsaženému prvku.
Jako „nejpřísnější“ z hodnot zadržení by měla být tato hodnota použita s pečlivým zvážením. To je způsobeno požadavky na rozměry, které ukládá na obsažený prvek. S těmito požadavky tato hodnota kontejnmentu nabízí nejpotenciálnější výkonnostní výhody kontejnmentu.
Podpora prohlížeče
Tato data podpory prohlížeče pocházejí z Caniuse, který obsahuje více podrobností. Číslo označuje, že prohlížeč podporuje tuto funkci v dané verzi a vyšší.
plocha počítače
Chrome | Firefox | TJ | Okraj | Safari |
---|---|---|---|---|
52 | 69 | Ne | 79 | Ne |
Mobilní / Tablet
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
88 | 85 | 81 | Ne |