Kortversionen
- CSS-egenskapen backdrop filter tillämpar effekter som blur på ytan bakom ett element, inte på elementet självt.
- Ett element behöver en delvis genomskinlig bakgrund för att backdrop filter ska synas; på en solid bakgrund göms effekten.
- Kostnaden för blur växer med suddradien och storleken på den suddade ytan, och betalas på nytt varje gång innehållet bakom rör sig.
- Safari behövde prefixet -webkit-backdrop-filter till och med version 18, så att leverera båda raderna är fortfarande det säkra valet.
- En bra reserv är en mer ogenomskinlig bakgrund i en @supports-fråga, så att texten förblir läsbar när blurren saknas.
På den här sidan
Ett backdrop filter i CSS tillämpar en grafisk effekt, oftast blur, på det som ligger bakom ett element. Skriv backdrop-filter: blur(12px) på ett element med en delvis genomskinlig bakgrund så mjuknar sidan under det, vilket är det frostade glasutseende som används i navigeringsfält, paneler och kort. Det stöds i alla aktuella webbläsare. Hantverket ligger i att hålla den suddade ytan liten, radien måttlig och reserven läsbar.
Grundreceptet för frostat glas
Tre saker gör glas: en genomskinlig fyllning så att bakgrunden syns, själva suddigheten och en svag kant så att panelen får en form. De flesta lägger också till en liten mättnadshöjning, eftersom blur medelvärdesbildar färger och lämnar dem gråare än du väntar dig.
.glass {
background: rgb(255 255 255 / 0.14);
-webkit-backdrop-filter: blur(16px) saturate(160%);
backdrop-filter: blur(16px) saturate(160%);
border: 1px solid rgb(255 255 255 / 0.22);
border-radius: 16px;
}Glas ser bara ut som glas när det finns något värt att sudda bakom. På en platt grå sida ser panelen bara dunkel ut. Lägg den över ett fotografi eller en rik gradient, som glassmorphism förklarar mer ingående.
radial-gradient(circle at 20% 25%, #f97316 0%, transparent 40%), radial-gradient(circle at 80% 70%, #7c3aed 0%, transparent 45%), linear-gradient(160deg, #0f172a 0%, #1e1b4b 100%)Vad funktioner i backdrop-filter kan göra
Egenskapen tar samma funktioner som filter, och du kan kedja dem i en deklaration. De tillämpas i ordning, från vänster till höger, så blur() följt av saturate() beter sig annorlunda än tvärtom. Hela listan finns på MDN.
blur()blur(12px)Bra för
saturate()Exempel
saturate(160%)Bra för
brightness()Exempel
brightness(0.7)Bra för
contrast()Exempel
contrast(0.8)Bra för
grayscale()Exempel
grayscale(1)Bra för
nonenoneBra för
brightness() under 1 är ofta ett bättre läsbarhetsverktyg än en kraftigare blur.Prestanda för backdrop filter
Blur är något av det dyrare en webbläsare ritar. För att sudda en region måste den läsa varje pixel bakom elementet, ta prover av grannarna ut till suddradien och sammanfoga resultatet, och den upprepar arbetet varje gång något bakom panelen ändras. En klistrig header över en rullande sida ritar om sin blur i varje bildruta av rullningen.
Kostnaden skalar med två siffror du styr: elementets yta och radien. En header på 64 pixlar suddad med 12px är billig på nästan allt. Ett helskärmsöverlägg suddat med 40px över en video kan tappa bildrutor på en mellanklassmobil. Den bredare bilden finns i CSS-gradienters prestanda.
Långsamt
- Att sudda hela visningsytan bakom en modal
- Radier på 30px och uppåt
- Att animera suddradien vid öppning och stängning
- Glaspaneler inuti glaspaneler
- Blur över autospelande video
Snabbt
- Att sudda bara fältet, kortet eller panelen som behöver det
- Radier mellan 8px och 20px
- Att tona in panelens opacitet, med fast blur
- Ett glaslager, solida fyllningar inuti
- Blur över stillbilder och gradienter
Varför backdrop-filter inte fungerar
När blurren verkar inte göra något är orsaken nästan alltid en av en kort lista.
- 1
Kontrollera att bakgrunden är genomskinlig
En solid
background: #ffftäcker den suddade bakgrunden helt. Använd ett alfavärde somrgb(255 255 255 / 0.15). - 2
Lägg till Safari-prefixet
Safari accepterar bara den oprefixade egenskapen från version 18. Äldre iPhones behöver fortfarande
-webkit-backdrop-filter. - 3
Leta efter en backdrop root ovanför
En förälder med
filter,opacityunder 1, en mask eller ett eget backdrop filter begränsar vad barnet kan se. Barnet suddar då bara den föräldern, vilket ofta ser ut som ingen blur alls. - 4
Se upp med fixed-barn
Liksom
filtergör ett backdrop filter elementet till innehållande block för fixed- och absolut positionerade barn. En fixed meny inuti en glasheader placerar sig mot headern, inte fönstret. - 5
Se till att något finns bakom
Blur över en platt färg syns inte. Rulla panelen över en bild för att bekräfta att det fungerar.
En reserv som håller texten läsbar
Genomskinliga paneler är utformade runt blurren. Utan den lämnar en vit fyllning på 14 procent över ett rörigt foto texten sittande på själva fotot, och kontrasten kollapsar. Skriv den läsbara versionen först och uppgradera den sedan där webbläsaren kan sudda.
/* Works everywhere: opaque enough to read on its own */
.glass {
background: rgb(15 23 42 / 0.86);
color: #f8fafc;
}
/* Upgrade where blur is available */
@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
.glass {
background: rgb(15 23 42 / 0.45);
-webkit-backdrop-filter: blur(14px) saturate(150%);
backdrop-filter: blur(14px) saturate(150%);
}
}
/* Respect people who ask for less transparency, where supported */
@media (prefers-reduced-transparency: reduce) {
.glass {
background: rgb(15 23 42 / 0.94);
-webkit-backdrop-filter: none;
backdrop-filter: none;
}
}prefers-reduced-transparency är fortfarande begränsat, så se det blocket som en artighet snarare än en garanti.Kontrollera kontrasten mot den sämsta punkten bakom panelen, inte medelvärdet. En vit rubrik över glas som driver över en ljus himmel kan hamna långt under förhållandena i färgkontrast och tillgänglighet. Att mörkna med brightness(0.7) löser det oftast mer tillförlitligt än att sudda hårdare.
När du inte behöver någon blur alls
Mycket frostat glas finns bara för att göra ord läsbara över en rörig bakgrund. Om bakgrunden är din att designa löser en lugnare problemet utan renderingskostnad. En mjuk gradient med låg kontrast bakom en hero behöver ingen panel; se webbplatsens herobakgrunder och suddiga bakgrunder, där suddigheten bakas in i bilden en gång i stället för att beräknas varje bildruta.
Ord rakt över en livlig bakgrund: här sträcker sig folk efter en glaspanel.
Samma bakgrund som lugnar sig själv bakom orden, utan panel, skugga eller blur.
Det andra tillvägagångssättet är hur Gradiently hanterar läsbarhet: en Mark vet var orden finns och flyttar sin lugnaste, mest kontrasterande region bakom dem, så du behöver aldrig en ruta eller en blur för att rädda en rubrik.
Vanliga frågor
Vad är skillnaden mellan filter och backdrop-filter?
filter ändrar elementet och dess innehåll. backdrop-filter ändrar bara det som syns bakom elementet, genom dess genomskinliga bakgrund.
Varför syns inte min backdrop-filter-blur?
Oftast är elementets bakgrund helt ogenomskinlig, Safari behöver prefixet -webkit-, eller så begränsar en förälder med filter, opacity eller en mask vad elementet kan se.
Är backdrop-filter dåligt för prestandan?
Det kan vara det. Kostnaden växer med den suddade ytan och radien och betalas på nytt varje gång innehållet bakom rör sig, så håll glaspaneler små och radier måttliga.
Behöver jag fortfarande -webkit-backdrop-filter?
Safari accepterar den oprefixade egenskapen från version 18, men äldre iPhones används fortfarande, så att leverera båda raderna är fortfarande klokt.
Vilket suddvärde ser bäst ut för frostat glas?
Mellan 8px och 20px passar de flesta gränssnitt. Lägg till saturate() över 100 % för att återställa färgen som blur tar bort.
Skriven av Gradiently
Teamet bakom Gradiently, ett designverktyg byggt kring Marks: levande gradienter som får allt du gör att kännas som ditt.
Se vår profil