Przejścia i ochrona danych w CSS
Własne właściwości CSS, zwane też zmiennymi CSS, umożliwiają definiowanie własnych właściwości w CSS i używanie ich wartości w całym kodzie. Chociaż są one obecnie bardzo przydatne, mają też wady, które mogą utrudniać z nimi pracę. Mogą przyjmować dowolne wartości, więc mogą zostać przypadkowo zastąpione czymś nieoczekiwanym. Zawsze dziedziczą 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, zapewniając jednocześnie lepsze zrozumienie naszych stylów i możliwość rozszerzania naszego silnika renderowania. 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 interfejs Houdini Props and Vals) umożliwia nam nadanie struktury 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 można je zastąpić 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.
Przyjrzyjmy 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 tej składni, rozdzielonych 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. Na przykład<color>#
to lista kolorów rozdzielona przecinkami. - 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
.
Gotcha
W przypadku Houdini Props i Vals należy wziąć pod uwagę 2 kwestie. Po pierwsze, gdy już zdefiniujesz usługę, nie możesz zaktualizować istniejącej zarejestrowanej usługi. Próba ponownej rejestracji usługi spowoduje wyświetlenie błędu informującego, że usługa 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 nieprawidłowe wartości nie będą się wyświetlać jako nieprawidłowe podczas sprawdzania właściwości elementu, a uwzględnienie nieprawidłowej właściwości po prawidłowej nie spowoduje użycia prawidłowej właściwości. Nieprawidłowa właściwość zostanie jednak zastąpiona domyślną wartością zarejestrowanej właściwości.
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. Bez zarejestrowania właściwości będzie ona przeskakiwać z jednego koloru na inny. Ponieważ bez rejestracji przeglądarka nie wie, czego się spodziewać między jedną a drugą wartością, nie może zagwarantować możliwości przejścia między nimi. 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 samemu go wypróbować, 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 rozszerzania jego możliwości. 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. W kole linii Houdini znajdziesz więcej informacji. Możesz tam przesłać opinię i sprawdzić, co nowego w Houdini. Houdini służy do tworzenia funkcji, które wyjaśniają „magię” stylizacji i układu w internecie. Zacznij korzystać z tych magicznych funkcji.
Zdjęcie autorstwa Maik Jonietz na Unsplash