Kortversjonen
- Backdrop-filter i CSS legger effekter som uskarphet på området bak et element, ikke på selve elementet.
- Et element trenger en delvis gjennomsiktig bakgrunn for at backdrop-filter skal synes. En ensfarget, ugjennomsiktig bakgrunn skjuler effekten.
- Kostnaden ved uskarphet vokser med radiusen og størrelsen på området, og påløper igjen hver gang innholdet bak beveger seg.
- Safari trengte prefikset -webkit-backdrop-filter frem til versjon 18, så det er fortsatt tryggest å levere begge linjene.
- En god reserve er en mer ugjennomsiktig bakgrunn i en @supports-spørring, så teksten forblir lesbar uten uskarphet.
På denne siden
Backdrop-filter i CSS legger en grafisk effekt, vanligvis uskarphet, på det som ligger bak et element. Skriv backdrop-filter: blur(12px) på et element med delvis gjennomsiktig bakgrunn, så myknes siden under. Det gir uttrykket av frostet glass som brukes i navigasjonsfelt, paneler og kort. Alle nåværende nettlesere støtter det. Håndverket ligger i å holde området lite, radiusen moderat og reserven lesbar.
Grunnoppskriften på frostet glass
Tre ting skaper glass: en gjennomskinnelig flate som viser bakgrunnen, selve uskarpheten og en svak kant som gir panelet form. De fleste øker også metningen litt, fordi uskarphet jevner ut fargene og gjør dem gråere enn forventet.
.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;
}Glass ser bare ut som glass når det er noe verdt å gjøre uskarpt bak det. På en flat grå side ser panelet bare mørkere ut. Legg det over et fotografi eller en fyldig gradient, som glassmorfisme forklarer nærmere.
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%)Hva funksjonene i backdrop-filter kan gjøre
Egenskapen tar de samme funksjonene som filter, og du kan kjede dem i én deklarasjon. De brukes i rekkefølge fra venstre til høyre, så blur() etterfulgt av saturate() virker annerledes enn motsatt rekkefølge. Hele listen finnes på MDN.
blur()blur(12px)Passer til
saturate()Eksempel
saturate(160%)Passer til
brightness()Eksempel
brightness(0.7)Passer til
contrast()Eksempel
contrast(0.8)Passer til
grayscale()Eksempel
grayscale(1)Passer til
nonenonePasser til
brightness() under 1 gir ofte bedre lesbarhet enn kraftigere uskarphet.Ytelse med backdrop-filter
Uskarphet er noe av det mer kostbare en nettleser tegner. Den må lese hver piksel bak elementet, hente nabopiksler ut til radiusen og sette sammen resultatet. Arbeidet gjentas hver gang noe bak panelet endres. Et fast toppfelt over en rullende side tegner uskarpheten på nytt i hver bilderamme.
Kostnaden følger to tall du styrer: elementets areal og radiusen. Et toppfelt på 64 piksler med 12px uskarphet er billig på nesten alt. Et heldekkende overlegg med 40px uskarphet over video kan miste bilderammer på en mellomklassetelefon. Helheten dekkes i ytelse for CSS-gradienter.
Langsomt
- Uskarphet over hele visningsområdet bak en modal
- Radier på 30px og mer
- Animasjon av radiusen ved åpning og lukking
- Glasspaneler inni glasspaneler
- Uskarphet over automatisk avspilt video
Raskt
- Uskarphet bare i feltet, kortet eller panelet som trenger det
- Radier mellom 8px og 20px
- Inn- og uttoning av panelets opasitet med fast uskarphet
- Ett glasslag, ugjennomsiktige flater inni
- Uskarphet over stillbilder og gradienter
Hvorfor backdrop-filter ikke virker
Når uskarpheten ser ut til å gjøre ingenting, er årsaken nesten alltid én av noen få ting.
- 1
Kontroller at bakgrunnen er gjennomsiktig
En ugjennomsiktig
background: #fffdekker den uskarpe bakgrunnen helt. Bruk en alfaverdi somrgb(255 255 255 / 0.15). - 2
Legg til Safari-prefikset
Safari godtar egenskapen uten prefiks først fra versjon 18. Eldre iPhoner trenger fortsatt
-webkit-backdrop-filter. - 3
Se etter en backdrop root over elementet
Et foreldreelement med
filter,opacityunder 1, en maske eller eget backdrop-filter begrenser hva barnet ser. Barnet gjør da bare forelderen uskarp, noe som ofte ser ut som ingen uskarphet. - 4
Pass på fastplasserte barn
Som
filtergjør backdrop-filter elementet til referanseboks for barn med fast eller absolutt plassering. En fast meny i et glasstoppfelt plasserer seg i forhold til toppfeltet, ikke vinduet. - 5
Sørg for at noe ligger bak
Uskarphet over en flat farge er usynlig. Rull panelet over et bilde for å bekrefte at det virker.
En reserve som holder teksten lesbar
Gjennomskinnelige paneler er designet rundt uskarpheten. Uten den lar en hvit flate med 14 prosent opasitet over et travelt bilde teksten ligge rett på bildet, og kontrasten kollapser. Skriv den lesbare versjonen først, og oppgrader der nettleseren kan gjøre bakgrunnen uskarp.
/* 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 er fortsatt begrenset, så se på blokken som et hensyn fremfor en garanti.Kontroller kontrasten mot det vanskeligste punktet bak panelet, ikke gjennomsnittet. En hvit overskrift på glass som glir over en lys himmel, kan falle langt under forholdene i fargekontrast og tilgjengelighet. Mørkning med brightness(0.7) løser vanligvis dette sikrere enn kraftigere uskarphet.
Når du ikke trenger uskarphet
Mye frostet glass finnes bare for å gjøre ord lesbare over en travel bakgrunn. Hvis du kan designe bakgrunnen, løser en roligere variant problemet uten ekstra tegnekostnad. En myk gradient med lav kontrast bak et toppfelt trenger ikke panel. Se bakgrunner til nettsidens toppfelt og uskarpe bakgrunner, der uskarpheten bakes inn i bildet én gang fremfor å beregnes i hver bilderamme.
Ord rett over en livlig bakgrunn: her tyr mange til et glasspanel.
Samme bakgrunn som roer seg selv bak ordene, uten panel, skygge eller uskarphet.
Den andre tilnærmingen er slik Gradiently håndterer lesbarhet: en Mark vet hvor ordene er og flytter det roligste området med best kontrast bak dem. Du trenger derfor aldri en boks eller uskarphet for å redde en overskrift.
Spørsmål folk stiller
Hva er forskjellen på filter og backdrop-filter?
filter endrer elementet og innholdet. backdrop-filter endrer bare det som er synlig bak elementet gjennom den gjennomsiktige bakgrunnen.
Hvorfor synes ikke uskarpheten fra backdrop-filter?
Vanligvis er elementets bakgrunn helt ugjennomsiktig, Safari trenger -webkit--prefikset, eller en forelder med filter, opacity eller en maske begrenser hva elementet ser.
Er backdrop-filter dårlig for ytelsen?
Det kan være det. Kostnaden vokser med arealet og radiusen, og påløper igjen når innholdet bak beveger seg. Hold derfor glasspanelene små og radiene moderate.
Trenger jeg fortsatt -webkit-backdrop-filter?
Safari godtar egenskapen uten prefiks fra versjon 18, men eldre iPhoner er fortsatt i bruk. Det er derfor fortsatt fornuftig å levere begge linjene.
Hvilken uskarphetsverdi ser best ut for frostet glass?
Mellom 8px og 20px passer de fleste grensesnitt. Legg til saturate() over 100% for å hente tilbake fargen uskarpheten fjerner.
Skrevet av Gradiently
Teamet bak Gradiently, et designverktøy bygget rundt Marks: levende gradienter som gjør at alt du designer ser ut som ditt.
Se profilen vår