Tailwind CSS Academy · Lektion

Tematisering baserad på CSS-variabler

Lagra designtokens som anpassade CSS-egenskaper och referera till dem i Tailwinds konfiguration för att möjliggöra temabyte vid körning utan omkompilering.

Lektion 2 av 413 steg

Tematisering baserad på CSS-variabler är en gratis lektion i Tailwind CSS Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Tailwind CSS Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Tailwind CSS Academy innehåller totalt 4 lektioner.

Varför CSS-variabler för temahantering?

Anpassade CSS-egenskaper (CSS-variabler) är nyckeln till temahantering under körning med Tailwind. Till skillnad från statiska värden som byggs in i den kompilerade CSS-koden kan CSS-variabler ändras av JavaScript när som helst utan att sidan behöver laddas om. Det gör dem idealiska för att implementera växling mellan ljust och mörkt läge, teman som användaren kan välja eller varumärkesanpassning för flera klienter, där samma applikation behöver se olika ut för olika kunder.

Definiera CSS-variabler i :root

CSS-variabler definieras på selektorn :root så att de är globalt tillgängliga på hela sidan. Syntaxen är --variable-name: value. Ni refererar till dem med var(--variable-name). Placera dessa definitioner i er globala CSS-fil — vanligtvis globals.css eller index.css — så att de finns tillgängliga innan några komponentstilar tillämpas.

/* globals.css */
@tailwind base;
@tailwind components;
@tailwind utilities;

@layer base {
  :root {
    --color-primary: #3b82f6;
    --color-primary-hover: #1d4ed8;
    --color-surface: #ffffff;
    --color-surface-alt: #f8fafc;
    --color-text: #111827;
    --color-text-muted: #6b7280;
    --color-border: #e5e7eb;
  }
}

Koppla in CSS-variabler i Tailwind-konfigurationen

När CSS-variablerna har definierats refererar ni till dem i tailwind.config.js med syntaxen var(--variable-name). Tailwind genererar utility-klasser som använder dessa variabler som värden. När variabeln ändras under körning uppdateras automatiskt alla genererade klasser som refererar till den — ingen omkompilering behövs.

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        primary: 'var(--color-primary)',
        'primary-hover': 'var(--color-primary-hover)',
        surface: 'var(--color-surface)',
        'surface-alt': 'var(--color-surface-alt)',
        'text-base': 'var(--color-text)',
        'text-muted': 'var(--color-text-muted)',
        border: 'var(--color-border)'
      }
    }
  }
}

Använd variabelbaserade klasser i HTML

När variablerna har kopplats till Tailwind fungerar era utility-klasser precis som tidigare — den enda skillnaden är att det underliggande värdet nu är dynamiskt. Om ni skriver bg-surface tillämpas background-color: var(--color-surface) på elementet. Ändra variabelns värde i CSS så uppdateras alla element som använder bg-surface utan några ändringar i HTML eller JavaScript.

<div class="bg-surface text-text-base border border-border rounded-xl p-6">
  <h2 class="text-xl font-semibold text-primary mb-2">Card Title</h2>
  <p class="text-text-muted text-sm">This card adapts to any theme.</p>
  <button class="bg-primary hover:bg-primary-hover text-white px-4 py-2 rounded-lg mt-4">
    Action
  </button>
</div>

Mörkt läge med CSS-variabler

För att implementera mörkt läge skriver ni över CSS-variablernas värden under en .dark-klass på rotelementet. När JavaScript växlar dark-klassen på html ändras alla variabelvärden samtidigt, vilket omedelbart uppdaterar varje komponent. Detta tillvägagångssätt kräver inga ytterligare Tailwind-utilities utöver de inledande variabelbaserade klasser ni redan har.

@layer base {
  :root {
    --color-primary: #3b82f6;
    --color-surface: #ffffff;
    --color-text: #111827;
  }

  .dark {
    --color-primary: #60a5fa;
    --color-surface: #1e293b;
    --color-text: #f1f5f9;
  }
}

Stöd för opacitet med CSS-variabler

Det finns en detalj att tänka på när CSS-variabelfärger används tillsammans med Tailwinds syntax för opacitetsmodifierare. Utilities som bg-primary/50 kräver att färgen anges i RGB-kanalformat så att Tailwind kan infoga alfavärdet. För att stödja opacitetsmodifierare definierar ni variablerna som RGB-tripletter utan omslutningen rgb() och använder mönstret rgb(var() / alpha) i konfigurationen.

/* globals.css — RGB triplet format */
:root {
  --color-primary-rgb: 59 130 246;
}

/* tailwind.config.js */
module.exports = {
  theme: {
    extend: {
      colors: {
        primary: ({
          opacityValue
        }) => opacityValue
          ? 'rgb(var(--color-primary-rgb) / ' + opacityValue + ')'
          : 'rgb(var(--color-primary-rgb))'
      }
    }
  }
}

Flera temavarianter

Med CSS-variabler kan ni definiera flera fullständiga teman, inte bara ljust och mörkt. Med attributet data-theme kan ni begränsa olika uppsättningar variabler till olika delar av sidan eller växla hela applikationens tema. Detta är särskilt användbart i multi-tenant SaaS-applikationer där varje kunds varumärke behöver ett eget färgschema från en gemensam kodbas.

