Middle
Shadow DOM nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Shadow DOM veb standartıdır və HTML, CSS və JavaScript-i əsas sənəddən ayrılmış və izolyasiya olunmuş bloklara kapsülləşdirməyə imkan verir.
Əsas anlayışlar:
- Shadow Host: Shadow DOM-un qoşulduğu DOM elementi.
- Shadow Tree: İzolyasiya olunmuş DOM ağacı.
- Shadow Boundary: Shadow DOM və əsas sənəd arasındakı sərhəd.
- Shadow Root: Shadow Tree-nin kök düyümü.
element.attachShadow({ mode: 'open' | 'closed' })ilə yaradılır:open: Shadow Root xaricdənelement.shadowRootvasitəsilə əlçatan olur.closed: Shadow Root xaricdən əlçatan deyil.
Üstünlüklər:
- Stil kapsülləşməsi: Shadow DOM-da təyin olunan stillər xaricə sızmır və əsas sənədi təsir etmir. Əsas sənədin stilləri standart olaraq Shadow DOM-u təsir etmir, lakin bu idarə oluna bilər.
- DOM kapsülləşməsi: Shadow DOM içindəki elementlər əsas DOM ağacında görünmür, bu da təsadüfi seçicilərin və manipulyasiyaların qarşısını alır.
- Davranış kapsülləşməsi: Logika və hadisə işləyiciləri Shadow DOM-da izolyasiya oluna bilər.
Shadow DOM-un yaradılması nümunəsi:
// Yeni DIV elementi yaradırıq
const hostElement = document.createElement('div');
// Shadow DOM-u elementə əlavə edirik
const shadowRoot = hostElement.attachShadow({ mode: 'open' });
// Shadow DOM-a məzmun əlavə edirik
shadowRoot.innerHTML = `
<style>
/* Yalnız bu Shadow DOM daxilində tətbiq olunan stil */
p {
color: blue;
}
</style>
<p>Bu, Shadow DOM içindəki mətn</p>
`;
// Host elementini əsas sənədə əlavə edirik
document.body.appendChild(hostElement);
Tətbiqlər:
- Yenidən istifadə edilə bilən veb komponentlərin yaradılması.
- Xarici kitabxanaların stillərinin izolyasiyası.
- Komponentin daxili detalları xarici müdaxilələrdən qorunur.
Stil ilə işləyərkən xüsusiyyətlər:
- Xarici stillər standart olaraq Shadow DOM-u təsir etmir.
:hostpseudo-sinfi istifadə edilə bilər, Shadow DOM daxilindən Shadow Host-u stilizə etmək üçün.:host-context()istifadə edilə bilər, Shadow Host-un kontekstinə əsasən stil vermək üçün.<slot>-a yerləşdirilən elementləri stilizə etmək üçün::slotted()pseudo-elementindən istifadə edilə bilər.
<my-component>
<!-- Bu element Shadow DOM daxilindəki slot-a "göndəriləcək" -->
<span>Slot məzmunu</span>
</my-component>
// my-component komponentinin Shadow DOM daxilində
const shadowRoot = this.attachShadow({ mode: 'open' });
shadowRoot.innerHTML = `
<style>
/* "my-slot" adlı slot-a yerləşdirilmiş element üçün stil */
::slotted(span) {
font-weight: bold;
}
</style>
<div>Komponentin əsas məzmunu</div>
<slot></slot> <!-- Burada slot məzmunu göstəriləcək -->
`;
Shadow DOM Web Components spesifikasiyasının bir hissəsidir.