De token- en configuratielaag bouwen
Implementeer uw designtokens als CSS-variabelen, verbind ze met de Tailwind-configuratie en test ze in lichte en donkere modus.
De token- en configuratielaag bouwen is een gratis Tailwind CSS Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Tailwind CSS Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Tailwind CSS Academy bevat in totaal 4 lessen.
Overzicht van de tokenlaag
De tokenlaag vormt de verbinding tussen je ontwerpbeslissingen en het genereren van Tailwind-hulpprogrammaklassen. De laag bestaat uit CSS-aangepaste eigenschappen (designtokens op CSS-niveau) en de Tailwind-configuratie die naar deze eigenschappen verwijst. Als je dit correct implementeert, hoef je voor het wisselen van thema alleen de waarden van de CSS-variabelen te wijzigen — Tailwind-klassen en componentcode blijven ongewijzigd.
Primitieve tokens definiëren
Begin met het definiëren van alle onbewerkte kleur-, spatiërings- en typografiewaarden in een bestand tokens/primitives.css, met behulp van CSS-aangepaste eigenschappen. Componenten gebruiken deze primitieve waarden niet rechtstreeks — ze dienen alleen als invoer voor de laag met semantische tokens. Gebruik een gestructureerde naamgevingsconventie, zoals --color-blue-500 voor kleuren en --space-4 voor spatiëringswaarden.
/* tokens/primitives.css */
:root {
/* Color primitives */
--color-blue-50: #eff6ff;
--color-blue-100: #dbeafe;
--color-blue-500: #3b82f6;
--color-blue-600: #2563eb;
--color-blue-700: #1d4ed8;
--color-blue-900: #1e3a8a;
--color-gray-50: #f9fafb;
--color-gray-100: #f3f4f6;
--color-gray-500: #6b7280;
--color-gray-900: #111827;
--color-white: #ffffff;
--color-black: #000000;
/* Spacing primitives */
--space-1: 0.25rem;
--space-4: 1rem;
--space-8: 2rem;
}Semantische tokens definiëren
Semantische tokens geven betekenis aan primitieve waarden. Definieer ze in een afzonderlijk bestand tokens/semantic.css. Elke semantische token verwijst naar een primitieve token en vertegenwoordigt een doel in plaats van een waarde. Je overschrijft dezelfde semantische token binnen een donkere scope of een andere merkscope om van thema te wisselen.
/* tokens/semantic.css */
:root {
/* Brand colors */
--color-primary: var(--color-blue-600);
--color-primary-hover: var(--color-blue-700);
--color-primary-light: var(--color-blue-50);
/* Surface colors */
--color-surface: var(--color-white);
--color-surface-elevated: var(--color-gray-50);
/* Text colors */
--color-text-primary: var(--color-gray-900);
--color-text-secondary: var(--color-gray-500);
/* Border colors */
--color-border: var(--color-gray-100);
}Tokens voor donkere modus overschrijven
Overschrijf semantische tokens onder de klasse .dark (voor de klassenstrategie) of onder @media (prefers-color-scheme: dark) (voor de mediastrategie). Alleen semantische tokens veranderen — primitieve definities blijven ongewijzigd. Dat is de kracht van het systeem met twee niveaus: de donkere modus wordt volledig in de tokenlaag geïmplementeerd, zonder wijzigingen aan CSS van componenten of Tailwind-klassen.
/* tokens/semantic.css (dark mode overrides) */
:root {
--color-surface: #ffffff;
--color-text-primary: #111827;
--color-border: #f3f4f6;
}
.dark {
--color-surface: #111827; /* was white */
--color-text-primary: #f9fafb; /* was dark gray */
--color-border: #1f2937; /* was light gray */
--color-surface-elevated: #1f2937;
/* --color-primary unchanged: blue works in both modes */
}Tokens koppelen aan de Tailwind-configuratie
Verwijs vanuit de thema-uitbreiding van de Tailwind-configuratie naar CSS-aangepaste eigenschappen. Gebruik var(--token-name) als waarde. Dit betekent dat elk Tailwind-hulpprogramma dat naar de thematoken verwijst, tijdens runtime de CSS-variabele gebruikt, zodat je live van thema kunt wisselen zonder opnieuw te compileren. De JIT-engine genereert in de uitvoer-CSS klassen met var()-waarden.
// tailwind.config.js
module.exports = {
theme: {
extend: {
colors: {
primary: {
DEFAULT: 'var(--color-primary)',
hover: 'var(--color-primary-hover)',
light: 'var(--color-primary-light)',
},
surface: 'var(--color-surface)',
'text-primary': 'var(--color-text-primary)',
'text-secondary': 'var(--color-text-secondary)',
border: 'var(--color-border)',
},
},
},
};Op tokens gebaseerde hulpprogrammaklassen in componenten gebruiken
Nu de tokens aan de configuratie zijn gekoppeld, gebruik je ze net als elke andere Tailwind-kleur. bg-surface past de CSS-variabele --color-surface toe als achtergrond. Wanneer de gebruiker naar de donkere modus overschakelt, verandert de waarde van de CSS-variabele en wordt de achtergrond automatisch bijgewerkt, zonder wijzigingen aan componenten. Klassen op basis van tokens zien er in de markup hetzelfde uit als ingebouwde Tailwind-klassen.
<!-- Token-based Tailwind classes look just like built-in ones -->
<div class="bg-surface border border-border rounded-xl p-6">
<h2 class="text-text-primary font-semibold">Card Title</h2>
<p class="mt-2 text-text-secondary text-sm">Card description</p>
<button class="mt-4 rounded-lg bg-primary px-4 py-2 font-semibold text-white
hover:bg-primary-hover transition">
Primary Action
</button>
</div>Typografietokens
Definieer lettertypefamilie, lettergrootte, regelhoogte en letterdikte als tokens. Lettertypefamilies moeten naar een CSS-variabele verwijzen, zodat je voor het wisselen van merklettertypen alleen een variabele hoeft te wijzigen. Je kunt lettergroottes in de Tailwind-configuratie uitbreiden met semantische namen zoals text-display en text-caption, naast de standaard numerieke schaal.
/* tokens/semantic.css */
:root {
--font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif;
--font-display: 'Cal Sans', var(--font-sans);
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
}
// tailwind.config.js
theme: {
extend: {
fontFamily: {
sans: ['var(--font-sans)'],
display: ['var(--font-display)'],
mono: ['var(--font-mono)'],
},
fontSize: {
display: ['3.75rem', { lineHeight: '1.1', fontWeight: '700' }],
caption: ['0.75rem', { lineHeight: '1.5' }],
},
},
},Tokens voor spatiëring en afronding
Breid de schalen voor spatiëring en randafronding uit met semantische namen voor constanten op componentniveau. In plaats van te onthouden dat kaarten rounded-xl en badges rounded-full gebruiken, definieer je radius.card: xl en radius.badge: full in de configuratie. Zo documenteert componentcode zichzelf en gebruiken alle kaarten dezelfde afronding, ook wanneer de waarde verandert.
// tailwind.config.js
theme: {
extend: {
borderRadius: {
card: '0.75rem', // 12px — used by Card, Dialog
input: '0.5rem', // 8px — used by Input, Select
badge: '9999px', // pill — used by Badge, Tag
button: '0.5rem', // 8px — used by all Button variants
},
spacing: {
18: '4.5rem',
22: '5.5rem',
128: '32rem',
},
},
},Schaduwtokens
Definieer consistente schaduwniveaus in de Tailwind-configuratie met semantische namen. Schaduwen geven de visuele hiërarchie aan: none voor vlakke elementen, card voor oppervlakelementen, elevated voor vervolgkeuzelijsten en modals, en focus voor indicatoren van interactieve toestanden. Zo voorkom je dat willekeurige schaduwwaarden verspreid door de codebasis staan.
// tailwind.config.js
theme: {
extend: {
boxShadow: {
card: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
elevated: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',
focus: '0 0 0 3px var(--color-primary-light)',
},
},
},
<!-- Use semantic shadow names -->
<div class="shadow-card hover:shadow-elevated transition-shadow">Tokens valideren in CI
Voeg een CI-stap toe die de integriteit van tokens valideert — controleer of elke semantische token verwijst naar een bestaande primitieve token en of geen semantische token een onbewerkte hexwaarde is (waarmee je het systeem met twee niveaus zou omzeilen). Een eenvoudig Node.js-script dat het CSS-variabelenbestand parseert en verwijzingen controleert, kan verschuivingen in tokens onderscheppen voordat die productie bereiken.
// scripts/validate-tokens.js
const fs = require('fs');
const semanticCss = fs.readFileSync('tokens/semantic.css', 'utf8');
const primitiveCss = fs.readFileSync('tokens/primitives.css', 'utf8');
// Extract all var() references in semantic.css
const refs = [...semanticCss.matchAll(/var\(([^)]+)\)/g)].map(m => m[1].trim());
// Check each ref exists in primitives.css
const missing = refs.filter(ref => !primitiveCss.includes(ref + ':'));
if (missing.length > 0) {
console.error('Undefined primitive tokens:', missing);
process.exit(1);
}
console.log('All tokens valid.');Wisselen van tokens voor de donkere modus testen
Test de donkere modus visueel op tokenniveau door de klasse .dark op html te zetten en te controleren of elk semantisch kleurvlak, elke tekst en elke rand correct wordt weergegeven. Gebruik Playwright of Cypress om schermafbeeldingen te maken met dark toegepast en vergelijk die met baselines voor de lichte modus. Voer deze testsuite uit telkens wanneer het tokenbestand verandert, zodat je visuele regressies direct ontdekt.
// playwright/dark-mode.spec.ts
import { test, expect } from '@playwright/test';
test('tokens switch correctly in dark mode', async ({ page }) => {
await page.goto('/tokens-preview');
// Light mode screenshot
await expect(page).toHaveScreenshot('tokens-light.png');
// Enable dark mode
await page.evaluate(() =>
document.documentElement.classList.add('dark')
);
// Dark mode screenshot
await expect(page).toHaveScreenshot('tokens-dark.png');
});Korte controle
Test je begrip van de concepten uit deze les over Tailwind CSS Mastery.
Samenvatting van de les
In deze les heb je geleerd hoe je: primitieve en semantische tokens als CSS-aangepaste eigenschappen definieert in afzonderlijke bestanden, semantische tokens aan de Tailwind-configuratie koppelt met var(), zodat ze tijdens runtime worden bijgewerkt, en de donkere modus implementeert door alleen semantische tokens onder de klasse .dark te overschrijven. Hierna bouwen we met deze tokens de componentbibliotheek.
Leer HTML met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “De token- en configuratielaag bouwen” gratis?
Ja — de volledige tekst van “De token- en configuratielaag bouwen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Tailwind CSS Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Tailwind CSS Academy bevat in totaal 4 lessen.
Wat leer ik in “De token- en configuratielaag bouwen”?
Implementeer uw designtokens als CSS-variabelen, verbind ze met de Tailwind-configuratie en test ze in lichte en donkere modus. Je oefent met Tailwind CSS Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Tailwind CSS Academy te beginnen?
Ervaring vooraf is niet nodig. Tailwind CSS Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “De token- en configuratielaag bouwen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Tailwind CSS Academy?
Ja. Elke les over Tailwind CSS Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Het designsysteem plannen
- De token- en configuratielaag bouwen
- Een componentbibliotheek bouwen
- Documentatie en overdracht aan het team