Tailwind CSS Academy · Lektion

Content-stier og oprydning

Konfigurér content-arrayet korrekt, så Tailwind gennemgår alle filer og fjerner ubrugte klasser i produktionsbuilds.

Lektion 2 af 413 trin

Content-stier og oprydning er en gratis Tailwind CSS Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Tailwind CSS Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Tailwind CSS Academy-kurset indeholder 4 lektioner i alt.

Hvorfor fjernelse af ubrugte klasser er vigtig

Tailwind CSS genererer utility-klasser for alle kombinationer af dine temaværdier — potentielt hundredtusindvis af klasser. Uden beskæring ville den rå CSS-output fylde flere megabyte. Processen med at fjerne ubrugte klasser (officielt kaldet scanning af indhold eller tree-shaking) fjerner alle klasser, der ikke optræder i dine kildefiler, og reducerer typisk produktions-CSS til blot 5–50 KB. Det er afgørende for et effektivt build, at din indholdskonfiguration er korrekt.

Sådan fungerer scanning af indhold

Tailwind scanner de filer, du angiver i arrayet content, og søger efter tekstmønstre, der ligner Tailwind-klassenavne. Den kører ikke din kode — den foretager en simpel tekstsøgning. Alle tekststrenge, der matcher en kendt utility-klasse, medtages i outputtet. Derfor må du aldrig konstruere klassenavne dynamisk ved at sammenkæde tekststrenge; scanneren finder ikke det fulde klassenavn.

// BAD: Tailwind cannot detect 'text-red-500'
const color = 'red';
const cls = 'text-' + color + '-500';  // scanner sees 'text-' + 'red' + '-500'

// GOOD: Full class names are always present in source
const cls = isError ? 'text-red-500' : 'text-green-500';  // scanner sees both

Skrivning af glob-mønstre til indhold

Glob-mønstre i arrayet content bruger standard-g||||syntax. Dobbeltstjernen ** matcher et vilkårligt antal mappeniveauer. Tuborgklammer {} matcher flere filendelser. Vær så specifik som muligt — undgå mønstre, der er for brede (som ./**/*), da de gør scanningen langsommere ved at medtage filer som billeder og JSON, der ikke kan indeholde klassenavne.

// tailwind.config.js
module.exports = {
  content: [
    './src/**/*.{html,js,jsx,ts,tsx,vue}',
    './components/**/*.{js,jsx,ts,tsx}',
    './pages/**/*.{js,jsx,ts,tsx}',
    './layouts/**/*.html',
    // Include a specific file
    './public/index.html',
    // Include node_modules (for UI library components)
    './node_modules/@my-ui/components/dist/**/*.js',
  ],
};

Indhold til populære frameworks

Forskellige frameworks organiserer deres filer på forskellige måder. Her er de korrekte indholdsmønstre til de mest populære opsætninger. Next.js kræver mapperne app/ og pages/. Vue-projekter bruger typisk .vue-filer. Laravels Blade-skabeloner ligger i resources/views/. Kontrollér altid, at dine indgangsfiler (som index.html eller layoutfiler) er inkluderet eksplicit, hvis de ligger uden for dine glob-mønstre.

// Next.js App Router
content: ['./app/**/*.{js,jsx,ts,tsx}', './components/**/*.{js,jsx,ts,tsx}']

// Vue + Vite
content: ['./index.html', './src/**/*.{vue,js,ts}']

// Laravel Blade
content: ['./resources/**/*.blade.php', './resources/**/*.js']

// Nuxt 3 (usually auto-detected, but explicit)
content: ['./components/**/*.vue', './pages/**/*.vue', './layouts/**/*.vue']

Indstillingen safelist

Nogle gange konstrueres klasser ved kørsel, så de ikke kan registreres ved statisk scanning — for eksempel klassenavne, der bygges ud fra CMS-indhold, brugerinput eller API-svar. Brug indstillingen safelist til at tvinge bestemte klasser eller mønstre med i outputtet, så de altid er til stede, uanset om scanneren finder dem. Du kan angive individuelle tekststrenge eller regex-mønstre i safelist.

// tailwind.config.js
module.exports = {
  safelist: [
    // Individual classes
    'text-red-500',
    'bg-blue-100',
    // Pattern: all bg-{color}-{shade} for red and green
    {
      pattern: /bg-(red|green)-(100|200|300|400|500)/,
    },
    // Include hover variants too
    {
      pattern: /bg-red-(400|500)/,
      variants: ['hover', 'focus'],
    },
  ],
};

Indstillingen blocklist

Indstillingen blocklist er det modsatte af safelist — den forhindrer bestemte klasser i at blive inkluderet i outputtet, selv hvis scanneren finder dem i din kilde. Det er nyttigt til at håndhæve teamets konventioner (forhindre brug af forældede utility-navne) eller reducere outputstørrelsen ved eksplicit at udelukke utilities, som du ved aldrig vil bruge, f.eks. bestemte skriftstørrelser eller animationsklasser.

// tailwind.config.js
module.exports = {
  blocklist: [
    // Prevent these classes from being generated
    'container',
    'prose',
    'animate-bounce',
  ],
};