@layer base {
  [data-theme='ocean'] {
    --color-primary: #0ea5e9;
    --color-surface: #0c4a6e;
    --color-text: #e0f2fe;
  }

  [data-theme='forest'] {
    --color-primary: #16a34a;
    --color-surface: '#dcfce7';
    --color-text: #14532d;
  }
}

<!-- Switch theme with JS -->
document.documentElement.setAttribute('data-theme', 'ocean');

Animera temaväxlingar

Vid temaväxling kan en plötslig färgförändring kännas ryckig. Om ni lägger till en CSS-övergång för alla egenskaper på rotelementet skapas en mjuk färgövergång när variablerna ändras. Var selektiv — om för många egenskaper animeras eller om animeringarna har lång varaktighet kan gränssnittet kännas trögt. En övergång på 150–300 ms för färgrelaterade egenskaper är vanligtvis idealisk.

/* globals.css */
*, *::before, *::after {
  transition-property: color, background-color, border-color;
  transition-duration: 200ms;
  transition-timing-function: ease;
}

/* Exclude transitions from elements that should be instant */
.no-theme-transition,
.no-theme-transition * {
  transition: none !important;
}

Spara temapreferensen

En temaväxling är meningslös om den återställs när sidan laddas om. Använd localStorage för att spara användarens inställning och återställa den vid nästa besök. Skriptet som återställer inställningen måste köras innan sidan renderas för att undvika att fel tema visas tillfälligt. Placera ett inline-skript högst upp i HTML-koden head — inte i en modul som laddas efter att sidan har målats upp.

<!-- In <head> before any CSS -->
<script>
  (function() {
    var theme = localStorage.getItem('theme') ||
      (window.matchMedia('(prefers-color-scheme: dark)').matches
        ? 'dark' : 'light');
    document.documentElement.setAttribute('data-theme', theme);
    if (theme === 'dark') {
      document.documentElement.classList.add('dark');
    }
  })();
</script>

Mönster för semantisk variabelnamngivning

Använd ett konsekvent namngivningsmönster för era CSS-variabler så att de blir förutsägbara och självförklarande. Ett tredelat mönster med --category-role-state fungerar bra. Exempel: --color-action-default, --color-action-hover, --color-surface-raised, --color-feedback-error. Undvik vaga namn som --color1 eller alltför specifika namn som --signup-button-blue.

:root {
  /* Action colors */
  --color-action-default: #3b82f6;
  --color-action-hover: #1d4ed8;
  --color-action-disabled: #93c5fd;

  /* Surface colors */
  --color-surface-base: #ffffff;
  --color-surface-raised: #f8fafc;
  --color-surface-overlay: #f1f5f9;

  /* Feedback colors */
  --color-feedback-success: #16a34a;
  --color-feedback-error: #dc2626;
  --color-feedback-warning: #d97706;
}

Felsök CSS-variabelteman

När en temafärg inte visas korrekt är webbläsarens DevTools ert bästa hjälpmedel. Panelen för beräknade stilar visar det slutliga värdet för alla CSS-variabler på valfritt element. Ni kan också inspektera :root direkt för att se alla variabelvärden. Om ni ser den råa strängen var(--name) i stället för en färg är variabeln inte definierad i det aktuella omfånget — kontrollera om det finns stavfel eller saknade block med :root.

/* Quick debug: visualize all theme colors */
.theme-debug {
  background-color: var(--color-surface-base);
  color: var(--color-text-primary);
  border: 2px solid var(--color-border);
}

/* In DevTools console: */
/* getComputedStyle(document.documentElement)
   .getPropertyValue('--color-primary') */

Snabbtest

Testa er förståelse av koncepten i Tailwind CSS Mastery från den här lektionen.

Sammanfattning av lektionen

I den här lektionen har ni lärt er att anpassade CSS-egenskaper som definieras på :root fungerar som dynamiska designtokens, att Tailwinds konfiguration kan referera till dem med var(--name) så att genererade klasser kan ändras under körning och att flera teman implementeras genom att variabelvärden byts ut under olika klass- eller dataattributselektorer. Nästa steg är att utforska strategier för temahantering med flera varumärken för produktteam.

Gratis att börja

Lär dig HTML med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”Tematisering baserad på CSS-variabler” gratis?

Ja – hela texten till ”Tematisering baserad på CSS-variabler” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Tailwind CSS Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Tailwind CSS Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Tematisering baserad på CSS-variabler”?

Lagra designtokens som anpassade CSS-egenskaper och referera till dem i Tailwinds konfiguration för att möjliggöra temabyte vid körning utan omkompilering. Ni övar på Tailwind CSS Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Tailwind CSS Academy?

Du behöver inga förkunskaper. Utbildningen i Tailwind CSS Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Tematisering baserad på CSS-variabler”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Tailwind CSS Academy-lektionen?

Ja. Varje Tailwind CSS Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Primitiva kontra semantiska tokens
  2. Tematisering baserad på CSS-variabler
  3. Strategi för tematisering av flera varumärken
  4. Dokumentation och styrning av tokens
← Tillbaka till Tailwind CSS Academy