Middle
Shadow DOM nima?
sobes.tech AI
AIdan javob
Shadow DOM — bu veb standart, u yordamida HTML, CSS va JavaScriptni asosiy hujjatdan ajratilgan va izolyatsiya qilingan bloklarga kapsüllash mumkin.
Asosiy tushunchalar:
- Shadow Host: Shadow DOM qoʻshilgan DOM element.
- Shadow Tree: Izolyatsiya qilingan DOM daraxti.
- Shadow Boundary: Shadow DOM va asosiy hujjat oʻrtasidagi chegarasi.
- Shadow Root: Shadow Tree ning ildiz tuguni.
element.attachShadow({ mode: 'open' | 'closed' })yordamida yaratiladi:open: Shadow Root tashqaridanelement.shadowRootorqali kirish mumkin.closed: Shadow Root tashqaridan kirish mumkin emas.
Afzalliklar:
- Stil kapsüllash: Shadow DOMda belgilangan uslublar tashqariga oqmaydi va asosiy hujjatga taʼsir qilmaydi. Asosiy hujjat uslublari odatda Shadow DOMga taʼsir qilmaydi, lekin bu nazorat qilinishi mumkin.
- DOM kapsüllash: Shadow DOM ichidagi elementlar asosiy DOM daraxtida ko'rinmaydi, bu tasodifiy selektorlar va manipulyatsiyalarni oldini oladi.
- Xulq-atvor kapsüllash: Mantiq va voqea ishlovchilari Shadow DOMda izolyatsiya qilinishi mumkin.
Shadow DOM yaratish misoli:
// Yangi DIV elementini yaratamiz
const hostElement = document.createElement('div');
// Shadow DOMni elementga qo'shamiz
const shadowRoot = hostElement.attachShadow({ mode: 'open' });
// Shadow DOMga mazmun qo'shamiz
shadowRoot.innerHTML = `
<style>
/* Faqat bu Shadow DOM ichida amal qiladi */
p {
color: blue;
}
</style>
<p>Bu, Shadow DOM ichidagi matn</p>
`;
// Host elementni asosiy hujjatga qo'shamiz
document.body.appendChild(hostElement);
Qoʻllanmalari:
- Web komponentlarini qayta ishlatish uchun.
- Tashqi kutubxonalar uslublarini izolyatsiya qilish uchun.
- Komponentning ichki tafsilotlarini tashqi aralashuvlardan himoya qilish uchun.
Uslublar bilan ishlash xususiyatlari:
- Tashqi uslublar odatda Shadow DOMga taʼsir qilmaydi.
:hostpseudo-sinfidan foydalanib, Shadow Hostni Shadow DOM ichidan uslublash mumkin.:host-context()yordamida kontekstga asoslangan uslublash mumkin.<slot>ga joylashtirilgan elementlarni uslublash uchun::slotted()pseudo-elementidan foydalanish mumkin.
<my-component>
<!-- Bu element Shadow DOM ichidagi slotga "jo'natiladi" -->
<span>Slot mazmuni</span>
</my-component>
// my-component komponentining Shadow DOM ichida
const shadowRoot = this.attachShadow({ mode: 'open' });
shadowRoot.innerHTML = `
<style>
/* "my-slot" nomli slotga joylashtirilgan element uchun uslub */
::slotted(span) {
font-weight: bold;
}
</style>
<div>Komponentning asosiy mazmuni</div>
<slot></slot> <!-- Bu yerda slot mazmuni ko'rsatiladi -->
`;
Shadow DOM Web Components spetsifikatsiyasining bir qismidir.