CSS en web

CSS-patronen maken met herhalende kleurverlopen

Harde kleurstops veranderen kleurverlopen in vormen, en background-size verandert vormen in tegels. Met die twee ideeën teken je de meeste klassieke patronen in een paar regels, zonder afbeeldingsbestanden.

GradientlyGeverifieerd Gradiently-account··5 min lezen
Cover: Burnt Expedition · GR·5E64·EH

De korte versie

  • CSS-patronen teken je met gradients die harde kleurstops gebruiken, zodat kleuren direct wisselen in plaats van in elkaar over te lopen.
  • De functies repeating-linear-gradient, repeating-radial-gradient en repeating-conic-gradient herhalen hun stops tot het element vol is, en tekenen zo strepen, ringen en stralen.
  • background-size maakt van één gradient een tegel, en zo bouw je stippenrasters, lijnenrasters, damborden en gingham.
  • Stopposities in pixels houden strepen scherp en gelijkmatig, terwijl percentages ongelijke, wazige randen kunnen geven.
  • Patronen achter tekst blijven best laag in contrast, zodat de woorden goed leesbaar blijven.
Op deze pagina

CSS-patronen zijn herhalende achtergronden, zoals strepen, rasters, stippen en ruiten, die je volledig met gradientfuncties tekent. Twee ideeën laten ze werken. Harde kleurstops, waarbij twee stops op dezelfde plek staan, maken van een gradient een scherpe rand. Herhaling, met de repeating-*-functies of met tegels via background-size, maakt van die ene rand een patroon. Het resultaat weegt een paar bytes, schaalt perfect en pakt zijn kleuren uit je CSS-variabelen.

Zes patronen, elk één herhalende gradient. Kopieer ze zo in background.

Hoe harde stops vormen maken

Een gradient loopt over tussen naburige stops. Begint de volgende stop precies waar de vorige eindigde, dan is er geen afstand om overheen te lopen en wisselt de kleur in een harde lijn. De verkorte schrijfwijze is een kleur met twee posities, zoals #1e293b 0 10px, die die kleur egaal houdt van 0 tot 10 pixels. De gids over de CSS linear gradient behandelt stops, hints en harde stops uitgebreid.

