Data publikacji: 12 lipca 2024 r.
Przygotuj się na ulepszoną wersję CSS! Reguła @property
, która jest częścią zbioru interfejsów API CSS Houdini, jest teraz w pełni obsługiwana we wszystkich nowoczesnych przeglądarkach. Ta przełomowa funkcja zapewnia nowe możliwości kontroli i elastyczności w przypadku właściwości niestandardowych w CSS (zwanych też zmiennymi w CSS), dzięki czemu Twoje arkuszy stylów stają się inteligentniejsze i bardziej dynamiczne.
Korzyści z @property
- Znaczenie semantyczne: użyj
@property
, aby zdefiniować typ (składnię) właściwości niestandardowych. Informuje on przeglądarkę, jakiego rodzaju dane zawiera Twoja usługa niestandardowa (np. kolory, długości lub liczby), zapobiegając nieoczekiwanym wynikom i umożliwiając nowe możliwości, takie jak animacja gradientów. - Wartości zastępcze: koniec z znikającymi stylami. Aby ustawić wartość początkową właściwości niestandardowej, użyj elementu
@property
. Jeśli później zostanie przypisana nieprawidłowa wartość, przeglądarka użyje zdefiniowanego przez Ciebie wartości zastępczej. - Ulepszone obsługiwanie błędów: ulepszona ochrona typów i możliwość ustawiania wartości zastępczych otwierają nowe możliwości testowania i sprawdzania bezpośrednio w kodzie CSS.
Tworzenie zaawansowanych właściwości niestandardowych
Aby utworzyć „standardową” usługę niestandardową, ustaw nazwę usługi z przedrostkiem --
i przypisz jej wartość. Wartość tych właściwości niestandardowych jest interpretowana przez przeglądarkę jako ciąg znaków.
Poniższy przykład pokazuje, jak inicjalizować domyślną (opartą na ciągu znaków) właściwość niestandardową.
:root {
--myColor: hotpink;
}
Aby korzystać z tych „zaawansowanych właściwości niestandardowych”, w tym z semantyki wykraczającej poza ciąg znaków, zarejestruj swoją niestandardową właściwość CSS za pomocą @property
.
W tym przykładzie ta sama właściwość niestandardowa jest inicjowana za pomocą @property
.
@property --myColor {
syntax: '<color>';
inherits: false;
initial-value: hotpink;
}
Właściwość niestandardowa zainicjowana za pomocą @property
zawiera znacznie więcej szczegółów niż tylko nazwę i wartość. Zawiera typ składni i ustawia dziedziczenie na wartość prawda lub fałsz.
Zaletą tego podejścia jest to, że w przypadku właściwości standardowej oczekujesz, że zawiera ona kolor jako wartość, którego użyjesz w innym miejscu w arkuszu stylów. Jeśli ktoś zaktualizuje tę właściwość, aby miała wartość liczbową, jej użycie w innym miejscu zakończy się niepowodzeniem. W przypadku atrybutu @property
zdefiniowano kolor zapasowy, a także atrybut syntax
, który deklaruje, że ta właściwość musi zawierać wartość koloru. Jeśli zostanie użyta wartość niebędąca kolorem, zostanie użyta wartość zastępcza.
Demonstracja: tło z migotającym gradientem
Jedną z ciekawych zastosowań @property
jest płynna animacja właściwości, które wcześniej nie mogły być przekształcane, takich jak gradienty, które są postrzegane przez przeglądarkę jako obrazy. Jeśli jednak nadasz zmiennym znaczenie składniowe za pomocą @property
, możesz ich używać w oświadczeniu gradientu. Teraz definiujesz animację między 2 deklarowanymi wartościami w gradientzie, co umożliwia animację. Weź pod uwagę ten przykład: karta z subtelną animacją tła, która składa się z 2 gradientów promieniowych zmieniających kolor w różnych odstępach czasowych:
Aby to zrobić, skonfiguruj wartości właściwości niestandardowych jako kolory:
@property --card-bg {
syntax: "<color>";
inherits: false;
initial-value: lavender;
}
@property --shine-1 {
syntax: "<color>";
inherits: false;
initial-value: wheat;
}
@property --shine-2 {
syntax: "<color>";
inherits: false;
initial-value: lightpink;
}
Następnie użyj ich do utworzenia początkowego tła gradientowego:
.card {
background: radial-gradient(
300px circle at 55% 60% in oklab,
var(--shine-2), transparent 100% 100%),
radial-gradient(farthest-side circle at 75% 30% in oklab,
var(--shine-1) 0%, var(--card-bg) 100%);
}
Następnie zaktualizuj wartości w klatkach kluczowych:
@keyframes animate-color-1 {
to {
--shine-1: orange;
}
}
@keyframes animate-color-2 {
to {
--shine-2: hotpink;
}
}
I animuj je:
animation: animate-color-1 8s infinite linear alternate, animate-color-2 1s infinite linear alternate;
Podsumowanie
Zarejestrowane właściwości niestandardowe w CSS to bardzo przydatna funkcja, która rozszerza język CSS, nadając znaczenie i kontekst zmiennym CSS. Teraz, gdy @property
jest w podstawie, ta supermoc CSS zyskuje na sile.