CSS Shadow Parts
CSS Shadow Parts umožňujú štýlovať konkrétne časti komponentov, ktoré používajú Shadow DOM. To je dôležité pri WebJET komponentoch, kde je interný DOM zámerne zapuzdrený a klasické selektory zvonka nevidia vnútorné uzly.
Výhody Shadow parts
Shadow Parts umožňujú vystaviť len tie interné časti, ktoré autor komponentu považuje za bezpečné na úpravu. Zachováva sa tak zapuzdrenie a zároveň získate kontrolu nad vzhľadom konkrétnych častí bez prepisovania celej implementácie.
Použitie Shadow parts
Pri použití web komponentov so Shadow DOM nie je možné cieliť interné časti bežným selektorom. Napríklad wje-button renderuje svoj interný natívny prvok vo vnútri shadow rootu.
<wje-button>
#shadow-root
<button class="button-native" part="native"></button>
</wje-button>
Tento interný <button> je zapuzdrený, preto nasledujúci selektor nebude fungovať:
/* Nefunkčný selektor */
wje-button .button-native {
color: blue;
}
Tento problém rieši ::part(). Komponent vystavuje interný uzol s atribútom part="native", takže ho viete cieliť takto:
wje-button::part(native) {
color: blue;
}
Praktický príklad
Niektoré komponenty vystavujú viacero parts. Napríklad wje-select používa okrem iného parts ako native, input, popup alebo clear.
wje-select::part(input) {
color: #0f172a;
background: #fff;
}
How ::part works
Pseudo-element ::part() funguje len na partoch, ktoré komponent explicitne vystavil. Je to preto, aby ste mali kontrolu nad dizajnom, ale zároveň neboli naviazaní na celé interné DOM rozloženie komponentu.
Štýlovanie cez ::part() vám umožní meniť tie CSS vlastnosti, ktoré daný interný element podporuje.
WebJET Elements parts
Zoznam všetkých vystavených parts nájdete na API stránke konkrétneho komponentu v sekcii CSS Shadow Parts.
Limitácie
Kompatibilita s prehliadačmi
CSS Shadow Parts fungujú v aktuálnych verziách moderných prehliadačov. Ak potrebujete podporovať staršie prostredia, skontrolujte si kompatibilitu a zvážte, či vám postačia CSS Premenné.
Podpora prehliadačom prefixovaných pseudoelementov
pseudoelementy nie sú v súčasnosti podporované. Preto napríklad ::-webkit-scrollbar pseudoelement v príklade nižšie
nebude funkčný.
/* Nie je podporovaný */
my-component::part(scroll)::-webkit-scrollbar {
background: green;
}
Viac informácií nájdete v diskusii na GitHube.
Štrukturálne pseudotriedy
Väčšina pseudotried je podporovaná pomocou častí, avšak štrukturálne pseudotriedy nie sú podporované. Príklad štrukturálnych pseudotried, ktoré nefungujú, je uvedený nižšie.
/* Nie je podporovaný */
my-component::part(container):first-child {
background: green;
}
/* Nie je podporovaný */
my-component::part(container):last-child {
background: green;
}
Reťazenie viacerých Parts
Pseudo-element ::part() nemožno reťaziť cez viacero parts. Ak potrebujete štylizovať konkrétnu časť, použite priamo part, ktorý komponent vystavuje.
/* Nie je podporovaný */
my-component::part(button)::part(label)