Markt
Prijzen
InloggenBegin
PraktijkgidsCSS en web
CSS en web

CSS box-shadow: zachte, gelaagde schaduwen die echt ogen

Eén grijze box-shadow is de snelste manier om een interface op een sjabloon te laten lijken. Echte schaduwen zijn meerdere schaduwen tegelijk, getint en rustiger dan je denkt.

GradientlyGeverifieerd Gradiently-account·1 oktober 2026·5 min lezen
Cover: Tape Cliff · GR·CY1K·VC

De korte versie

  • De CSS-eigenschap box-shadow neemt een optioneel inset-sleutelwoord, twee verschuivingen, een blurstraal, een spreidingsstraal en een kleur.
  • Eén box-shadow ziet er kunstmatig uit omdat echte objecten tegelijk een scherpe contactschaduw en een brede zachte schaduw werpen.
  • Drie tot vijf schaduwen laag voor laag, elk met ongeveer het dubbele van de verschuiving en blur van de vorige en een lage dekking, geeft een zachte, geloofwaardige schaduw.
  • De schaduw tinten naar de tint van de achtergrond ziet er natuurlijker uit dan puur zwart op gekleurde of warme oppervlakken.
  • Het animeren van box-shadow tekent bij elk frame opnieuw, dus laat in plaats daarvan de dekking van een pseudo-element met de grotere schaduw infaden.
Op deze pagina
box-shadow-syntaxisWaarom één schaduw nep lijktZo laag je box-shadowsEen elevatieschaal voor een interfaceSchaduwen op gekleurde en donkere achtergrondenbox-shadow animeren zonder haperingenWanneer je de schaduw weglaat

Een CSS box-shadow schrijf je als box-shadow: 0 4px 12px rgb(0 0 0 / 0.15): een horizontale verschuiving, een verticale verschuiving, een blurstraal, een optionele spreiding en een kleur. Die ene schaduw is prima voor een snel prototype, maar ziet er zelden echt uit. De schaduwen die het oog overtuigen zijn gelaagd: meerdere schaduwen op één element, elk groter en vager dan de vorige, getint naar het oppervlak eronder.

box-shadow-syntaxis

css
/* inset? | offset-x | offset-y | blur | spread | color */
.card { box-shadow: 0 4px 12px 0 rgb(0 0 0 / 0.15); }

/* Negative spread tucks the shadow under the box */
.card { box-shadow: 0 12px 24px -8px rgb(0 0 0 / 0.25); }

/* Inset: a shadow inside the box, like a pressed well */
.well { box-shadow: inset 0 2px 4px rgb(0 0 0 / 0.12); }

/* Spread only: a hairline that follows border-radius */
.chip { box-shadow: 0 0 0 1px rgb(15 23 42 / 0.08); }

/* Several shadows, comma separated, first on top */
.card { box-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 8px 16px rgb(0 0 0 / 0.08); }
De schaduw volgt altijd border-radius, daarom geeft een schaduw met alleen spreiding een nette afgeronde haarlijn zonder de layout te veranderen.
insetUit

Effect

Tekent de schaduw binnen de rand in plaats van erbuiten
Verschuiving x en y

Standaard

Verplicht

Effect

Verplaatst de schaduw. Licht van boven betekent een positieve y
Blur0

Effect

Maakt de rand zachter. Grotere waarden spreiden de overgang breder
Spreiding

Standaard

0

Effect

Laat de schaduw groeien of krimpen vóór het vervagen. Negatief stopt hem naar binnen
Kleurcurrentcolor

Effect

Gebruik een kleur met alfa; dekkende schaduwen zien eruit als stickers
WaardeStandaardEffect
insetUitTekent de schaduw binnen de rand in plaats van erbuiten
Verschuiving x en yVerplichtVerplaatst de schaduw. Licht van boven betekent een positieve y
Blur0Maakt de rand zachter. Grotere waarden spreiden de overgang breder
Spreiding0Laat de schaduw groeien of krimpen vóór het vervagen. Negatief stopt hem naar binnen
KleurcurrentcolorGebruik een kleur met alfa; dekkende schaduwen zien eruit als stickers
Spreiding is de waarde die de meeste mensen overslaan en die het meeste oplost. Een kleine negatieve spreiding voorkomt dat een grote blur aan de zijkanten uitlekt.

