Odkryj regułę CSS @when, potężną funkcję umożliwiającą warunkowe stosowanie stylów w oparciu o wsparcie przeglądarki, rozmiar widoku i inne. Ucz się na praktycznych przykładach.
Reguła CSS @when: Opanowanie warunkowego stosowania stylów
Świat CSS nieustannie ewoluuje, oferując deweloperom coraz potężniejsze i bardziej elastyczne sposoby stylizowania stron internetowych. Jedną z takich funkcji zyskujących na popularności jest reguła @when
, znana również jako CSS Conditional Rules Module Level 1. Reguła ta pozwala na warunkowe stosowanie stylów CSS, w oparciu o spełnienie określonych warunków. Jest to potężne narzędzie do responsywnego projektowania, wykrywania funkcji oraz tworzenia bardziej solidnych i adaptowalnych arkuszy stylów.
Czym jest reguła CSS @when?
Reguła @when
to warunkowa dyrektywa (@-rule) w CSS, która pozwala definiować style stosowane tylko wtedy, gdy określone warunki są prawdziwe. Można o niej myśleć jak o instrukcji if
dla CSS. W przeciwieństwie do zapytań o media (media queries), które koncentrują się głównie na charakterystyce widoku (rozmiar ekranu, orientacja itp.), @when
zapewnia bardziej ogólny i rozszerzalny sposób obsługi stylizacji warunkowej. Rozszerza ona istniejące warunkowe dyrektywy, takie jak @supports
i @media
.
Kluczowe zalety używania @when
- Lepsza czytelność kodu: Zamykając logikę warunkową w blokach
@when
, sprawiasz, że Twój CSS jest łatwiejszy do zrozumienia i utrzymania. Intencja stojąca za konkretnymi zastosowaniami stylów staje się jaśniejsza. - Zwiększona elastyczność:
@when
może obsługiwać bardziej złożone warunki niż tradycyjne zapytania o media, szczególnie w połączeniu z zapytaniami o funkcje i logiką opartą na JavaScript (przy użyciu niestandardowych właściwości CSS). - Uproszczone wykrywanie funkcji:
@when
bezproblemowo integruje się z@supports
, pozwalając na stosowanie stylów tylko wtedy, gdy dostępne są określone funkcje przeglądarki. Jest to kluczowe dla progressive enhancement (stopniowego ulepszania). - Bardziej semantyczna stylizacja:
@when
pozwala na stylizowanie elementów na podstawie ich stanu lub kontekstu, co prowadzi do bardziej semantycznego i łatwiejszego w utrzymaniu CSS. Na przykład, stylizowanie elementów na podstawie atrybutów danych lub niestandardowych właściwości ustawionych przez JavaScript.
Składnia reguły @when
Podstawowa składnia reguły@when
jest następująca:
@when <condition> {
/* Reguły CSS do zastosowania, gdy warunek jest prawdziwy */
}
<condition>
może być dowolnym poprawnym wyrażeniem logicznym, które zwraca prawdę lub fałsz. Wyrażenie to często obejmuje:
- Zapytania o media (Media Queries): Warunki oparte na charakterystyce widoku (np. szerokość ekranu, orientacja urządzenia).
- Zapytania o funkcje (@supports): Warunki oparte na wsparciu przeglądarki dla określonych funkcji CSS.
- Algebra Boole'a: Łączenie wielu warunków za pomocą operatorów logicznych (
and
,or
,not
).
Praktyczne przykłady użycia @when
Przyjrzyjmy się kilku praktycznym przykładom, aby zilustrować moc i wszechstronność reguły @when
.
1. Responsywny design z @when i zapytaniami o media
Najczęstszym przypadkiem użycia @when
jest responsywny design, w którym dostosowujesz style w zależności od rozmiaru ekranu. Chociaż zapytania o media mogą to osiągnąć samodzielnie, @when
zapewnia bardziej ustrukturyzowane i czytelne podejście, zwłaszcza w przypadku złożonych warunków.
@when (min-width: 768px) and (max-width: 1023px) {
body {
font-size: 18px;
line-height: 1.6;
}
.container {
width: 720px;
margin: 0 auto;
}
}
W tym przykładzie style w bloku @when
są stosowane tylko wtedy, gdy szerokość ekranu mieści się w przedziale od 768px do 1023px (typowy rozmiar tabletu). Zapewnia to jasny i zwięzły sposób definiowania stylów dla określonych zakresów widoku.
Uwaga dotycząca internacjonalizacji: Responsywny design jest kluczowy dla globalnej publiczności. Należy wziąć pod uwagę różne rozmiary ekranów w różnych regionach. Na przykład, w niektórych krajach wykorzystanie urządzeń mobilnych jest wyższe, co czyni projektowanie w podejściu mobile-first jeszcze ważniejszym.
2. Wykrywanie funkcji z @when i @supports
@when
można łączyć z @supports
, aby stosować style tylko wtedy, gdy dana funkcja CSS jest obsługiwana przez przeglądarkę. Pozwala to na stopniowe ulepszanie witryny, zapewniając lepsze doświadczenia użytkownikom z nowoczesnymi przeglądarkami, jednocześnie zachowując kompatybilność ze starszymi.
@when supports(display: grid) {
.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
grid-gap: 20px;
}
}
@when not supports(display: grid) {
.container {
/* Style zastępcze dla przeglądarek, które nie obsługują siatki */
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.item {
width: calc(50% - 10px); /* Dostosuj szerokość dla starszych przeglądarek */
}
}
Tutaj używamy @supports
, aby sprawdzić, czy przeglądarka obsługuje CSS Grid Layout. Jeśli tak, stosujemy style oparte na siatce do kontenera .container
. Jeśli nie, zapewniamy style zastępcze (fallback) przy użyciu flexbox, aby zapewnić podobny układ w starszych przeglądarkach.
Globalna uwaga dotycząca dostępności: Wykrywanie funkcji jest ważne dla dostępności. Starsze przeglądarki mogą nie obsługiwać nowszych atrybutów ARIA lub semantycznych elementów HTML5. Zapewnij odpowiednie style zastępcze, aby treść pozostała dostępna.
3. Łączenie zapytań o media i zapytań o funkcje
Prawdziwa moc @when
pochodzi z jej zdolności do łączenia zapytań o media i zapytań o funkcje w celu tworzenia bardziej złożonych i zniuansowanych reguł stylizacji warunkowej.
@when (min-width: 768px) and supports(backdrop-filter: blur(10px)) {
.modal {
background-color: rgba(255, 255, 255, 0.8);
backdrop-filter: blur(10px);
}
}
W tym przykładzie element .modal
będzie miał rozmyte tło tylko wtedy, gdy szerokość ekranu wynosi co najmniej 768px oraz przeglądarka obsługuje właściwość backdrop-filter
. Pozwala to na tworzenie atrakcyjnych wizualnie efektów w nowoczesnych przeglądarkach, unikając jednocześnie potencjalnych problemów z wydajnością lub błędów renderowania w starszych.
4. Stylizacja oparta na niestandardowych właściwościach (zmiennych CSS)
@when
może być również używane w połączeniu z niestandardowymi właściwościami CSS (znanymi również jako zmienne CSS) do tworzenia dynamicznej i opartej na stanie stylizacji. Możesz użyć JavaScriptu do aktualizacji wartości niestandardowej właściwości, a następnie użyć @when
do zastosowania różnych stylów w oparciu o tę wartość.
Najpierw zdefiniuj niestandardową właściwość:
:root {
--theme-color: #007bff; /* Domyślny kolor motywu */
--is-dark-mode: false;
}
Następnie użyj @when
, aby zastosować style na podstawie wartości niestandardowej właściwości:
@when var(--is-dark-mode) = true {
body {
background-color: #333;
color: #fff;
}
a {
color: #ccc;
}
}
Na koniec użyj JavaScriptu, aby przełączyć wartość niestandardowej właściwości --is-dark-mode
:
document.getElementById('darkModeToggle').addEventListener('click', function() {
document.documentElement.style.setProperty('--is-dark-mode', this.checked);
});
Pozwala to użytkownikom przełączać się między jasnym i ciemnym motywem, przy czym CSS dynamicznie aktualizuje się w oparciu o wartość niestandardowej właściwości. Należy pamiętać, że bezpośrednie porównywanie zmiennych CSS w @when
może nie być powszechnie obsługiwane we wszystkich przeglądarkach. Zamiast tego może być konieczne użycie obejścia z zapytaniem o media sprawdzającym wartość niezerową:
@when ( --is-dark-mode > 0 ) { ... }
Jednakże, upewnij się, że niestandardowa właściwość ma wartość numeryczną, aby to działało poprawnie.
Uwaga dotycząca dostępności: Zapewnienie alternatywnych motywów (np. trybu ciemnego) jest kluczowe dla dostępności. Użytkownicy z upośledzeniami wzroku mogą odnieść korzyści z motywów o wysokim kontraście. Upewnij się, że przełącznik motywu jest dostępny za pomocą klawiatury i czytników ekranu.
5. Stylizacja oparta na atrybutach danych
Możesz również używać @when
z atrybutami danych, aby stylizować elementy na podstawie ich wartości. Może to być przydatne do tworzenia dynamicznych interfejsów, w których elementy zmieniają wygląd w zależności od interakcji użytkownika lub aktualizacji danych.
Załóżmy na przykład, że masz listę zadań, a każde zadanie ma atrybut data-status
, który wskazuje jego status (np. "todo", "in-progress", "completed"). Możesz użyć @when
, aby inaczej stylizować każde zadanie w zależności od jego statusu.
[data-status="todo"] {
/* Domyślne style dla zadań do zrobienia */
color: #333;
}
@when attribute(data-status string equals "in-progress") {
[data-status="in-progress"] {
color: orange;
font-style: italic;
}
}
@when attribute(data-status string equals "completed") {
[data-status="completed"] {
color: green;
text-decoration: line-through;
}
}
Uwaga: wsparcie dla warunku testowego attribute() może być obecnie ograniczone lub nie w pełni zaimplementowane we wszystkich przeglądarkach. Zawsze dokładnie testuj.
Kompatybilność z przeglądarkami i polyfille
Pod koniec 2024 roku wsparcie przeglądarek dla reguły @when
wciąż ewoluuje. Chociaż wiele nowoczesnych przeglądarek obsługuje podstawową funkcjonalność, niektóre starsze mogą tego nie robić. Dlatego kluczowe jest sprawdzanie tabel kompatybilności i stosowanie odpowiednich stylów zastępczych lub polyfilli tam, gdzie to konieczne.
Zawsze konsultuj źródła takie jak Can I use..., aby sprawdzić aktualny stan wsparcia przeglądarek dla @when
i powiązanych funkcji.
Najlepsze praktyki używania @when
- Utrzymuj proste warunki: Unikaj zbyt skomplikowanych warunków w blokach
@when
. Dziel złożoną logikę na mniejsze, łatwiejsze do zarządzania części. - Zapewnij style zastępcze: Zawsze zapewniaj style zastępcze (fallback) dla przeglądarek, które nie obsługują funkcji używanych w regułach
@when
. Zapewni to spójne doświadczenie w różnych przeglądarkach. - Testuj dokładnie: Testuj swój CSS w różnych przeglądarkach i na różnych urządzeniach, aby upewnić się, że reguły
@when
działają zgodnie z oczekiwaniami. - Używaj znaczących komentarzy: Dodawaj komentarze do swojego CSS, aby wyjaśnić cel każdej reguły
@when
i warunki, na których się opiera. Ułatwi to zrozumienie i utrzymanie kodu. - Weź pod uwagę wydajność: Unikaj nadmiernego używania reguł
@when
, ponieważ mogą one potencjalnie wpływać na wydajność. Optymalizuj swój CSS, aby zminimalizować liczbę reguł, które muszą być oceniane.
Wnioski
Reguła @when
jest potężnym dodatkiem do zestawu narzędzi CSS, oferującym deweloperom bardziej elastyczny i wyrazisty sposób na warunkowe stosowanie stylów. Łącząc ją z zapytaniami o media, zapytaniami o funkcje i niestandardowymi właściwościami CSS, możesz tworzyć bardziej solidne, adaptowalne i łatwiejsze w utrzymaniu arkusze stylów. Chociaż wsparcie przeglądarek wciąż ewoluuje, @when
to funkcja warta zbadania i włączenia do nowoczesnego przepływu pracy przy tworzeniu stron internetowych.
W miarę jak sieć internetowa wciąż się rozwija, opanowanie funkcji takich jak @when
będzie kluczowe do tworzenia angażujących, dostępnych i wydajnych doświadczeń dla użytkowników na całym świecie. Wykorzystaj moc stylizacji warunkowej i odblokuj nowe możliwości w tworzeniu CSS.