contain
Proprietatea în CSS indică browser - ul că elementul și descendenții săi sunt considerate independent de arborele de documente cât mai mult posibil. Acest lucru oferă potențial avantaje de performanță cu calcule de aspect, stil, vopsea, dimensiune sau orice combinație pentru o zonă limitată a DOM și nu pentru întreaga pagină.
Proprietatea are cinci valori standard și două valori de prescurtare care combină variații ale valorilor standard. Fiecare valoare are unele beneficii unice și comune, în funcție de contextul elementului care le aplică.
Utilizarea tipică a acestei proprietăți este un element care conține conținut de un anumit tip. Luați în considerare un widget care redă datele primite care modifică aspectul și imaginile descendenților elementului. Un alt element de luat în considerare este cel care conține rezultatele datelor unor terțe părți, cum ar fi un anunț banner, în care beneficiile de izolare ne permit fie să prioritizăm pictarea anumitor conținut, cum să gestionăm dimensionarea conținutului primit, fie să stabilim dacă conținutul ar trebui să fie chiar vizibile. Un site cu precădere static, pe de altă parte, va beneficia de puține beneficii în afară de primul aspect și va picta pe ecran la încărcarea paginii.
Sintaxă
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 */ )
Valorile proprietății
Aspect
Valoarea de layout
izolare informează browserul că niciunul dintre descendenții elementului nu afectează alte elemente de pe pagină și nici celelalte elemente nu au niciun efect asupra descendenților elementului conținut. Acest lucru permite browserului să reducă potențial numărul de calcule necesare la crearea aspectului paginii
Un alt avantaj este că, dacă elementul conținut este în afara ecranului sau ascuns într-un fel, browserul poate întârzia sau muta calculele aferente la o prioritate mai mică. Un exemplu în acest sens este un element conținut care nu este vizibil la sfârșitul unui element de bloc și începutul acelui element de bloc este vizibil.
Un element cu layout
izolare devine o casetă de conținut pentru descendenții poziționați - cum ar fi elementele cu poziționare absolută. Elementul primește un nou context de stivuire în raport cu pagina și z-inde
proprietatea x poate fi utilizată. Deși, proprietățile direcționale, cum ar fi top
sau left
, nu se aplică.
Chiar dacă descendenții elementului conținut pot să nu influențeze alte elemente de pe pagină, totuși își pot influența elementul strămoș conținut. De exemplu, un descendent poate determina redimensionarea elementului conținut ca reacție la modificări. În acest caz, elementul conținut poate influența potențial alte elemente de pe pagină, dar descendenții nu vor fi încă implicați în aceste calcule.
Următoarea demonstrație oferă o explicație simplă pentru ceea ce se întâmplă atunci când layout
este aplicat izolația. Când faceți clic pe fiecare dintre casetele superioare, se aplică izolația și săgețile roșii vor schimba aspectul. Aspectul săgeților roșii sugerează dacă descendenții casetei afectează celelalte casete de pe pagină în timpul calculelor de aspect.
A picta
Valoarea de paint
izolare informează browserul că niciunul dintre descendenții elementului nu va fi pictat în afara casetei de margine a elementului. Dacă un element descendent este poziționat astfel încât să aibă o porțiune din cutia sa de delimitare care să fie decupată de elementul conținut, border-box
atunci acea porțiune nu va fi vopsită. Dacă un element descendent este poziționat complet în afara elementului conținut, border-box
atunci acesta nu este deloc vopsit. Acest lucru este similar cu aplicarea overflow: hidden;
la element, dar fără beneficiile de a sări peste sau de a reduce calculele necesare.
Un alt beneficiu este că, dacă elementul conținut nu este vizibil într-un fel în fereastra de vizualizare, atunci poate sări peste descendenții elementului atunci când efectuează calcule de pictură. Un exemplu în acest sens este un element plasat în afara paginii din stânga ferestrei. Dacă elementul conținut nu este vizibil, atunci este o garanție că conținutul său nu va fi vizibil. Prin urmare, nu li se cere să fie implicați în calculele vopselei.
Un element cu paint
izolare devine, de asemenea, o casetă de conținut pentru descendenții poziționați - cum ar fi elementele cu poziționare absolută. Elementul primește, de asemenea, un nou context de stivuire în raport cu pagina și z-index
proprietatea poate fi utilizată. Deși, proprietățile direcționale, cum ar fi top
sau left
, nu se aplică.
Un element de defilare poate obține avantaje suplimentare prin plasarea descendenților săi într-un nou strat de vopsea care poate ajuta la performanța defilării. În mod normal, elementele de defilare pot provoca repictări constante pe măsură ce descendenții apar și dispar în timpul defilării. Un element de defilare cu reținerea vopselei poate sări peste această repictare constantă a descendenților defilați.
Următoarea demonstrație oferă o explicație simplă pentru ceea ce se întâmplă atunci când paint
este aplicat izolația. Faceți clic oriunde pentru a comuta izolația de pe caseta mov. Când se aplică izolare, unele dintre căsuțele verzi își schimbă aspectul. Aspectul cutiilor verzi arată cum sunt vopsite sau nu vopsite.
mărimea
Valoarea de size
izolare informează browserul că niciunul dintre descendenți nu trebuie luat în considerare atunci când efectuează calcule de aspect pentru pagină. Elementul conținut trebuie să aibă height
și să aibă width
proprietăți aplicate sau se va prăbuși la zero pixeli pătrat. Numai elementul în sine trebuie luat în considerare pentru calculele aspectului paginii, deoarece descendenții nu pot influența dimensiunea elementului. Descendenții elementului conținut sunt complet săriți în astfel de calcule; de parcă nu ar avea deloc descendenți.
Pentru beneficiile complete ale optimizării, size
izolația este de obicei aplicată cu alte tipuri de izolare.
Un element cu size
izolare primește un nou context de stivuire în raport cu pagina și z-index
proprietatea poate fi utilizată. Deși, proprietățile direcționale, cum ar fi top
sau left
, nu se aplică.
Următoarea demonstrație oferă o explicație simplă pentru ceea ce se întâmplă atunci când size
se aplică izolare. Faceți clic oriunde pentru a comuta izolația de pe caseta mov. Când se aplică izolația, cutia mov schimbă dimensiunea. În mod implicit, înălțimea cutiei violete este definită de copiii săi, dar cu izolare, înălțimea trebuie definită. Odată ce se aplică izolare, descendenții nu mai sunt implicați în calculele de aspect legate de dimensiune.
Stil
Valoarea de style
izolare informează browserul că unele proprietăți CSS, cum ar fi contoare și ghilimele, vor fi cuprinse în elementul conținut.
counter-increment
Și counter-set
proprietăți trebuie să fie scoped sub-arbore a elementului conținut lui. Dacă este extins în afara elementului conținut, atunci se creează un contor nou.
Valorile proprietății de conținut de open-quote
, close-quote
, no-open-quote
și no-close-quote
trebuie să fie scoped sub-arbore a elementului conținut lui.
Această valoare de izolare este considerată cu risc de eliminare din caietul de sarcini.
Conţinut
Valoarea de content
izolare este o combinație atât a aspectului, cât și a valorilor de izolare a vopselei. Acesta este echivalentul aplicării izolației în acest mod:
div ( contain: layout paint; )
Toate beneficiile potențiale descrise mai sus pentru fiecare valoare ar fi apoi disponibile pentru elementul conținut. Această izolare ar fi considerată relativ sigură pentru a se aplica pe scară largă la mai multe elemente de pe pagină.
Strict
strict
Valoarea de izolare este o combinație a layout
, paint
și size
valorile de izolare. Acesta este echivalentul aplicării izolației în acest mod:
div ( contain: layout paint size; )
Toate beneficiile potențiale descrise mai sus pentru fiecare valoare ar fi apoi disponibile pentru elementul conținut.
Fiind „cea mai strictă” dintre valorile de izolare, această valoare trebuie utilizată cu atenție. Acest lucru se datorează cerințelor de dimensiune pe care le impune elementului conținut. Cu aceste cerințe, această valoare de izolare oferă cele mai potențiale beneficii de performanță ale izolației.
Suport pentru browser
Aceste date de asistență pentru browser provin de la Caniuse, care are mai multe detalii. Un număr indică faptul că browserul acceptă funcția în versiunea respectivă și în sus.
Desktop
Crom | Firefox | IE | Margine | Safari |
---|---|---|---|---|
52 | 69 | Nu | 79 | Nu |
Mobil / Tabletă
Android Chrome | Android Firefox | Android | Safari iOS |
---|---|---|---|
88 | 85 | 81 | Nu |