CSS en web

CSS-kleurverloopborder: vier manieren om er een te tekenen

border-color accepteert geen kleurverloop, dus elke kleurverloopcontour is een omweg. Dit zijn de vier die ertoe doen, wat elk wel en niet kan en welke je pakt.

GradientlyGeverifieerd Gradiently-account··5 min lezen
Cover: Inner Reel · GR·WQK6·T2

De korte versie

  • CSS kan geen kleurverloop in border-color zetten, dus een CSS-kleurverloopborder wordt altijd met een andere techniek getekend.
  • border-image met een kleurverloop is de kortste methode, maar negeert border-radius, dus het past alleen bij vierkante hoeken.
  • Twee achtergrondlagen, één begrensd tot de padding box en één tot de border box, geven een afgeronde kleurverloopborder zolang de binnenkant een effen kleur is.
  • De maskertechniek snijdt het midden uit een kleurverloopblaag en geeft een afgeronde kleurverloopborder met een transparante binnenkant.
  • Een roterend conic gradient, aangestuurd door een aangepaste eigenschap geregistreerd met @property, is de gebruikelijke manier om een kleurverloopborder te animeren.
Op deze pagina

Een CSS-kleurverloopborder is een contour waarvan de kleur langs zijn lengte overloopt. Het addertje is dat border-color alleen kleuren accepteert, geen afbeeldingen, dus er is geen enkele eigenschap voor. In plaats daarvan teken je het kleurverloop elders en toon je slechts een dunne band ervan. Er zijn vier betrouwbare manieren, en de juiste hangt af van twee vragen: heeft het element afgeronde hoeken, en moet de binnenkant transparant zijn?

MethodeAfgeronde hoekenTransparante binnenkantHet best voor
border-imageNeeJaVierkante kaarten, scheidingslijnen, tabellen
Twee achtergrondenJaNee, heeft een effen vulling nodigDe meeste kaarten en knoppen
Masker op een pseudo-elementJaJaKaarten over afbeeldingen of kleurverlopen
Pseudo-element erachterJaNeeGloed en geanimeerde ringen
Kies aan de hand van de twee vragen: hoeken en binnenkant.
Kleurverlopen die goed lezen als dunne contour. Hoge verzadiging telt op een lijn van 2px meer dan op een hele achtergrond.

Methode 1: border-image

border-image accepteert elke afbeelding, ook een kleurverloop. Stel een borderbreedte en -stijl in, dan het kleurverloop, dan een slice van 1, die de browser vertelt de hele afbeelding als rand te gebruiken. Het is twee regels, werkt overal en laat de binnenkant van het element ongemoeid.

