Przejścia i ochrona danych w CSS
Własne właściwości CSS, czyli zmiennych CSS, umożliwiają definiowanie własnych właściwości w CSS i używanie ich wartości w całym kodzie. Chociaż są dziś niezwykle przydatne, mają wady, które utrudniają im pracę: mogą przyjmować dowolną wartość, przez co mogą zostać przypadkowo zastąpione czymś nieoczekiwanym. Zawsze dziedziczą swoje wartości od elementu nadrzędnego i nie można ich przenieść. Dzięki interfejsowi API właściwości i wartości CSS poziomu 1 Houdini, który jest teraz dostępny w Chrome 78, te niedociągnięcia zostały usunięte, co sprawia, że właściwości niestandardowe CSS są niesamowicie potężne.
Czym jest Houdini?
Zanim porozmawiamy o nowym interfejsie API, krótko omówimy Houdini. Grupa robocza CSS-TAG Houdini, lepiej znana jako CSS Houdini lub po prostu Houdini, istnieje po to, aby „opracowywać funkcje, które wyjaśniają 'magię' stylizacji i układu w internecie”. Kolekcja specyfikacji Houdini została zaprojektowana tak, aby wykorzystywać możliwości silnika renderowania przeglądarki, umożliwiając jednocześnie dogłębną analizę naszych stylów i rozszerzenie możliwości tego silnika. Dzięki temu można w końcu wpisywać wartości CSS w JavaScript i tworzyć polyfille lub nowe CSS bez wpływu na wydajność. Houdini może zwiększyć potencjał kreatywności w internecie.
Właściwości i wartości CSS API, poziom 1
Interfejs CSS Properties and Values API Level 1 (czyli Houdini Props and Vals) pozwala nam nadać strukturę naszym właściwościom niestandardowym. Oto obecna sytuacja w przypadku usług niestandardowych:
.thing {
--my-color: green;
}
Właściwości niestandardowe nie mają typów, więc mogą być zastępowane w nieoczekiwany sposób. Zobaczmy na przykład, co się stanie, jeśli zdefiniujesz parametr --my-color
za pomocą adresu URL.
.thing {
--my-color: url('not-a-color');
color: var(--my-color);
}
W tym przypadku, ponieważ nie wpisano wartości --my-color
, nie wiadomo, że adres URL nie jest prawidłową wartością koloru. Gdy go używamy, stosujemy wartości domyślne (czarny dla color
, przezroczysty dla background
). Dzięki Houdini Props and Vals właściwości niestandardowe mogą być rejestrowane, aby przeglądarka wiedziała, jakie powinny być wartości.
Właściwość niestandardowa --my-color
jest teraz zarejestrowana jako kolor. Informuje on przeglądarkę, jakie wartości są dozwolone i jak należy je interpretować.
Struktura zarejestrowanej usługi
Rejestrowanie usługi wygląda tak:
window.CSS.registerProperty({
name: '--my-color',
syntax: '<color>',
inherits: false,
initialValue: 'black',
});
Obsługuje on te opcje:
name: string
Nazwa właściwości niestandardowej.
syntax: string
Jak zanalizować właściwość niestandardową. Pełną listę możliwych wartości znajdziesz w specyfikacji Wartości i jednostki w usługach porównywania cen. Domyślna wartość to *
.
inherits: boolean
Czy dziedziczy wartość od jednostki nadrzędnej. Domyślna wartość to true
.
initialValue: string
Początkowa wartość właściwości niestandardowej.
Przyjrzyj się bliżej syntax
. Dostępnych jest kilka opcji, od liczb po kolory i <custom-ident>
typy. Te składnie można też modyfikować, używając tych wartości:
- Dodanie
+
oznacza, że parametr może zawierać listę wartości o takim składniku oddzielonych spacjami. Na przykład<length>+
to lista długości rozdzielona spacjami. - Dodanie
#
oznacza, że parametr może zawierać rozdzieloną przecinkami listę wartości o tej składni. Np.<color>#
byłaby rozdzielaną przecinkami listą kolorów - Dodanie
|
między składnią lub identyfikatorami oznacza, że dowolna z podanych opcji jest prawidłowa. Na przykład<color># | <url> | magic
pozwala na podanie listy kolorów oddzielonych przecinkami, adresu URL lub słowamagic
.
Gotchas
W przypadku Houdini Props i Vals należy wziąć pod uwagę 2 kwestie. Po pierwsze, po zdefiniowaniu usługi nie można już zaktualizować zarejestrowanej usługi, a próba ponownego zarejestrowania usługi spowoduje wyświetlenie błędu oznaczającego, że została już zdefiniowana.
Po drugie, w odróżnieniu od właściwości standardowych, właściwości zarejestrowane nie są weryfikowane podczas przetwarzania. Są one weryfikowane w momencie obliczeń. Oznacza to, że podczas sprawdzania właściwości elementu nieprawidłowe wartości nie będą uznawane za nieprawidłowe, a dodanie nieprawidłowej właściwości po prawidłowej wartości nie powoduje zmiany wartości domyślnej.
Animowanie właściwości niestandardowych
Zarejestrowane właściwości niestandardowe zapewniają bonus poza sprawdzaniem typu: możliwość ich animowania. Przykład prostej animacji:
<script>
CSS.registerProperty({
name: '--stop-color',
syntax: '<color>',
inherits: false,
initialValue: 'blue',
});
</script>
<style>
button {
--stop-color: red;
transition: --stop-color 1s;
}
button:hover {
--stop-color: green;
}
</style>
Gdy najedziesz na przycisk, zmieni on kolor z czerwonego na zielony. Jeśli właściwość nie zostanie zarejestrowana, usługa przełączy się z jednego koloru na drugi, ponieważ bez rejestracji przeglądarka nie wie, czego się spodziewać między wartościami i dlatego nie może zagwarantować możliwości ich przeniesienia. W tym przykładzie można jednak pójść o krok dalej i animować gradienty CSS. Ten kod CSS może być zapisywany z tą samą zarejestrowaną właściwością:
button {
--stop-color: red;
background: linear-gradient(var(--stop-color), black);
transition: --stop-color 1s;
}
button:hover {
--stop-color: green;
}
Spowoduje to animację właściwości niestandardowej, która jest częścią linear-gradient
, a tym samym animację gradientu liniowego. Aby zobaczyć kod w akcji i spróbować go samodzielnie użyć, otwórz Glitch poniżej.
Podsumowanie
Houdini jest już dostępny w przeglądarkach, a wraz z nim zupełnie nowe sposoby pracy z CSS i jego rozszerzania. Dzięki już dostępnemu interfejsowi API programu Paint oraz niestandardowym elementom i wartościom nasz zestaw narzędzi do tworzenia kreacji się powiększa, co pozwala nam definiować typowane właściwości CSS i wykorzystywać je do tworzenia i animowania nowych, ekscytujących projektów. Więcej informacji znajdziesz też w kole linii Houdini, gdzie możesz przesłać opinię i zobaczyć, co dalej z tą usługą. Houdini stworzono po to, by rozwijać funkcje objaśniające „magię” stylu i układu w internecie, więc nie zwlekaj i wykorzystaj te magiczne funkcje.
Fot. Maik Jonietz na zdjęciu Unsplash