Frigör kraften i CSS @when för dynamiska och responsiva webbupplevelser. LÀr dig att tillÀmpa stilar baserat pÄ olika villkor med tydliga exempel.
CSS @when: BemÀstra villkorlig styling för modern webbdesign
I det stÀndigt förÀnderliga landskapet för webbutveckling Àr förmÄgan att skapa dynamiska och responsiva anvÀndargrÀnssnitt av yttersta vikt. CSS, hörnstenen i visuell presentation, fortsÀtter att introducera kraftfulla funktioner som ger utvecklare möjlighet att bygga mer intelligenta och anpassningsbara webbplatser. En sÄdan banbrytande funktion Àr @when
-at-regeln, som möjliggör villkorlig styling, vilket gör att vi kan tillÀmpa CSS-regler endast nÀr specifika villkor Àr uppfyllda. Detta öppnar upp en vÀrld av möjligheter för att skapa verkligt responsiva och kontextmedvetna designer.
Vad Àr CSS @when?
@when
-at-regeln Àr ett kraftfullt tillÀgg till CSS-specifikationen som fungerar tillsammans med @media
- eller @supports
-reglerna. Den fungerar som ett villkorligt block, vilket innebÀr att CSS-deklarationerna inom dess omfÄng endast kommer att tillÀmpas om det angivna villkoret utvÀrderas till sant. I grund och botten ger den ett mer detaljerat och uttrycksfullt sÀtt att kontrollera nÀr vissa stilar Àr aktiva, och gÄr bortom den traditionella blocknivÄvillkoren för enbart @media
-frÄgor.
TÀnk pÄ det som en högst förfinad `if`-sats för din CSS. IstÀllet för att tillÀmpa en hel uppsÀttning stilar baserat pÄ ett brett villkor, lÄter @when
dig rikta in dig pÄ specifika deklarationer inom en regel, vilket gör dina stilmallar mer effektiva och underhÄllbara.
Synergin: @when med @media och @supports
Den sanna kraften i @when
förverkligas nÀr den anvÀnds i kombination med befintliga villkorliga at-regler:
1. @when med @media-frÄgor
Detta Àr utan tvekan det vanligaste och mest effektfulla anvÀndningsfallet för @when
. Traditionellt sett skulle du kanske omsluta hela CSS-regler inom en @media
-frÄga. Med @when
kan du nu villkorligt tillÀmpa specifika deklarationer inom en regel baserat pÄ mediafrÄgevillkor.
Exempel: Responsiv typografi
LÄt oss sÀga att du vill justera teckenstorleken för ett stycke, men bara nÀr visningsomrÄdet Àr bredare Àn 768 pixlar. Utan @when
skulle du kanske göra sÄ hÀr:
.my-paragraph {
font-size: 16px;
}
@media (min-width: 768px) {
.my-paragraph {
font-size: 18px;
}
}
Nu, med @when
, kan du uppnÄ samma resultat mer koncist och med större kontroll:
.my-paragraph {
font-size: 16px;
@when (min-width: 768px) {
font-size: 18px;
}
}
I detta exempel:
- Basstorleken
font-size
pÄ16px
tillÀmpas alltid. font-size
pÄ18px
tillÀmpas endast nÀr visningsomrÄdets bredd Àr 768 pixlar eller mer.
Denna metod Àr otroligt anvÀndbar för att göra detaljerade justeringar av specifika egenskaper baserat pÄ skÀrmstorlek, orientering eller andra mediefunktioner, utan att duplicera hela regeluppsÀttningar.
Globalt exempel: Anpassa UI-element för olika enheter
TÀnk dig en global e-handelsplattform. Ett produktkort kan visa en kompakt vy pÄ mobila enheter men en mer detaljerad vy pÄ större skÀrmar. Med @when
och @media
kan du elegant hantera dessa övergÄngar:
.product-card {
padding: 10px;
text-align: center;
@when (min-width: 600px) {
padding: 20px;
text-align: left;
}
@when (min-width: 1024px) {
padding: 30px;
display: flex;
align-items: center;
}
}
.product-image {
width: 100%;
height: 150px;
@when (min-width: 600px) {
width: 200px;
height: 200px;
}
@when (min-width: 1024px) {
width: 250px;
height: 250px;
margin-right: 20px;
}
}
Detta gör att .product-card
och dess interna element som .product-image
kan anpassa sina stilar progressivt nÀr visningsomrÄdets storlek ökar, vilket ger en skrÀddarsydd upplevelse över ett brett spektrum av enheter globalt.
2. @when med @supports-frÄgor
@supports
-at-regeln lÄter dig kontrollera om en webblÀsare stöder ett specifikt CSS-egenskap-vÀrde-par. Genom att kombinera den med @when
kan du villkorligt tillÀmpa stilar endast nÀr en viss webblÀsarfunktion Àr tillgÀnglig.
Exempel: AnvÀnda en ny CSS-funktion
FörestÀll dig att du vill anvÀnda den experimentella egenskapen backdrop-filter
. Inte alla webblÀsare eller Àldre versioner stöder detta. Du kan anvÀnda @when
med @supports
för att tillÀmpa det pÄ ett smidigt sÀtt:
.modal-background {
background-color: rgba(0, 0, 0, 0.5);
@when supports (backdrop-filter: blur(10px)) {
backdrop-filter: blur(10px);
}
}
I detta fall:
background-color
tillÀmpas alltid som en reservlösning.backdrop-filter
tillÀmpas endast nÀr webblÀsaren stöder deklarationenbackdrop-filter: blur(10px)
.
Detta Àr avgörande för progressiv förbÀttring, vilket sÀkerstÀller att din design Àr funktionell och visuellt tilltalande Àven i miljöer som inte stöder de senaste CSS-funktionerna.
Globalt exempel: Progressiv förbÀttring för animationer
TÀnk dig en webbplats med subtila animationer. Vissa avancerade animationer kan förlita sig pÄ nyare CSS-egenskaper som animation-composition
eller specifika easing-funktioner. Du kan anvÀnda @when
och @supports
för att erbjuda en reservlösning eller en enklare animation för webblÀsare som inte stöder dessa avancerade egenskaper.
.animated-element {
transform: translateX(0);
transition: transform 0.5s ease-in-out;
@when supports (animation-composition: replace) {
/* Mer avancerade animationsegenskaper eller sekvenser */
animation: slideIn 1s forwards;
animation-composition: replace;
animation-timing-function: cubic-bezier(0.25, 0.1, 0.25, 1);
}
}
@keyframes slideIn {
from { transform: translateX(-100%); }
to { transform: translateX(0); }
}
HÀr kommer webblÀsare som stöder animation-composition: replace
att fÄ en mer sofistikerad animationssekvens, medan andra kommer att falla tillbaka pÄ den enklare transition
-egenskapen, vilket sÀkerstÀller en konsekvent, om Àn varierad, upplevelse för anvÀndare över hela vÀrlden.
3. Kombinera @when med flera villkor
Du kan ocksÄ kedja flera villkor inom en enda @when
-regel, vilket skapar Ànnu mer specifik stylinglogik. Detta görs med logiska operatorer som and
, or
och not
.
Exempel: Komplex responsiv logik
LÄt oss förestÀlla oss ett scenario dÀr en sidofÀlt endast ska döljas pÄ mindre skÀrmar, men bara om en specifik anvÀndarinstÀllning (hypotetiskt indikerad av en klass pÄ body-elementet) inte Àr aktiv.
.sidebar {
display: block;
width: 250px;
/* Dölj sidofÀlt pÄ smÄ skÀrmar OCH inte i preferenslÀge */
@when (max-width: 767px) and not (.no-sidebar-on-mobile) {
display: none;
}
/* Visa sidofÀlt pÄ större skÀrmar ELLER om preferenslÀge Àr aktivt pÄ smÄ skÀrmar */
@when (min-width: 768px) or (.sidebar-on-mobile) {
display: block;
}
}
Denna nivÄ av villkorlig styling möjliggör mycket invecklade UI-beteenden som Àr skrÀddarsydda för specifika sammanhang och anvÀndarinteraktioner.
Syntax och bÀsta praxis
Grundsyntaxen för @when
Ă€r enkel:
selector {
property: value;
@when (condition) {
property: value;
}
}
NĂ€r man kombinerar flera villkor blir syntaxen:
selector {
property: value;
@when (condition1) and (condition2) {
property: value;
}
@when (condition1) or (condition2) {
property: value;
}
@when not (condition) {
property: value;
}
}
Viktiga bÀsta praxis:
- Prioritera lĂ€sbarhet: Ăven om
@when
kan göra stilar mer koncisa, undvik alltför komplexa nÀstlade villkor som kan bli svÄra att tolka. Bryt ner komplex logik i separata regler om det behövs. - Progressiv förbÀttring: TillhandahÄll alltid en smidig reservlösning för webblÀsare eller miljöer som inte stöder de funktioner som dina
@when
-regler riktar sig till, sÀrskilt nÀr de anvÀnds med@supports
. - Prestanda: Ăven om
@when
i sig Àr generellt effektivt, var medveten om alltför komplex villkorlig logik som kan pÄverka tolkningsprestandan, Àven om detta sÀllan Àr ett problem vid typisk anvÀndning. - WebblÀsarstöd: HÄll ett öga pÄ webblÀsarstödet för
@when
och dess medföljande at-regler. Vid dess introduktion vÀxer anammandet, men det Àr viktigt att testa i dina mÄlwebblÀsare. AnvÀnd verktyg som Can I Use för att kontrollera den senaste kompatibilitetsinformationen. - Global rÀckvidd: NÀr du designar för en global publik, utnyttja
@when
med@media
för att tillgodose det stora utbudet av enhetsstorlekar och upplösningar som Àr vanliga över hela vÀrlden. TÀnk ocksÄ pÄ olika nÀtverksförhÄllanden; du kan anvÀndaprefers-reduced-motion
mediafrÄgor inom@when
för att inaktivera animationer för anvÀndare som har valt bort det. - UnderhÄllbarhet: AnvÀnd
@when
för att hÄlla relaterade stilar samlade. Om en egenskaps vÀrde Àndras baserat pÄ ett villkor Àr det ofta mer underhÄllbart att ha bÄde standardvÀrdet och det villkorliga vÀrdet inom samma regelblock, istÀllet för att sprida ut dem över olika@media
-frÄgor.
WebblÀsarstöd och framtidsutsikter
@when
-at-regeln Àr ett relativt nytt tillÀgg i CSS-landskapet. Vid dess initiala utbredda anammande stöds den i moderna webblÀsare som Chrome, Firefox, Safari och Edge. Det Àr dock avgörande att alltid kontrollera de senaste uppgifterna om webblÀsarkompatibilitet för specifika versioner och funktioner.
W3C CSS Working Group fortsÀtter att förfina och utöka CSS-kapaciteterna. Funktioner som @when
, tillsammans med andra villkorliga regler och nÀstling, signalerar en rörelse mot mer programmatiska och uttrycksfulla stylingmöjligheter i CSS. Denna trend Àr avgörande för att bygga komplexa, anpassningsbara och anvÀndarvÀnliga webbupplevelser som tillgodoser en mÄngfaldig global anvÀndarbas.
Allt eftersom webbdesign fortsÀtter att omfamna anpassningsbarhet och personalisering kommer @when
att bli ett oumbÀrligt verktyg i utvecklarens arsenal. Dess förmÄga att finjustera stilar baserat pÄ ett brett spektrum av villkor, frÄn enhetsegenskaper till webblÀsarkapacitet, ger oss möjlighet att skapa mer sofistikerade och kontextmedvetna grÀnssnitt.
Slutsats
CSS @when
Àr en kraftfull och elegant funktion som avsevÀrt förbÀttrar vÄr förmÄga att skriva villkorliga stilar. Genom att utnyttja dess synergi med @media
och @supports
kan utvecklare skapa mer responsiva, anpassningsbara och robusta webbdesigner. Oavsett om du justerar typografi för olika skÀrmstorlekar, villkorligt tillÀmpar avancerade CSS-funktioner eller bygger komplexa interaktiva UI:n, ger @when
den precision och flexibilitet som krÀvs för att möta kraven frÄn modern webbutveckling. Att omfamna denna funktion kommer utan tvekan att leda till mer sofistikerade och anvÀndarcentrerade digitala upplevelser för en global publik.
Börja experimentera med @when
i dina projekt idag för att bygga smartare, mer anpassningsbara och framtidssÀkra webbplatser.