Prozkoumejte pravidlo CSS @when, mocnou funkci pro podmíněnou aplikaci stylů na základě podpory prohlížeče, velikosti viewportu a dalších. Učte se s praktickými ukázkami.
Pravidlo CSS @when: Ovládněte podmíněnou aplikaci stylů
Svět CSS se neustále vyvíjí a nabízí vývojářům stále výkonnější a flexibilnější způsoby stylování webových stránek. Jednou z takových funkcí, která si získává na popularitě, je pravidlo @when
, známé také jako CSS Conditional Rules Module Level 1. Toto pravidlo umožňuje aplikovat styly CSS podmíněně, na základě splnění specifických podmínek. Je to mocný nástroj pro responzivní design, detekci funkcí a tvorbu robustnějších a přizpůsobivějších stylopisů.
Co je pravidlo CSS @when?
Pravidlo @when
je podmíněné at-pravidlo v CSS, které umožňuje definovat styly, jež se aplikují pouze v případě, že jsou splněny určité podmínky. Představte si ho jako příkaz if
pro vaše CSS. Na rozdíl od mediálních dotazů (media queries), které se primárně zaměřují na vlastnosti viewportu (velikost obrazovky, orientace atd.), @when
poskytuje obecnější a rozšiřitelnější způsob pro řešení podmíněného stylování. Rozšiřuje stávající podmíněná at-pravidla jako @supports
a @media
.
Klíčové výhody použití @when
- Zlepšená čitelnost kódu: Zapouzdřením podmíněné logiky do bloků
@when
zpřehledníte a zjednodušíte údržbu svého CSS. Záměr za konkrétními aplikacemi stylů se stává jasnějším. - Zvýšená flexibilita:
@when
dokáže zpracovat složitější podmínky než tradiční mediální dotazy, zejména v kombinaci s dotazy na funkce a logikou řízenou JavaScriptem (pomocí vlastních vlastností CSS). - Zjednodušená detekce funkcí:
@when
se bezproblémově integruje s@supports
, což vám umožňuje aplikovat styly pouze tehdy, když jsou dostupné konkrétní funkce prohlížeče. To je klíčové pro progresivní vylepšování. - Sémantičtější stylování:
@when
umožňuje stylovat prvky na základě jejich stavu nebo kontextu, což vede k sémantičtějšímu a udržovatelnějšímu CSS. Například stylování prvků na základě datových atributů nebo vlastních vlastností nastavených JavaScriptem.
Syntaxe pravidla @when
Základní syntaxe pravidla@when
je následující:
@when <condition> {
/* Pravidla CSS, která se aplikují, když je podmínka splněna */
}
<condition>
může být jakýkoli platný booleovský výraz, který se vyhodnotí jako pravda (true) nebo nepravda (false). Tento výraz často zahrnuje:
- Mediální dotazy (Media Queries): Podmínky založené na vlastnostech viewportu (např. šířka obrazovky, orientace zařízení).
- Dotazy na funkce (@supports): Podmínky založené na podpoře konkrétních funkcí CSS v prohlížeči.
- Booleovská algebra: Kombinace více podmínek pomocí logických operátorů (
and
,or
,not
).
Praktické příklady @when v akci
Prozkoumejme několik praktických příkladů, které ilustrují sílu a všestrannost pravidla@when
.
1. Responzivní design s @when a mediálními dotazy
Nejčastějším případem použití @when
je responzivní design, kde upravujete styly na základě velikosti obrazovky. Ačkoli toho lze dosáhnout i samotnými mediálními dotazy, @when
poskytuje strukturovanější a čitelnější přístup, zejména při práci se složitějšími podmínkami.
@when (min-width: 768px) and (max-width: 1023px) {
body {
font-size: 18px;
line-height: 1.6;
}
.container {
width: 720px;
margin: 0 auto;
}
}
V tomto příkladu se styly v bloku @when
aplikují pouze tehdy, když je šířka obrazovky mezi 768px a 1023px (typická velikost tabletu). To poskytuje jasný a stručný způsob, jak definovat styly pro specifické rozsahy viewportu.
Poznámka k internacionalizaci: Responzivní design je klíčový pro globální publikum. Zvažte různé velikosti obrazovek v různých regionech. Například v některých zemích je využití mobilních zařízení vyšší, což činí přístup „mobile-first“ ještě důležitějším.
2. Detekce funkcí s @when a @supports
Pravidlo @when
lze kombinovat s @supports
pro aplikaci stylů pouze v případě, že prohlížeč podporuje konkrétní funkci CSS. To vám umožní progresivně vylepšovat vaše webové stránky, poskytovat lepší zážitek uživatelům s moderními prohlížeči a zároveň zachovat kompatibilitu se staršími.
@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 {
/* Záložní styly pro prohlížeče, které nepodporují grid */
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.item {
width: calc(50% - 10px); /* Úprava šířky pro starší prohlížeče */
}
}
Zde používáme @supports
ke kontrole, zda prohlížeč podporuje CSS Grid Layout. Pokud ano, aplikujeme na .container
styly založené na gridu. Pokud ne, poskytneme záložní styly pomocí flexboxu, abychom zajistili dosažení podobného rozvržení ve starších prohlížečích.
Poznámka ke globální přístupnosti: Detekce funkcí je důležitá pro přístupnost. Starší prohlížeče nemusí podporovat novější atributy ARIA nebo sémantické prvky HTML5. Poskytněte vhodné záložní řešení (fallbacks), abyste zajistili, že obsah zůstane přístupný.
3. Kombinace mediálních dotazů a dotazů na funkce
Skutečná síla @when
spočívá v jeho schopnosti kombinovat mediální dotazy a dotazy na funkce pro vytváření složitějších a jemnějších pravidel pro podmíněné stylování.
@when (min-width: 768px) and supports(backdrop-filter: blur(10px)) {
.modal {
background-color: rgba(255, 255, 255, 0.8);
backdrop-filter: blur(10px);
}
}
V tomto příkladu bude mít prvek .modal
rozmazané pozadí pouze tehdy, když je šířka obrazovky alespoň 768px a zároveň prohlížeč podporuje vlastnost backdrop-filter
. To vám umožní vytvářet vizuálně atraktivní efekty v moderních prohlížečích a zároveň se vyhnout potenciálním problémům s výkonem nebo vykreslováním v těch starších.
4. Stylování na základě vlastních vlastností (CSS proměnných)
Pravidlo @when
lze také použít ve spojení s vlastními vlastnostmi CSS (známými také jako CSS proměnné) k vytváření dynamického a stavového stylování. Pomocí JavaScriptu můžete aktualizovat hodnotu vlastní vlastnosti a poté pomocí @when
aplikovat různé styly na základě této hodnoty.
Nejprve definujte vlastní vlastnost:
:root {
--theme-color: #007bff; /* Výchozí barva motivu */
--is-dark-mode: false;
}
Poté použijte @when
k aplikaci stylů na základě hodnoty vlastní vlastnosti:
@when var(--is-dark-mode) = true {
body {
background-color: #333;
color: #fff;
}
a {
color: #ccc;
}
}
Nakonec použijte JavaScript k přepínání hodnoty vlastní vlastnosti --is-dark-mode
:
document.getElementById('darkModeToggle').addEventListener('click', function() {
document.documentElement.style.setProperty('--is-dark-mode', this.checked);
});
To umožňuje uživatelům přepínat mezi světlým a tmavým motivem, přičemž CSS se dynamicky aktualizuje na základě hodnoty vlastní vlastnosti. Všimněte si, že přímé porovnávání CSS proměnných v @when
nemusí být univerzálně podporováno ve všech prohlížečích. Místo toho možná budete muset použít náhradní řešení s mediálním dotazem, který kontroluje nenulovou hodnotu:
@when ( --is-dark-mode > 0 ) { ... }
Ujistěte se však, že vlastní vlastnost má pro správnou funkci číselnou hodnotu.
Poznámka k přístupnosti: Poskytování alternativních motivů (např. tmavého režimu) je klíčové pro přístupnost. Uživatelé se zrakovým postižením mohou těžit z motivů s vysokým kontrastem. Zajistěte, aby byl váš přepínač motivů přístupný pomocí klávesnice a čteček obrazovky.
5. Stylování na základě datových atributů
Můžete také použít @when
s datovými atributy ke stylování prvků na základě jejich datových hodnot. To může být užitečné pro vytváření dynamických rozhraní, kde prvky mění vzhled na základě interakce uživatele nebo aktualizací dat.
Řekněme například, že máte seznam úkolů a každý úkol má atribut data-status
, který udává jeho stav (např. „todo“, „in-progress“, „completed“). Pomocí @when
můžete každý úkol nastylovat odlišně podle jeho stavu.
[data-status="todo"] {
/* Výchozí styly pro úkoly todo */
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;
}
}
Poznámka: podpora pro testovací podmínku attribute() může být v současnosti omezená nebo ne plně implementovaná ve všech prohlížečích. Vždy důkladně testujte.
Kompatibilita s prohlížeči a polyfilly
Koncem roku 2024 je podpora pravidla @when
v prohlížečích stále ve vývoji. Zatímco mnoho moderních prohlížečů podporuje základní funkcionalitu, některé starší prohlížeče ji nemusí podporovat. Proto je klíčové kontrolovat tabulky kompatibility a v případě potřeby používat vhodné záložní řešení (fallbacks) nebo polyfilly.
Aktuální stav podpory pravidla @when
a souvisejících funkcí si vždy ověřte na zdrojích, jako je Can I use....
Nejlepší postupy pro používání @when
- Udržujte podmínky jednoduché: Vyhněte se příliš složitým podmínkám v blocích
@when
. Rozdělte složitou logiku na menší, lépe spravovatelné části. - Poskytujte záložní řešení: Vždy poskytujte záložní styly pro prohlížeče, které nepodporují funkce, které používáte ve svých pravidlech
@when
. Tím zajistíte konzistentní zážitek napříč různými prohlížeči. - Důkladně testujte: Testujte své CSS v různých prohlížečích a na různých zařízeních, abyste se ujistili, že vaše pravidla
@when
fungují podle očekávání. - Používejte smysluplné komentáře: Přidávejte do svého CSS komentáře, které vysvětlují účel každého pravidla
@when
a podmínky, na kterých je založeno. To usnadní pochopení a údržbu vašeho kódu. - Zvažte výkon: Vyhněte se nadměrnému používání pravidel
@when
, protože mohou potenciálně ovlivnit výkon. Optimalizujte své CSS, abyste minimalizovali počet pravidel, která je třeba vyhodnotit.
Závěr
Pravidlo @when
je mocným doplňkem do sady nástrojů CSS a nabízí vývojářům flexibilnější a expresivnější způsob, jak podmíněně aplikovat styly. Kombinací s mediálními dotazy, dotazy na funkce a vlastními vlastnostmi CSS můžete vytvářet robustnější, přizpůsobivější a udržovatelnější stylopisy. Ačkoli se podpora v prohlížečích stále vyvíjí, @when
je funkce, kterou stojí za to prozkoumat a začlenit do vašeho moderního pracovního postupu při vývoji webu.
Jak se web neustále vyvíjí, zvládnutí funkcí, jako je @when
, bude nezbytné pro vytváření poutavých, přístupných a výkonných zážitků pro uživatele po celém světě. Využijte sílu podmíněného stylování a odemkněte nové možnosti ve svém vývoji CSS.