Tailwind CSS Academy · leksjon

Organisere egendefinert CSS med lag

Bruk @layer base, @layer components og @layer utilities for å kontrollere spesifisiteten og sikre at egendefinerte stiler integreres riktig med Tailwinds resultat.

Leksjon 3 av 413 trinn

Organisere egendefinert CSS med lag er en gratis leksjon i Tailwind CSS Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Tailwind CSS Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Tailwind CSS Academy inneholder totalt 4 leksjoner.

Utfordringen med CSS-kaskaden

Når du blander Tailwind-utility-klasser med egendefinert CSS, kan det oppstå konflikter i spesifisitet. En egendefinert CSS-regel som .btn { color: red; } kan overstyre en Tailwind-utility text-blue-500 på grunn av kildeordenen, selv om du hadde til hensikt at utility-klassen skulle vinne. Tailwinds @layer-direktiv løser dette ved å gi deg eksplisitt kontroll over hvor i CSS-kaskaden de egendefinerte stilene settes inn.

Tailwinds tre lag

Tailwind organiserer all generert CSS i tre lag med fast rekkefølge: base kommer først og inneholder nullstillinger og standarder på elementnivå. components kommer som nummer to og er laget for abstraksjoner med flere utility-klasser. utilities kommer sist og inneholder alle utility-klasser med ett formål. Denne rekkefølgen sørger for at utility-klasser alltid vinner over komponentstiler, som igjen alltid vinner over grunnstiler – et forutsigbart og bevisst hierarki.

/* Order in final CSS output: */
/* 1. @layer base (element defaults) */
/* 2. @layer components (component classes) */
/* 3. @layer utilities (utility classes) */

/* Your main CSS entry file */
@tailwind base;        /* injects base layer */
@tailwind components;  /* injects components layer */
@tailwind utilities;   /* injects utilities layer */

Bruke @layer base

Base-laget er riktig sted for nullstillinger på elementnivå, standardstiler for HTML-elementer og globale stiler som alltid skal gjelde. Vanlige bruksområder er å angi standardskrift for body, etablere regler for box-sizing, nullstille marger på overskrifter og definere lenkestiler. Stiler i base-laget kan overstyres av alt i components- eller utilities-lagene.

@layer base {
  *,
  *::before,
  *::after {
    box-sizing: border-box;
  }

  body {
    @apply font-sans antialiased text-gray-900 bg-white;
  }

  h1 { @apply text-3xl font-bold tracking-tight; }
  h2 { @apply text-2xl font-semibold tracking-tight; }
  h3 { @apply text-xl font-semibold; }

  a {
    @apply text-blue-600 hover:underline;
  }

  img {
    max-width: 100%;
    height: auto;
  }
}

Bruke @layer components

Components-laget brukes til å trekke gjentatte kombinasjoner av utility-klasser ut i navngitte klasser ved hjelp av @apply. Komponentklasser som defineres her, kan overstyres av utility-klasser som brukes i HTML, fordi utility-klassene ligger i det senere utilities-laget. Dette gjør komponentklassene fleksible – de angir fornuftige standarder som alltid kan tilpasses for den enkelte forekomsten med utility-klasser.

@layer components {
  .card {
    @apply bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden;
  }

  .btn {
    @apply inline-flex items-center px-4 py-2 rounded-lg font-medium text-sm
           transition-colors duration-150 focus:outline-none focus:ring-2;
  }

  .input {
    @apply w-full border border-gray-300 rounded-lg px-4 py-2 text-sm
           focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent;
  }
}

Bruke @layer utilities

Utilities-laget brukes til egendefinerte utility-klasser med ett formål som Tailwind ikke tilbyr ferdig. Dette kan være utility-klasser for CSS-egenskaper som ennå ikke finnes i Tailwinds kjerne, nettleserspesifikke egenskaper med prefiks eller sammensatte verdier som er for spesifikke for standardskalaen. Utility-klasser i dette laget har høyest prioritet og overstyrer både base- og komponentstiler.

@layer utilities {
  /* CSS text-wrap utilities (not in Tailwind core) */
  .text-balance { text-wrap: balance; }
  .text-pretty  { text-wrap: pretty; }

  /* Content visibility for performance */
  .content-auto {
    content-visibility: auto;
    contain-intrinsic-size: auto 500px;
  }

  /* Custom scrollbar hiding */
  .scrollbar-hide {
    -ms-overflow-style: none;
    scrollbar-width: none;
  }
  .scrollbar-hide::-webkit-scrollbar {
    display: none;
  }
}

Hvorfor plasseringen i lag er viktig for spesifisitet

CSS-spesifisitet avhenger normalt av selektorens vekt. Men spesifikasjonen for CSS-kaskadelag (som Tailwind benytter) overstyrer spesifisitet: En regel i et senere lag vinner alltid over en regel i et tidligere lag, uavhengig av hvor kompleks selektoren er. Det betyr at en klasse i .utilities-laget, som .p-4 (én klasse), automatisk vinner over en klasse i .components-laget, som .card.padded.extra (tre klasser).

@layer components {
  /* Even with 3 classes, this loses to any utility */
  .card.padded.extra {
    padding: 100px;  /* will be overridden by p-4 utility */
  }
}

@layer utilities {
  /* One class in utilities layer always wins */
  .p-4 { padding: 1rem; }  /* wins! */
}

<!-- In HTML: p-4 correctly applies because utilities layer > components layer -->
<div class="card padded extra p-4">Correct padding: 1rem</div>

Egendefinerte lag utover Tailwinds tre lag

