How to Fix "Tailwind CSS Styles Not Updating" in a Vite React App

Updated September 13, 2026: Tailwind CSS’s current documentation identifies the framework as v4.3, and its recommended Vite integration is the dedicated @tailwindcss/vite plugin plus @import "tailwindcss";. Vite’s official releases page lists Vite 8.3.0 as released on September 10, 2026. That matters because many “Tailwind styles not updating” fixes copied from older tutorials target Tailwind v3 and can send a v4 project in the wrong direction.

If Tailwind styles render once but stop changing, or new utility classes appear in your JSX without changing the page, troubleshoot the problem in four layers: verify the Tailwind major version and Vite integration, verify that the Tailwind CSS file is actually loaded, verify that Tailwind can detect the class names and source files, then isolate Vite HMR or browser caching. This order avoids unnecessary reinstalls and destructive cache-clearing.

Quick diagnostic table

SymptomMost likely areaFirst check
No Tailwind utilities work at allInstallation or CSS importConfirm @tailwindcss/vite, the Vite plugin, and @import "tailwindcss";
Existing utilities work, but a new class does notClass detectionMake sure the complete class name exists as plain text in a detected source file
Classes in a shared package do not workSource scanningAdd an explicit @source path for the package or set the correct source base
Changes appear only after restarting the dev serverVite/plugin stateRestart Vite and inspect terminal output for errors
DevTools shows the class but the rule is missingTailwind generationCheck source detection and dynamic class construction
DevTools shows the expected rule but the page looks unchangedCSS precedence or browser stateInspect the computed style and rule order before clearing caches

1. Identify whether the project is Tailwind v4 or a legacy v3 setup

Start here because the correct fix depends on the Tailwind major version. Run:

npm ls tailwindcss @tailwindcss/vite vite

For a current Tailwind v4 + Vite project, Tailwind’s official Vite installation guide recommends installing tailwindcss and @tailwindcss/vite, registering the plugin in vite.config.js or vite.config.ts, and importing Tailwind from your CSS with one line:

@import "tailwindcss";

The corresponding Vite configuration is conceptually:

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import tailwindcss from "@tailwindcss/vite";

export default defineConfig({
  plugins: [react(), tailwindcss()],
});

If your project instead has a tailwind.config.js with a content array and a stylesheet containing @tailwind base, @tailwind components, and @tailwind utilities, you are looking at the v3-era setup. That is not automatically broken if the project is intentionally still on Tailwind v3, but it should not be mixed blindly with v4 instructions. Tailwind’s official v4 upgrade guide specifically explains that the Vite plugin and CSS import flow changed in v4.

VS-kodevisning av en Tailwind v3-stil index.css-fil som inneholder de tre eldre Tailwind-direktivene.
Dette er et gjenkjennelig stilark i Tailwind v3-stil. Hvis prosjektet ditt er på Tailwind v4.3, må du ikke kopiere disse tre direktivene som det nåværende Vite-oppsettet; den nåværende dokumentasjonen bruker @import "tailwindcss";.

Praktisk regel: før du endrer konfigurasjonsfiler, bør du bestemme hvilken hovedversjon du faktisk kjører. Et halvt migrert prosjekt er en vanlig årsak til forvirrende oppførsel fordi pakkeversjonene, PostCSS-konfigurasjonen, Vite-pluginen og CSS-direktivene kan tilhøre forskjellige generasjoner av Tailwind.

2. Bekreft at Vite laster inn CSS-filen som importerer Tailwind

Selv en perfekt Tailwind-konfigurasjon kan ikke oppdatere siden hvis stilarket ikke er en del av Vite-modulgrafen. I en typisk React-oppføringsfil, sjekk for en import som for eksempel:

import "./index.css";

Åpne deretter den nøyaktige filen og bekreft at den inneholder den gjeldende Tailwind-importen:

@import "tailwindcss";

Vites offisielle funksjonsdokumentasjon sier at importert CSS injiseres på siden og støtter Hot Module Replacement (HMR). Med andre ord, hvis index.cssimporten skjer riktig, bør endring av vanlig CSS normalt oppdateres uten at hele siden lastes inn på nytt. Det gir deg en nyttig kontrolltest.