Transformering af indhold

For filer, der skal forbehandles før scanning — som .pug-skabeloner, .md-filer eller tilpassede skabelonmotorer — giver Tailwinds indstilling content.transform dig mulighed for at angive en funktion, der omdanner det rå filindhold til en tekststreng med klassenavne. Det er sjældent nødvendigt, men effektivt i særlige tilfælde, hvor filformatet skjuler klassenavne på en ikke-indlysende måde.

// tailwind.config.js
module.exports = {
  content: {
    files: ['./src/**/*.{html,js}'],
    transform: {
      // Transform markdown files before scanning
      md: (content) => {
        // Render to HTML first so class names are visible
        return renderMarkdownToHtml(content);
      },
    },
  },
};

Udtræk af indhold til komponentbiblioteker

Hvis dit projekt bruger et tredjeparts-komponentbibliotek, der leverer forudbygget JavaScript med indlejrede Tailwind-klasser, skal du inkludere bibliotekets dist-filer i dit content-array. Mange populære Tailwind-komponentbiblioteker (som Flowbite, daisyUI eller tilpassede interne biblioteker) fungerer på denne måde. Tilføj stien til deres byggede JavaScript-output, så scanneren kan registrere, hvilke klasser de bruger.

// tailwind.config.js
module.exports = {
  content: [
    './src/**/*.{html,js,jsx,ts,tsx}',
    // Include prebuilt components from a library
    './node_modules/flowbite/**/*.js',
    // Or a local package in a monorepo
    '../../packages/ui/src/**/*.{js,jsx,ts,tsx}',
  ],
};

Kontrol af din indholdskonfiguration

For at bekræfte, at din indholdskonfiguration fungerer korrekt, skal du køre npx tailwindcss build og kontrollere outputfilens størrelse. Et produktions-build med en velfungerende konfiguration bør være under 50 KB (ofte betydeligt mindre). Du kan også køre Tailwind CLI med flaget --watch under udvikling for at se kompileringen i realtid og kontrollere, at en ny klasse straks vises i outputtet.

# Build and check output size
npx tailwindcss -i ./src/input.css -o ./dist/output.css --minify

# Check the size
wc -c < ./dist/output.css  # bytes
ls -lh ./dist/output.css   # human-readable

# Watch mode for development
npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch

JIT og generering af klasser efter behov

Tailwind v3 bruger som standard en Just-In-Time (JIT)-motor. I modsætning til den gamle PurgeCSS-tilgang genererer JIT klasser efter behov, mens du skriver dem, og scanner dine indholdsfiler i realtid under udviklingen. Det betyder, at din udviklings-CSS allerede er lille og matcher produktionen nøjagtigt — der er ikke noget separat trin til fjernelse af ubrugte klasser i v3. Arrayet content bruges både til scanning under udvikling og optimering i produktionen.

Almindelige fejl i indholdskonfigurationen

Den mest almindelige fejl er manglende filer i arrayet content — klasser fra disse filer fjernes i produktionen. En anden fejl er dynamisk konstruktion af klasser, hvor det fulde klassenavn aldrig optræder som en tekststreng. Et tredje problem er glemte skabelonfiler i frameworks, der ikke bruger JavaScript. Test altid dit produktions-build lokalt med NODE_ENV=production for at opdage problemer med fjernelse af ubrugte klasser, før du implementerer.

// Common mistake: incomplete pattern
content: ['./src/**/*.js']  // MISSES .jsx, .tsx, .html files!

// Better: cover all template types
content: ['./src/**/*.{html,js,jsx,ts,tsx}']

// Also common: missing the root HTML file
content: [
  './index.html',              // don't forget this!
  './src/**/*.{js,jsx,ts,tsx}'
]

Hurtigt tjek

Test din forståelse af Tailwinds content-stier og fjernelse af klasser.

Opsummering af lektionen

I denne lektion lærte du, at content-arrayet fortæller Tailwind, hvilke filer der skal scannes efter klassenavne, at fulde klassenavne altid skal optræde som tekststrenge, for at scanneren kan registrere dem, og at indstillingen safelist tvinger klasser med, som ikke kan registreres statisk. Dernæst ser vi på forskellen mellem at udvide og tilsidesætte Tailwind-temaet.

Gratis at komme i gang

Lær HTML med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Content-stier og oprydning” gratis?

Ja — hele teksten til “Content-stier og oprydning” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Tailwind CSS Academy-kurset, skal du opgradere til CoddyKit PRO. Tailwind CSS Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Content-stier og oprydning”?

Konfigurér content-arrayet korrekt, så Tailwind gennemgår alle filer og fjerner ubrugte klasser i produktionsbuilds. Du øver dig i Tailwind CSS Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Tailwind CSS Academy?

Der kræves ingen tidligere erfaring. Tailwind CSS Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Content-stier og oprydning”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Tailwind CSS Academy-lektion?

Ja. Alle Tailwind CSS Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Anatomien i tailwind.config.js
  2. Content-stier og oprydning
  3. Udvidelse kontra tilsidesættelse af temaet
  4. Tilføjelse og konfiguration af plugins
← Tilbage til Tailwind CSS Academy