Waarom één schaduw nep lijkt

Leg een boek op een tafel en kijk naar de schaduw. Precies waar het de tafel raakt is de schaduw donker en scherp. Verder weg wordt hij breed en vaag, omdat licht uit veel richtingen om het object heen valt. Eén box-shadow kan maar één van die dingen tegelijk zijn: strak en hard, of breed en wazig. Hoe dan ook merkt het oog dat er iets ontbreekt.

Enkele schaduw

  • Eén gemiddelde blur in 25 procent zwart
  • Grijze halo rondom de kaart
  • Moeilijk te zien hoe hoog de kaart zweeft
  • Ziet er vuil uit op gekleurde achtergronden

Gelaagde schaduw

  • Vier schaduwen, elk vager en breder
  • Dicht bij de rand, luchtig verder weg
  • Hoogte lees je in één oogopslag
  • Getint om natuurlijk op zijn oppervlak te zitten

Zo laag je box-shadows

De methode is eenvoudig: begin klein en scherp en verdubbel de verschuiving en blur voor elke extra laag, met elke laag vaag. De dekking telt op waar lagen overlappen, dus de afzonderlijke waarden kunnen verrassend laag zijn.

  1. 1

    Begin met een contactschaduw

    0 1px 1px met een dekking van ongeveer 8 procent. Dit is de donkere lijn vlak onder de rand.

  2. 2

    Verdubbel voor elke laag

    Dan 0 2px 2px, 0 4px 4px, 0 8px 8px. Verschuiving en blur groeien samen, zodat het licht van boven lijkt te komen.

  3. 3

    Houd elke laag vaag

    Tussen 5 en 10 procent per laag. Als het resultaat zwaar oogt, haal dan de grootste laag weg voordat je iets donkerder maakt.

  4. 4

    Tint de kleur

    Vervang zwart door een diepe versie van de tint van de achtergrond, zoals marineblauw op blauwe pagina’s of bruin op crème.

css
:root {
  /* Shadow colour as channels, so opacity can vary per layer */
  --shadow-color: 222 47% 11%;

  --shadow-sm:
    0 1px 1px hsl(var(--shadow-color) / 0.08),
    0 2px 2px hsl(var(--shadow-color) / 0.06);

  --shadow-md:
    0 1px 1px hsl(var(--shadow-color) / 0.08),
    0 2px 2px hsl(var(--shadow-color) / 0.07),
    0 4px 4px hsl(var(--shadow-color) / 0.06),
    0 8px 8px hsl(var(--shadow-color) / 0.05);

  --shadow-lg:
    0 1px 1px hsl(var(--shadow-color) / 0.07),
    0 2px 2px hsl(var(--shadow-color) / 0.07),
    0 4px 4px hsl(var(--shadow-color) / 0.06),
    0 8px 8px hsl(var(--shadow-color) / 0.06),
    0 16px 16px hsl(var(--shadow-color) / 0.05),
    0 32px 32px hsl(var(--shadow-color) / 0.04);
}

.card { box-shadow: var(--shadow-md); }
.dialog { box-shadow: var(--shadow-lg); }
Een elevatieschaal in drie stappen als custom properties. Verander --shadow-color één keer en elke schaduw in het systeem volgt.

Schaduwen opslaan als variabelen maakt er design tokens van, wat elke kaart, elk menu en elk dialoogvenster consistent houdt. CSS-variabelen voor theming en design tokens laten zien hoe je ze in een volledig thema verwerkt.

Een elevatieschaal voor een interface