Kjør en todelt kontrolltest

  1. Legg til en midlertidig, enkel CSS-regel i det importerte stilarket, for eksempel en synlig kantlinje rundt et testelement.
  2. Endre også et statisk Tailwind-verktøy på samme element, for eksempel fra bg-blue-500til bg-emerald-500.

Hvis den vanlige CSS-en endres umiddelbart, men Tailwind-verktøyet ikke gjør det, laster Vite stilarket og HMR er aktivt. Fokuser på Tailwind-deteksjon eller -generering. Hvis ingen av endringene vises, fokuser først på CSS-importen, Vite-utviklerserveren, filbanen eller nettleserens tilstand.

Koderedigeringsprogram som viser en tailwind.config.js-fil i Tailwind v3-stil med en innholdsmatrise som inkluderer index.html og kildefiler.
En eldre Tailwind v3-innholdsmatrisekonfigurasjon. I Tailwind v4 erstattet automatisk kildedeteksjon det rutinemessige behovet for denne matrisen, selv om eksplisitt kilderegistrering fortsatt er tilgjengelig når automatisk deteksjon ikke kan se en fil.

3. Fiks kildedeteksjon og dynamiske klassenavn

Tailwind genererer CSS ved å skanne kildefiler etter klasselignende tokens. Den nåværende dokumentasjonen for deteksjon av klasser i kildefiler forklarer to detaljer som direkte forårsaker symptomer på at «stiler ikke oppdateres».

Ikke bygg klassenavn fra strengfragmenter

Tailwind behandler kildefiler som tekst; den evaluerer ikke JavaScript-koden din for å finne den endelige verdien av en malstreng. Dette mønsteret er upålitelig:

function Badge({ color }) {
  return <span className={`bg-${color}-500 text-white`}>...</span>;
}

De komplette strengene bg-red-500, bg-blue-500og så videre vises aldri i kildekoden, så Tailwind har ingenting definitivt å generere. Tilordne verdier til komplette, statisk detekterbare klassestrenger i stedet:

const variants = {
  red: "bg-red-500 text-white",
  blue: "bg-blue-500 text-white",
};

function Badge({ color }) {
  return <span className={variants[color]}>...</span>;
}

Hvis en hardkodet testklasse oppdateres, men en prop-generert klasse ikke gjør det, er dette det første du må fikse.

Registrer kilder som Tailwind med vilje hopper over

Tailwind v4 oppdager automatisk kildefiler, men dokumentasjonen sier at den ignorerer filer i .gitignore, node_modules, binære filer, CSS-filer og vanlige låsefiler. Dette blir relevant i monorepos og pakker med delt brukergrensesnitt.

Hvis React-appen din bruker en Tailwind-stilpakke som ligger utenfor det automatisk oppdagede kildetreet, registrer den eksplisitt fra stilarket:

@import "tailwindcss";
@source "../packages/ui";

For en pakke inni node_modules, viser Tailwinds dokumentasjon den samme @sourcemekanismen for eksplisitt å inkludere det biblioteket. For et monorepo der dev-kommandoen kjører fra en annen arbeidskatalog, kan du også angi kildekoden som base på importen:

@import "tailwindcss" source("../src");

Bruk eksplisitte kilder bare når du trenger dem. Å legge til store kataloger «bare i tilfelle» gjør det vanskeligere å resonnere rundt prosjektet og kan skape unødvendig skannearbeid.

4. Skill Tailwind-problemer fra Vite HMR, foreldet tilstand og CSS-prioritet

Når v4-integrasjonen, importen av stilark og kildedeteksjon er riktige, start utviklerserveren på nytt. Endringer på konfigurasjonsnivå er en god grunn til å stoppe gjeldende prosess og kjøre:

npm run dev

Ikke begynn med å slette node_modules, låsefilen eller alle hurtigbufferkataloger. Disse trinnene kan skjule den faktiske årsaken og introdusere avhengighetsdrift. Vite har sin egen hurtigbuffer- og avhengighetsoptimaliseringsvirksomhet, men den offisielle feilsøkingsdokumentasjonen påpeker spesifikt vite --forcetilfeller som foreldede optimaliserte avhengigheter etter kobling eller frakobling av lokale pakker. Bruk tvungen reoptimalisering når den situasjonen gjelder, ikke som den første universelle løsningen.