css
/* a soft blend */
background: linear-gradient(90deg, #1e293b, #334155);

/* a hard edge at 50% */
background: linear-gradient(90deg, #1e293b 50%, #334155 50%);

/* the same stripe pair, repeated every 20px */
background: repeating-linear-gradient(90deg, #1e293b 0 10px, #334155 10px 20px);
Van overloop naar rand naar patroon, in drie stappen.

Strepen met repeating-linear-gradient

repeating-linear-gradient() herhaalt zijn stoplijst langs de gradientlijn tot het element vol is. De lengte van één herhaling is de positie van de laatste stop, dus 0 10px, 10px 20px herhaalt elke 20 pixels. Verander de hoek voor diagonalen, en de verhouding tussen de twee banden voor krijtstrepen of brede luifelstrepen.

PatroonStopsEffect
Gelijke strepenA 0 10px, B 10px 20pxEven brede banden, herhaling van 20px
KrijtstreepA 0 23px, B 23px 24pxEen lijn van 1px om de 24px
LuifelA 0 40px, B 40px 80px bij 90degBrede verticale banden
Dubbele lijnA 0 20px, B 20px 22px, A 22px 26px, B 26px 28pxTwee dunne lijnen dicht bij elkaar
Recepten voor strepen. A en B zijn je twee kleuren; de laatste stop bepaalt de herhaallengte.

Rasters, stippen en tegels met background-size

Sommige patronen kun je niet met één herhalende gradient tekenen: een stippenraster herhaalt in twee richtingen. De oplossing is één tegel te tekenen, zoals één stip of één hoek van een raster, en background-size op de tegelgrootte te zetten. Achtergronden herhalen standaard, dus de tegel vult het element.

css
.grid-lines {
  background-color: #0f172a;
  background-image:
    linear-gradient(rgb(255 255 255 / 0.08) 1px, transparent 1px),
    linear-gradient(90deg, rgb(255 255 255 / 0.08) 1px, transparent 1px);
  background-size: 32px 32px;
}

.dots {
  background-color: #fefce8;
  background-image: radial-gradient(#ca8a04 1.5px, transparent 2px);
  background-size: 20px 20px;
}

.checkerboard {
  background: repeating-conic-gradient(#e2e8f0 0 25%, #ffffff 0 50%) 0 0 / 24px 24px;
}
Een blauwdrukraster, een stippenraster en een dambord. Elk is één tegel, herhaald door background-size.

Het raster bestaat uit twee gradients: de ene tekent een horizontale lijn van 1px bovenaan elke tegel, de andere een verticale lijn aan de linkerrand. De stippen zijn een kleine radiale gradient die na 2 pixels transparant wordt. Het dambord gebruikt een conic gradient in kwarten, en heeft daarom maar één laag nodig.

Gingham, ruiten en zigzag

Halfdoorzichtige strepen over elkaar leggen geeft geweven patronen: waar een horizontale en een verticale band kruisen, stapelen hun kleuren en wordt het vierkant donkerder. Dat is gingham. Voeg een tweede, dunnere set strepen in een andere kleur toe en het wordt een ruit. Zigzags komen van vier driehoekige hoeken, elk getekend met een harde stop op 25% onder een andere hoek.

css
.gingham {
  background-color: #ffffff;
  background-image:
    linear-gradient(90deg, rgb(220 38 38 / 0.45) 50%, transparent 0),
    linear-gradient(rgb(220 38 38 / 0.45) 50%, transparent 0);
  background-size: 24px 24px;
}

.zigzag {
  background-color: #e0f2fe;
  background-image:
    linear-gradient(135deg, #0ea5e9 25%, transparent 25%),
    linear-gradient(225deg, #0ea5e9 25%, transparent 25%),
    linear-gradient(315deg, #0ea5e9 25%, transparent 25%),
    linear-gradient(45deg, #0ea5e9 25%, transparent 25%);
  background-position: -16px 0, -16px 0, 0 0, 0 0;
  background-size: 32px 32px;
}
Rode gingham en een hemelblauwe zigzag. In de zigzag zijn de eerste twee lagen een halve tegel verschoven, zodat de driehoeken in elkaar grijpen.

Bewegende strepen voor voortgangsbalken

Geanimeerde diagonale strepen zijn de klassieke manier om te laten zien dat er nog iets gebeurt. Teken de strepen als tegel met background-size en verschuif background-position met precies één tegelbreedte. Omdat het eindbeeld gelijk is aan het beginbeeld, heeft de lus geen zichtbare sprong. Houd het bij kleine elementen en zet het uit voor mensen die liever minder beweging willen.

css
.progress {
  background-color: #4f46e5;
  background-image: linear-gradient(45deg, rgb(255 255 255 / 0.18) 25%, transparent 25% 50%, rgb(255 255 255 / 0.18) 50% 75%, transparent 75%);
  background-size: 28px 28px;
  animation: crawl 1s linear infinite;
}

@keyframes crawl {
  to { background-position: 28px 0; }
}

@media (prefers-reduced-motion: reduce) {
  .progress { animation: none; }
}
Strepen die over een voortgangsbalk kruipen. De animatieafstand is gelijk aan de tegelbreedte, dus de lus is naadloos.

Patronen schalen en thematiseren

Schrijf stopposities en tegelgroottes in pixels of em, niet in percentages. Percentages hangen af van de grootte van het element, dus strepen rekken ongelijk uit als het element van formaat verandert en randen kunnen tussen pixels vallen en vervagen. Met em schaalt een patroon mee met de tekst eromheen, wat past bij badges en labels met een patroon.

Met custom properties zijn patronen herbruikbaar. Definieer de kleuren en de grootte één keer en varieer ze per component of per thema, bijvoorbeeld een lichter patroon in de lichte modus en een rustiger patroon in de donkere modus.

css
.stripes {
  --a: #1e293b;
  --b: #334155;
  --w: 10px;
  background: repeating-linear-gradient(45deg, var(--a) 0 var(--w), var(--b) var(--w) calc(var(--w) * 2));
}

.stripes--warm {
  --a: #fff7ed;
  --b: #fed7aa;
  --w: 14px;
}
Eén patroon, van thema gewisseld door drie variabelen te veranderen.

Patronen achter tekst

Vermijd

  • Strepen met hoog contrast direct achter lopende tekst
  • Fijne patronen die flikkeren als de pagina scrolt
  • Patronen in dezelfde kleur als de tekst
  • Meerdere verschillende patronen op één scherm

Doe

  • Patronen met laag contrast, twee dicht bij elkaar liggende tinten van één kleur
  • Grotere, rustigere tegels op grote vlakken
  • Een effen paneel onder tekst die op een druk patroon staat
  • Eén patroon als herkenbaar accent

Patronen zijn een soort textuur en dezelfde regels gelden: subtiel genoeg om te voelen in plaats van te lezen. Achtergrondtextuur behandelt korrel, papier en stof; tekst op drukke achtergronden laat zien hoe woorden er leesbaar bovenop blijven.

Vragen die mensen stellen

Hoe maak ik strepen in CSS?

Gebruik repeating-linear-gradient() met harde stops, zoals repeating-linear-gradient(45deg, #1e293b 0 10px, #334155 10px 20px). Verander de hoek voor de richting en de lengtes voor de breedte.

Hoe maak ik een stippenpatroon in CSS?

Teken één stip met radial-gradient(#ca8a04 1.5px, transparent 2px) en herhaal die met background-size: 20px 20px.

Hoe maak ik een dambord in CSS?

Gebruik repeating-conic-gradient(#e2e8f0 0 25%, #ffffff 0 50%) met een background-size zoals 24px 24px. Elke tegel bevat vier vierkanten.

Waarom zijn mijn CSS-strepen wazig of ongelijk?

Percentageposities kunnen tussen pixels vallen. Gebruik pixel- of em-lengtes voor stops en tegelgroottes, en laat een halve pixel tussen stops op diagonale randen.

Zijn CSS-gradientpatronen beter dan afbeeldingspatronen?

Voor geometrische patronen meestal wel: ze hoeven niet gedownload te worden, blijven scherp op elk formaat en kun je met CSS-variabelen omkleuren. Organische of fotografische texturen hebben nog steeds afbeeldingen nodig.

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