Schaduw is een signaal van hoogte, dus hij moet overal hetzelfde betekenen. Kies drie of vier niveaus en wijs ze toe aan taken. Alles wat hoger zweeft krijgt een grotere, zachtere schaduw, nooit alleen een donkerdere.

0geen, of een haarlijn van 1px spreiding

Gebruik voor

Invoervelden, tabelrijen, vlakke kaarten op een getinte pagina
1--shadow-sm

Gebruik voor

Kaarten in rust, knoppen die indrukbaar moeten voelen
2--shadow-md

Gebruik voor

Kaarten bij hover, dropdownmenu’s, popovers
3--shadow-lg

Gebruik voor

Dialoogvensters, sheets, alles boven een gedimde pagina
NiveauTokenGebruik voor
0geen, of een haarlijn van 1px spreidingInvoervelden, tabelrijen, vlakke kaarten op een getinte pagina
1--shadow-smKaarten in rust, knoppen die indrukbaar moeten voelen
2--shadow-mdKaarten bij hover, dropdownmenu’s, popovers
3--shadow-lgDialoogvensters, sheets, alles boven een gedimde pagina
Vier niveaus dekken bijna elke interface. Meer dan dat en mensen kunnen ze niet meer uit elkaar houden.

Schaduwen op gekleurde en donkere achtergronden

Puur zwarte schaduwen worden grijs en modderig op een gekleurd oppervlak, zoals zwart in verf die dof maakt. Neem de schaduwkleur in plaats daarvan van de achtergrond: een diep groenblauwe schaduw op een muntgroene pagina, een donkere pruim op een lila pagina. Kies bij verloopachtergronden de donkerste stop van het verloop en gebruik die met lage dekking.

Drie paginakleuren, elk met de schaduwkleur die erbij past. Gebruik de schaduwtinten met 5 tot 10 procent per laag.

In de donkere modus verdwijnen schaduwen bijna, omdat er weinig licht is om te blokkeren. Toon hoogte door verhoogde vlakken iets lichter te maken en houd een vage haarlijn aan de rand. Ontwerp voor de donkere modus loopt de oppervlaktekleuren door. Voor panelen die over beeld zweven scheidt een backdrop-filter lagen vaak beter dan een zwaardere schaduw.

box-shadow animeren zonder haperingen

box-shadow bij hover veranderen dwingt de browser de schaduw bij elk frame van de overgang opnieuw te tekenen. Bij één knop is dat prima. Bij een raster van vijftig kaarten hapert het. De standaardoplossing is de grotere schaduw op een pseudo-element te zetten en de dekking te laten infaden, wat de browser goedkoop kan samenstellen.

css
.card {
  position: relative;
  box-shadow: var(--shadow-sm);
}

.card::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  box-shadow: var(--shadow-lg);
  opacity: 0;
  transition: opacity 200ms ease-out;
  pointer-events: none;
}

.card:hover::after { opacity: 1; }

@media (prefers-reduced-motion: reduce) {
  .card::after { transition: none; }
}
Beide schaduwen worden één keer getekend. Hover verandert alleen de dekking, dus er wordt tijdens de overgang niets opnieuw getekend.

Meer over wat tekentijd kost staat in CSS-verloopprestaties, en dezelfde gelaagde aanpak past bij knoppen in verloopknoppen in CSS.

Wanneer je de schaduw weglaat

Schaduwen scheiden een oppervlak van wat erachter ligt. Als de achtergrond een rijk verloop of een foto is, vecht een sterke schaduw ertegen. Vaak doet een rustigere achtergrond meer voor de kaart dan welke schaduw ook. De Marks van Gradiently zijn daarvoor gemaakt: elk is een levende achtergrond met eigen kleuren, licht en korrel, en de woorden die je erop zet blijven leesbaar omdat de Mark zichzelf erachter kalmeert, zonder dat vakken of schaduwen het werk doen.

Vind een kleurverloop dat alleen van jou is

Blader door duizenden Marks, ontwerp er gratis mee en claim de Mark die bij je past.

Bekijk de Markt

Vragen die mensen stellen