Terminalvindu som viser npm run dev som starter en Vite-utviklingsserver og skriver ut en localhost-adresse.
En representativ omstart av Vite-utviklingsserveren. Versjonsnummeret som vises i en terminal kan avvike fra den installerte utgivelsen. For dette feilsøkingstrinnet er det viktigste signalet at serveren starter på nytt uten Tailwind- eller plugin-feil.

Bruk DevTools til å avgjøre hva som faktisk feiler

Undersøk elementet som burde ha endret seg og still tre spørsmål:

  • Finnes den forventede klassen i DOM-en? Hvis ikke, er det React-tilstanden eller komponentlogikken som er problemet, ikke Tailwind.
  • Genereres en samsvarende CSS-regel? Hvis klassen finnes, men ingen regel finnes, undersøk kildedeteksjon i Tailwind, dynamisk klassekonstruksjon eller plugin-oppsett.
  • Er regelen til stede, men overstreket eller overstyrt? Da genererte Tailwind verktøyet uten problemer. Problemet er CSS-rekkefølge, spesifisitet, en innebygd stil, et annet stilark eller en mer spesifikk velger.
Nettleservindu som viser en Vite React-side med en blå Tailwind-stilknapp og et DevTools Elements-panel som viser verktøyklasser.
Utviklerverktøy kan skille genereringsproblemer fra overstyringsproblemer: bekreft først at den forventede klassen er på elementet, sjekk deretter om en samsvarende regel finnes og om en annen regel vinner.

Rask sjekkliste for et Vite React-prosjekt på Tailwind v4

  • tailwindcssog @tailwindcss/viteer installert i prosjektet som kjører Vite.
  • vite.config.jseller vite.config.tsregistreres tailwindcss()sammen med React-pluginen.
  • CSS-filen som importeres av React-inngangspunktet ditt inneholder @import "tailwindcss";.
  • JSX-brukene classNameog de komplette Tailwind-verktøynavnene vises bokstavelig talt i kildekoden.
  • Filer som inneholder verktøy er inne i Tailwinds automatisk oppdagede kilder, eller legges til med @source.
  • Utviklerserveren ble startet på nytt etter endring av Vite/Tailwind-konfigurasjonen.
  • DevTools bekrefter om klassen mangler, regelen mangler eller regelen overstyres.

Vanlige rettelser som er versjonsavhengige

Råd du kan finne på nettetStatus for Tailwind v4Hva man skal gjøre i stedet
Legg til hver React-fil contentitailwind.config.jsVanligvis råd om eldre v3Stol på automatisk deteksjon i v4; legg @sourcebare til for kilder som ikke oppdages automatisk
Legge til@tailwind base; @tailwind components; @tailwind utilities;Eldre oppsettmønsterBruk @import "tailwindcss";i gjeldende v4-flyt
Bruk tailwindcssdirekte som PostCSS-pluginEndret i v4For Vite, foretrekk @tailwindcss/vite; for PostCSS, bruk@tailwindcss/postcss
Slett alle avhengigheter når HMR ikke oppfører seg som den skalIkke en målrettet diagnoseStart Vite på nytt, inspiser feil og bruk Vites dokumenterte tvungne reoptimalisering bare når hurtigbuffer-/avhengighetsscenarioet gjelder.

Hvis stilene fortsatt ikke oppdateres

Lag den minste mulige testen i samme prosjekt: ett React-element med en litteral klassestreng som className="bg-red-500 p-8 text-white", importert gjennom det vanlige inngangspunktet. Hvis det elementet fungerer, er Tailwind/Vite-integrasjonen fundamentalt sett i orden, og den gjenværende feilen er lokal for kildedeteksjon, dynamisk klassekonstruksjon, komponentlogikk eller CSS-prioritet.

Hvis minimal-elementet fortsatt ikke fungerer, sammenlign filene dine linje for linje med Tailwinds gjeldende Vite-installasjonsinstruksjoner. Bekreft at du ikke ved et uhell kjører Vite fra et overordnet arbeidsområde med en annen package.json, at den installerte Tailwind-hovedversjonen samsvarer med konfigurasjonsstilen, og at CSS-filen du redigerte er den som faktisk ble importert av React.