css
.panel {
  border: 3px solid;
  border-image: linear-gradient(135deg, #7c3aed, #22d3ee) 1;
}
De kortste kleurverloopborder. De 1 is de slice-waarde; zonder die wordt de border alleen in de hoeken getekend.

Methode 2: twee achtergronden met background-clip

Geef het element een transparante border en stapel dan twee achtergronden. De bovenste laag is de binnenvulling, begrensd tot de padding-box, dus hij stopt bij de binnenrand van de border. De onderste laag is het kleurverloop, begrensd tot de border-box, dus hij loopt onder de border door. Waar de vulling stopt, verschijnt het kleurverloop, en het volgt border-radius perfect.

css
.card {
  border: 2px solid transparent;
  border-radius: 16px;
  background:
    linear-gradient(#0f172a, #0f172a) padding-box,
    linear-gradient(135deg, #7c3aed, #22d3ee) border-box;
}
De vulling is geschreven als kleurverloop van één kleur omdat alleen afbeeldingen zo gelaagd kunnen worden.

Dit is de methode om standaard te pakken. De enige beperking is dat de binnenkant ondoorzichtig moet zijn, want een transparante vulling zou het kleurverloop over de hele kaart tonen. Voor kaarten op een effen paginakleur is dat helemaal geen beperking: gebruik de paginakleur als vulling.

Methode 3: de maskertechniek voor transparante binnenkanten

Als de kaart over een foto of een ander kleurverloop ligt, moet het midden doorzichtig zijn. Zet het kleurverloop op een pseudo-element dat de kaart bedekt, geef het padding gelijk aan de borderbreedte en maskeer het met twee lagen: één die alleen de content box bedekt en één die alles bedekt. De ene van de andere uitsluiten laat alleen de paddingring zichtbaar.

css
.glass-card {
  position: relative;
  border-radius: 16px;
}

.glass-card::before {
  content: "";
  position: absolute;
  inset: 0;
  padding: 2px; /* border width */
  border-radius: inherit;
  background: linear-gradient(135deg, #7c3aed, #22d3ee);
  -webkit-mask:
    linear-gradient(#000 0 0) content-box,
    linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask:
    linear-gradient(#000 0 0) content-box exclude,
    linear-gradient(#000 0 0);
  pointer-events: none;
}
Een kleurverloopring met een transparant midden. Het voorvoegselpaar dekt oudere WebKit; de standaardregel mask dekt alles wat actueel is.

pointer-events: none voorkomt dat het pseudo-element klikken opslokt die voor de inhoud van de kaart bedoeld zijn. De MDN-referentie voor mask-composite legt de compositiesleutelwoorden uit. Dit is de methode achter de meeste glassmorphism-kaarten met gloeiende randen.

Methode 4: een pseudo-element erachter, voor gloed en animatie

Plaats een kleurverloop-pseudo-element iets groter dan de kaart, achter de inhoud, en bedek het midden met een tweede pseudo-element met de effen vulling van de kaart. De zichtbare rand is het kleurverloop. Omdat het kleurverloop op een eigen laag leeft, kun je er een kopie van vervagen voor een gloed, of hem roteren.

css
@property --angle {
  syntax: "<angle>";
  inherits: false;
  initial-value: 0deg;
}

.ring {
  position: relative;
  isolation: isolate;
  border-radius: 16px;
}

.ring::before {
  content: "";
  position: absolute;
  inset: -2px;
  z-index: -1;
  border-radius: 18px;
  background: conic-gradient(from var(--angle), #7c3aed, #22d3ee, #f472b6, #7c3aed);
  animation: spin 6s linear infinite;
}

/* the card's fill, painted over the middle of the ring */
.ring::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  background: #0f172a;
}

@keyframes spin {
  to { --angle: 360deg; }
}

@media (prefers-reduced-motion: reduce) {
  .ring::before { animation: none; }
}
Een geanimeerde kleurverloopborder. De geregistreerde --angle laat de browser de conic starthoek vloeiend interpoleren en ::after tekent de vulling over het midden.
Het kleurverloop van de roterende ringconic-gradient(from 0deg, #7c3aed, #22d3ee, #f472b6, #7c3aed)
De eerste kleur aan het eind herhalen verbergt de naad terwijl hij draait. CSS conic gradients behandelt de functie diepgaand.

De buitenste straal moet gelijk zijn aan de binnenste straal plus de borderbreedte, en daarom gebruikt het pseudo-element 18px rond een kaart van 16px. Voor meer manieren om beweging in kleurverlopen te brengen, zie geanimeerde CSS-kleurverlopen.

Ontwerptips voor kleurverloopborders

Vermijden

  • Kleurverloopborders op elke kaart in een raster
  • Kleurverlopen met lage verzadiging op een lijn van 1px, die als grijs lezen
  • Een kleurverloopborder en een kleurverloopvulling op hetzelfde element
  • Snel draaiende ringen op inhoud die mensen moeten lezen

Doen

  • De kleurverloopborder reserveren voor één uitgelicht item, zoals een aanbevolen abonnement
  • 2px of meer en verzadigde stops gebruiken
  • Een rustige vulling met een levendige rand, of andersom
  • Trage rotatie, gepauzeerd voor verminderde beweging

Kleurverloopborders werken het best als nadruk. Dezelfde logica geldt voor knoppen, behandeld in kleurverloopknoppen in CSS.

Vragen die mensen stellen

Hoe maak ik een kleurverloopborder in CSS?

De snelste manier is border: 3px solid; border-image: linear-gradient(135deg, #7c3aed, #22d3ee) 1;. Gebruik voor afgeronde hoeken twee achtergronden begrensd tot padding-box en border-box.

Waarom werkt border-radius niet met border-image?

Volgens de specificatie wordt een border getekend met border-image niet afgerond door border-radius. Gebruik de background-clip- of maskermethode voor afgeronde kleurverloopborders.

Hoe maak ik een kleurverloopborder met een transparante achtergrond?

Gebruik de maskertechniek: een pseudo-element met het kleurverloop, padding gelijk aan de borderbreedte en een masker dat zijn content box uitsluit.

Hoe animeer ik een kleurverloopborder?

Registreer een hoek met @property, gebruik die als from-hoek van een conic gradient op een pseudo-element en animeer die eigenschap van 0deg naar 360deg.

Welke methode voor een kleurverloopborder moet ik gebruiken?

Gebruik twee achtergronden voor de meeste afgeronde kaarten en knoppen, border-image voor vierkante randen en de maskertechniek alleen als de binnenkant transparant moet blijven.

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