Frigør potentialet i CSS @when til dynamiske og responsive weboplevelser. Lær at anvende styles baseret på forskellige betingelser med klare eksempler.
CSS @when: Mestring af betinget styling til moderne webdesign
I det konstant udviklende landskab inden for webudvikling er evnen til at skabe dynamiske og responsive brugergrænseflader altafgørende. CSS, hjørnestenen i visuel præsentation, fortsætter med at introducere kraftfulde funktioner, der giver udviklere mulighed for at bygge mere intelligente og adaptive hjemmesider. En sådan banebrydende funktion er @when
at-reglen, som tillader betinget styling, hvilket gør det muligt for os at anvende CSS-regler, kun når specifikke betingelser er opfyldt. Dette åbner op for en verden af muligheder for at skabe virkelig responsive og kontekstbevidste designs.
Hvad er CSS @when?
@when
at-reglen er en kraftfuld tilføjelse til CSS-specifikationen, der fungerer sammen med @media
- eller @supports
-reglerne. Den fungerer som en betinget blok, hvilket betyder, at CSS-deklarationerne inden for dens rækkevidde kun vil blive anvendt, hvis den specificerede betingelse evalueres til sand. I bund og grund giver den en mere granulær og udtryksfuld måde at kontrollere, hvornår bestemte styles er aktive, og går ud over den traditionelle blok-niveau-betingelse, som @media
-forespørgsler alene tilbyder.
Tænk på det som en meget raffineret `if`-sætning for din CSS. I stedet for at anvende et helt sæt styles baseret på en bred betingelse, lader @when
dig målrette specifikke deklarationer inden for en regel, hvilket gør dine stylesheets mere effektive og vedligeholdelsesvenlige.
Synergien: @when med @media og @supports
Den sande kraft i @when
realiseres, når den bruges i kombination med eksisterende betingede at-regler:
1. @when med @media-forespørgsler
Dette er uden tvivl den mest almindelige og effektfulde anvendelse af @when
. Traditionelt ville du måske indpakke hele CSS-regler i en @media
-forespørgsel. Med @when
kan du nu betinget anvende specifikke deklarationer inden for en regel baseret på medieforespørgselsbetingelser.
Eksempel: Responsiv typografi
Lad os sige, du vil justere skriftstørrelsen på et afsnit, men kun når viewporten er bredere end 768 pixels. Uden @when
ville du måske gøre dette:
.my-paragraph {
font-size: 16px;
}
@media (min-width: 768px) {
.my-paragraph {
font-size: 18px;
}
}
Nu, ved hjælp af @when
, kan du opnå det samme resultat mere koncist og med større kontrol:
.my-paragraph {
font-size: 16px;
@when (min-width: 768px) {
font-size: 18px;
}
}
I dette eksempel:
- Grundlæggende
font-size
på16px
anvendes altid. font-size
på18px
anvendes kun når viewportens bredde er 768 pixels eller mere.
Denne tilgang er utrolig nyttig til at lave granulære justeringer af specifikke egenskaber baseret på skærmstørrelse, orientering eller andre mediefunktioner, uden at duplere hele regelsæt.
Globalt eksempel: Tilpasning af UI-elementer til forskellige enheder
Overvej en global e-handelsplatform. Et produktkort kan vise en kompakt visning på mobile enheder, men en mere detaljeret visning på større skærme. Ved hjælp af @when
med @media
kan du elegant håndtere disse overgange:
.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;
}
}
Dette gør det muligt for .product-card
og dets interne elementer som .product-image
at tilpasse deres styles progressivt, efterhånden som viewportstørrelsen øges, hvilket giver en skræddersyet oplevelse på tværs af en bred vifte af enheder globalt.
2. @when med @supports-forespørgsler
@supports
at-reglen giver dig mulighed for at kontrollere, om en browser understøtter et specifikt CSS-egenskab-værdi-par. Ved at kombinere den med @when
kan du betinget anvende styles, kun når en bestemt browserfunktion er tilgængelig.
Eksempel: Brug af en ny CSS-funktion
Forestil dig, at du vil bruge den eksperimentelle backdrop-filter
-egenskab. Ikke alle browsere eller ældre versioner understøtter dette. Du kan bruge @when
med @supports
til at anvende den på en elegant måde:
.modal-background {
background-color: rgba(0, 0, 0, 0.5);
@when supports (backdrop-filter: blur(10px)) {
backdrop-filter: blur(10px);
}
}
I dette tilfælde:
background-color
anvendes altid som en fallback.backdrop-filter
anvendes kun når browseren understøtterbackdrop-filter: blur(10px)
-deklarationen.
Dette er afgørende for progressiv forbedring (progressive enhancement), da det sikrer, at dit design er funktionelt og visuelt tiltalende, selv i miljøer, der ikke understøtter de nyeste CSS-funktioner.
Globalt eksempel: Progressiv forbedring for animationer
Overvej en hjemmeside med subtile animationer. Nogle avancerede animationer kan afhænge af nyere CSS-egenskaber som animation-composition
eller specifikke easing-funktioner. Du kan bruge @when
og @supports
til at give en fallback eller en enklere animation for browsere, der ikke understøtter disse avancerede egenskaber.
.animated-element {
transform: translateX(0);
transition: transform 0.5s ease-in-out;
@when supports (animation-composition: replace) {
/* Mere avancerede animationsegenskaber 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); }
}
Her vil browsere, der understøtter animation-composition: replace
, få en mere sofistikeret animationssekvens, mens andre vil falde tilbage på den simplere transition
-egenskab, hvilket sikrer en konsistent, omend varieret, oplevelse for brugere verden over.
3. Kombination af @when med flere betingelser
Du kan også kæde flere betingelser sammen i en enkelt @when
-regel, hvilket skaber endnu mere specifik styling-logik. Dette gøres ved hjælp af logiske operatorer som and
, or
og not
.
Eksempel: Kompleks responsiv logik
Lad os forestille os et scenarie, hvor en sidebar kun skal skjules på mindre skærme, men kun hvis en specifik brugerpræferenceindstilling (hypotetisk angivet med en klasse på body) ikke er aktiv.
.sidebar {
display: block;
width: 250px;
/* Skjul sidebar på små skærme OG ikke i præferencetilstand */
@when (max-width: 767px) and not (.no-sidebar-on-mobile) {
display: none;
}
/* Vis sidebar på større skærme ELLER hvis præferencetilstand er aktiv på små skærme */
@when (min-width: 768px) or (.sidebar-on-mobile) {
display: block;
}
}
Dette niveau af betinget styling muliggør meget komplekse UI-adfærdsmønstre, der er skræddersyet til specifikke kontekster og brugerinteraktioner.
Syntaks og bedste praksis
Den grundlæggende syntaks for @when
er ligetil:
selector {
property: value;
@when (condition) {
property: value;
}
}
Når man kombinerer flere betingelser, bliver syntaksen:
selector {
property: value;
@when (condition1) and (condition2) {
property: value;
}
@when (condition1) or (condition2) {
property: value;
}
@when not (condition) {
property: value;
}
}
Vigtigste bedste praksis:
- Prioriter læsbarhed: Selvom
@when
kan gøre styles mere koncise, bør du undgå overdrevent komplekse, indlejrede betingelser, der kan blive svære at afkode. Opdel kompleks logik i separate regler om nødvendigt. - Progressiv forbedring: Sørg altid for en elegant fallback for browsere eller miljøer, der ikke understøtter de funktioner, som dine
@when
-regler er rettet mod, især når det bruges med@supports
. - Ydeevne: Selvom
@when
i sig selv generelt er effektiv, skal du være opmærksom på overdrevent kompleks betinget logik, der kan påvirke parsing-ydeevnen, selvom dette sjældent er et problem ved typisk brug. - Browserunderstøttelse: Hold øje med browserunderstøttelse for
@when
og dens ledsagende at-regler. Ved dens introduktion er udbredelsen voksende, men det er vigtigt at teste på tværs af dine målbrowsere. Brug værktøjer som Can I Use til at kontrollere de seneste kompatibilitetsoplysninger. - Global rækkevidde: Når du designer til et globalt publikum, kan du udnytte
@when
med@media
til at imødekomme det store udvalg af enhedsstørrelser og opløsninger, der er udbredt over hele verden. Overvej også forskellige netværksforhold; du kan brugeprefers-reduced-motion
medieforespørgsler inden i@when
for at deaktivere animationer for brugere, der har fravalgt dem. - Vedligeholdelighed: Brug
@when
til at holde relaterede styles samlet. Hvis en egenskabs værdi ændres baseret på en betingelse, er det ofte mere vedligeholdelsesvenligt at have både standard- og betingede værdier inden for den samme regelblok, i stedet for at sprede dem over forskellige@media
-forespørgsler.
Browserunderstøttelse og fremtidsudsigter
@when
at-reglen er en relativt ny tilføjelse til CSS-landskabet. Ved dens indledende udbredte anvendelse understøttes den i moderne browsere som Chrome, Firefox, Safari og Edge. Det er dog afgørende altid at kontrollere de seneste browserkompatibilitetsdata for specifikke versioner og funktioner.
W3C's CSS Working Group fortsætter med at forfine og udvide CSS-mulighederne. Funktioner som @when
, sammen med andre betingede regler og nesting, signalerer en bevægelse mod mere programmatiske og udtryksfulde styling-muligheder i CSS. Denne tendens er afgørende for at bygge komplekse, adaptive og brugervenlige weboplevelser, der imødekommer en mangfoldig global brugerbase.
I takt med at webdesign fortsat omfavner tilpasningsevne og personalisering, vil @when
blive et uundværligt værktøj i udviklerens arsenal. Dets evne til at finjustere styles baseret på en bred vifte af betingelser, fra enhedskarakteristika til browserkapabiliteter, giver os mulighed for at skabe mere sofistikerede og kontekstbevidste grænseflader.
Konklusion
CSS @when
er en kraftfuld og elegant funktion, der markant forbedrer vores evne til at skrive betingede styles. Ved at udnytte dens synergi med @media
og @supports
kan udviklere skabe mere responsive, adaptive og robuste webdesigns. Uanset om du justerer typografi til forskellige skærmstørrelser, betinget anvender avancerede CSS-funktioner eller bygger komplekse interaktive brugergrænseflader, giver @when
den præcision og fleksibilitet, der er nødvendig for at imødekomme kravene i moderne webudvikling. At omfavne denne funktion vil utvivlsomt føre til mere sofistikerede og brugercentrerede digitale oplevelser for et globalt publikum.
Begynd at eksperimentere med @when
i dine projekter i dag for at bygge smartere, mere adaptive og fremtidssikrede hjemmesider.