Du er ikke begrenset til Tailwinds tre standardlag. Du kan definere helt egne navngitte lag ved hjelp av CSS @layer og styre hvor de vises i kaskaden ved å deklarere dem i riktig rekkefølge øverst i CSS-filen. Dette er nyttig når du skal integrere tredjepartsbiblioteker for CSS på bestemte steder i kaskaden, eller når du vil opprette en lagdelt arkitektur i din egen CSS.

/* Declare layer order at the top of your CSS */
@layer reset, base, vendors, components, utilities, overrides;

/* Then fill in each layer */
@layer reset {
  * { box-sizing: border-box; margin: 0; }
}

@layer vendors {
  /* Third-party library styles here */
}

@layer overrides {
  /* Emergency overrides — highest specificity */
  .force-hidden { display: none !important; }
}

Stiler utenfor alle lag

CSS som skrives utenfor en @layer-blokk, har høyere spesifisitet enn alle lagdelte stiler. Det betyr at egendefinert CSS du skriver uten å omslutte den i @layer, alltid vil overstyre Tailwinds lagdelte utility-klasser, noe som potensielt kan føre til uventede layoutproblemer. Omslutt alltid de egendefinerte stilene i riktig lag – eller opprett uttrykkelig et overstyringslag – for å unngå konflikter med Tailwinds kaskade.

/* CAUTION: This is outside any layer and overrides ALL layered styles */
.btn {
  color: red;  /* This will override dark:text-white and hover:text-blue-600! */
}

/* BETTER: Inside the appropriate layer */
@layer components {
  .btn {
    color: red;  /* Can be overridden by utilities like text-white */
  }
}

Kombinere @layer med @apply

Direktivene @layer og @apply fungerer sammen. Du definerer et lag, plasserer komponent- eller utility-klasser i det og bruker @apply i disse klassene for å sette sammen Tailwind-utility-klasser. Denne kombinasjonen gir deg fordelene ved lag (forutsigbar kaskade) og bekvemmeligheten ved @apply (sammensetting fra eksisterende utility-klasser) i ett enkelt mønster.

@layer base {
  /* Element defaults using @apply */
  body { @apply font-sans antialiased text-base leading-relaxed; }
}

@layer components {
  /* Component classes using @apply */
  .alert { @apply flex items-start gap-3 p-4 rounded-lg border text-sm; }
  .alert-error { @apply alert bg-red-50 border-red-200 text-red-800; }
}

@layer utilities {
  /* Custom utilities using plain CSS */
  .touch-action-none { touch-action: none; }
  .will-change-transform { will-change: transform; }
}

Strukturere CSS-filer med lag

Etter hvert som prosjektet vokser, bør du dele CSS-en på flere filer organisert etter lagenes formål. Importer alt i én enkelt inndatafil. Hold basestilene minimale – ta bare med ting som faktisk skal gjelde globalt. Hold komponentfilene organisert etter komponenttype. Bruk utility-filer for utility-klasser som faktisk mangler. Denne strukturen gjør det enklere å sette nye utviklere inn i prosjektet og hindrer at CSS-en blir en vedlikeholdsbyrde.

/* src/styles/main.css — entry point */
@tailwind base;
@tailwind components;
@tailwind utilities;

/* Base layer additions */
@layer base {
  @import './base/typography.css';
  @import './base/reset.css';
}

/* Component layer */
@layer components {
  @import './components/buttons.css';
  @import './components/cards.css';
  @import './components/forms.css';
}

/* Utility layer additions */
@layer utilities {
  @import './utilities/layout.css';
  @import './utilities/animations.css';
}

Feilsøke problemer med lag

Når en stil ikke brukes som forventet, åpner du Chrome DevTools og ser på Styles-panelet. Gjennomstrekede deklarasjoner viser at stilene blir overstyrt. Hvis en utility-klasse blir gjennomstreket av din egen komponent-CSS, har du sannsynligvis plassert den utenfor et lag (slik at den får høyere kaskadeprioritet) eller i feil lag. Hvis du flytter den til @layer components, skal den riktige oppførselen der utility-klassen vinner, gjenopprettes.

Hurtigsjekk

Test forståelsen din av å organisere egendefinert CSS med Tailwinds @layer-direktiv.

Oppsummering av leksjonen

I denne leksjonen lærte du at Tailwinds tre lag – base, components, utilities – danner et kaskadehierarki der hvert senere lag overstyrer tidligere lag, at @layer base brukes for standarder på elementnivå, @layer components for uttrekkede komponentklasser og @layer utilities for egendefinerte utility-klasser. Neste gang utforsker vi fallgruvene ved @apply og når du heller bør trekke ut komponenter.

Gratis å komme i gang

Lær deg HTML med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
30
Leksjoner
120

Ofte stilte spørsmål

Er leksjonen «Organisere egendefinert CSS med lag» gratis?

Ja – hele teksten i «Organisere egendefinert CSS med lag» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Tailwind CSS Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Tailwind CSS Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Organisere egendefinert CSS med lag»?

Bruk @layer base, @layer components og @layer utilities for å kontrollere spesifisiteten og sikre at egendefinerte stiler integreres riktig med Tailwinds resultat. Du øver på Tailwind CSS Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Tailwind CSS Academy?

Ingen tidligere erfaring er nødvendig. Tailwind CSS Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Organisere egendefinert CSS med lag»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Tailwind CSS Academy-leksjonen?

Ja. Alle Tailwind CSS Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Hva @apply gjør, og når det bør brukes
  2. Opprette gjenbrukbare komponentklasser
  3. Organisere egendefinert CSS med lag
  4. Fallgruver og alternativer til @apply
← Tilbake til Tailwind CSS Academy