Den mest effektive feilsøkingsvanen er å unngå å behandle alle sider som ser gammeldagse ut som en HMR-feil. I en moderne Tailwind v4 + Vite React-app deltar CSS-importer allerede i Vite HMR. Når vanlig CSS oppdateres, men et bestemt verktøy ikke gjør det, er Tailwind-klassedeteksjon vanligvis et bedre sted å undersøke enn nettleserens hurtigbuffer.

Offisielle referanser

Legg igjen en kommentar

How to Fix "Tailwind CSS Styles Not Updating" in a Vite React App

How to Fix "Tailwind CSS Styles Not Updating" in a Vite React App

Fix Tailwind CSS styles not updating in Vite React by checking Tailwind v4 setup, CSS imports, source detection, dynamic classes, HMR, and stale caches.

Slik fikser du ModuleNotFoundError: Ingen modul kalt 'pip' i Python 3

Slik fikser du ModuleNotFoundError: Ingen modul kalt 'pip' i Python 3

Fiks Python 3s ModuleNotFoundError for pip på Windows, macOS og Linux med ensurepip, OS-pakker, virtuelle miljøer og tolkekontroller.

Slik fikser du «Ingen tillatelse (offentlig nøkkel)» i GitHub SSH

Slik fikser du «Ingen tillatelse (offentlig nøkkel)» i GitHub SSH

Fiks GitHub SSH-tillatelse nektet (offentlig nøkkel) ved å sjekke verten, aktiv SSH-nøkkel, GitHub-konto, SSO-autorisasjon, ekstern URL og port 22-tilgang.

How to Fix “Git Push Rejected: Non-Fast-Forward” Without Losing Changes

How to Fix “Git Push Rejected: Non-Fast-Forward” Without Losing Changes

Fix a Git non-fast-forward push safely. Protect local work, fetch remote commits, choose merge or rebase, resolve conflicts, and push without losing changes.

Slik fikser du "Nginx 502 Bad Gateway" når du bruker proxy til Node.js

Slik fikser du "Nginx 502 Bad Gateway" når du bruker proxy til Node.js

Rett Nginx 502 Bad Gateway-feil med en Node.js-oppstrøm ved å sjekke appporten, NGINX-logger, proxy_pass-adresse, containernettverk, tidsavbrudd og omlasting.

Slik fikser du «Typen 'null' kan ikke tilordnes til type» i TypeScript

Slik fikser du «Typen 'null' kan ikke tilordnes til type» i TypeScript

Rett TypeScripts feilmelding «Typen 'null' kan ikke tilordnes til type» med unionstyper, innsnevring, standardverdier og sikre påstander under strictNullChecks.

Slik fikser du feilen «Prisma Client has not been generated yet»

Slik fikser du feilen «Prisma Client has not been generated yet»

Fiks feilen med at Prisma Client ikke er generert ved å sjekke generatoren, skjemaet, utdatastien, importene, versjonene, monorepo-oppsettet og byggetrinnene ved distribusjon.

Slik fikser du «ERR_MODULE_NOT_FOUND» i Node.js ESM-importer

Slik fikser du «ERR_MODULE_NOT_FOUND» i Node.js ESM-importer

Fiks Node.js ERR_MODULE_NOT_FOUND i ESM ved å sjekke importstier, filtyper, pakkeinstallasjon, eksport, ESM-modus og rene installasjoner.

Slik løser du SSL-sertifikatproblemet: Unable to Get Local Issuer Certificate i Git

Slik løser du SSL-sertifikatproblemet: Unable to Get Local Issuer Certificate i Git

Løs Git-feilmeldingen 'unable to get local issuer certificate' ved å identifisere tillitsbakgrunnen, installere riktig CA-kjede og beholde SSL-verifisering aktivert.

Slik løser du MongoDB nettverksavbrudd i Mongoose-tilkoblingen

Slik løser du MongoDB nettverksavbrudd i Mongoose-tilkoblingen

Løs MongoDB nettverksavbrudd i Mongoose ved å identifisere avbruddstypen, teste Atlas- eller TCP-tilgjengelighet, korrigere URI-en, og justere tidsavbrudd kun når det er berettiget.