Wat zijn de waarden in CSS box-shadow?

Een optionele inset, een horizontale verschuiving, een verticale verschuiving, een blurstraal, een spreidingsstraal en een kleur, bijvoorbeeld 0 4px 12px 0 rgb(0 0 0 / 0.15).

Hoe maak ik een zachte box-shadow in CSS?

Laag drie tot vijf schaduwen, verdubbel elke keer de verschuiving en blur, met elk 5 tot 10 procent dekking. Tint ze naar de achtergrondkleur.

Hoe voeg ik meer dan één box-shadow toe?

Scheid ze met komma’s in één box-shadow-declaratie. De eerst genoemde schaduw wordt bovenop getekend.

Wat doet spreiding in box-shadow?

Het laat de schaduw groeien of krimpen voordat hij wordt vervaagd. Een negatieve spreiding houdt een grote blur uit beeld aan de zijkanten van de box.

Is het animeren van box-shadow slecht voor de prestaties?

Het tekent elk frame opnieuw. Zet de hover-schaduw op een pseudo-element en laat in plaats daarvan de dekking overgaan.

Deel deze gids

Geschreven door GradientlyGeverifieerd Gradiently-account

Het team achter Gradiently, een ontwerptool rond Marks: levende kleurverlopen die alles wat je ontwerpt op jou laten lijken.

Bekijk ons profiel

Op deze pagina

box-shadow-syntaxisWaarom één schaduw nep lijktZo laag je box-shadowsEen elevatieschaal voor een interfaceSchaduwen op gekleurde en donkere achtergrondenbox-shadow animeren zonder haperingenWanneer je de schaduw weglaat

Deel deze gids

Volgende in CSS en web

color-mix() in CSS: kleuren mengen in de browser

Lees verder

Alle gidsen over CSS en web
CSS en web

Backdrop filter in CSS: matglas dat snel blijft

5 min lezen

Matglas kost drie regels CSS en kan toch een goede telefoon laten haperen. Hier staat de code, wat het kost om te tekenen en de terugvallen die tekst leesbaar houden als de blur uitblijft.

CSS en web

CSS text-shadow: syntaxis, voorbeelden en betere opties

5 min lezen

text-shadow is een kleine eigenschap met een grote reputatie als redder van onleesbare koppen. Het is beter in decoratie dan in redden. Hier staan de syntaxis, een handvol stijlen om te kopiëren en wat je gebruikt als leesbaarheid het echte probleem is.

CSS en web

Design tokens: één bron voor kleur en typografie

5 min lezen

Een merkkleur die in veertig bestanden staat, gaat afwijken. Een token staat op één plek en elk platform leest ervan. Zo structureer je design tokens, benoem je ze zodat ze blijven werken en lever je ze aan code en ontwerptools.

Vind de look die alleen van jou is.

Elke Mark is een levende achtergrond met één eigenaar. Probeer een beschikbare Mark en claim de jouwe als het goed voelt.

Begin met ontwerpen

Controleer een certificaat

Typ een certificaatnummer of de code van een Mark om te zien wie hem bezit.

Werkt met ChatGPT en Claude

Vraag je AI om een ontwerp. Hij maakt het in jouw Mark, klaar om te bewerken.

ChatGPTClaude
Zo verbind je

Product

  • Markt
  • Verkennen
  • Prijzen
  • Certificaten

Leren

  • Praktijkgids
  • Helpcentrum
  • Wat is er nieuw

Ontwikkelaars

  • Overzicht
  • ChatGPT en Claude
  • API-referentie
  • API-keys

Bedrijf

  • Over ons
  • Contact
  • Inloggen

Juridisch

  • Voorwaarden
  • Privacy
  • Terugbetalingen
  • Mark-bescherming
  • Cookies
  • Alle beleidsstukken
Beweeg over de letters. Elke letter draagt een echte Mark.Raak een letter aan om zijn Mark te zien.Eén naam. Tien Marks erin.
© 2026 Gradiently