Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Configure and use UnoCSS atomic CSS engine with presets like Wind (Tailwind-compatible), Icons, and Attributify.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/integrations-vite.md
1---2name: unocss-vite-integration3description: Setting up UnoCSS with Vite and framework-specific tips4---56# UnoCSS Vite Integration78The Vite plugin is the most common way to use UnoCSS.910## Installation1112```bash13pnpm add -D unocss14```1516```ts17// vite.config.ts18import UnoCSS from 'unocss/vite'19import { defineConfig } from 'vite'2021export default defineConfig({22plugins: [23UnoCSS(),24],25})26```2728Create config file:2930```ts31// uno.config.ts32import { defineConfig, presetWind3 } from 'unocss'3334export default defineConfig({35presets: [36presetWind3(),37],38})39```4041Add to entry:4243```ts44// main.ts45import 'virtual:uno.css'46```4748## Modes4950### global (default)5152Standard mode - generates global CSS injected via `uno.css` import.5354```ts55import 'virtual:uno.css'56```5758### vue-scoped5960Injects generated CSS into Vue SFC `<style scoped>`.6162```ts63UnoCSS({64mode: 'vue-scoped',65})66```6768### shadow-dom6970For Web Components using Shadow DOM:7172```ts73UnoCSS({74mode: 'shadow-dom',75})76```7778Add placeholder in component styles:7980```ts81const template = document.createElement('template')82template.innerHTML = `83<style>84:host { ... }85@unocss-placeholder86</style>87<div class="m-1em">...</div>88`89```9091### per-module (experimental)9293Generates CSS per module with optional scoping.9495### dist-chunk (experimental)9697Generates CSS per chunk on build for MPA.9899## DevTools Support100101Edit classes directly in browser DevTools:102103```ts104import 'virtual:uno.css'105import 'virtual:unocss-devtools'106```107108**Warning:** Uses MutationObserver to detect changes. Dynamic classes from scripts will also be included.109110## Framework-Specific Setup111112### React113114```ts115// vite.config.ts116import React from '@vitejs/plugin-react'117import UnoCSS from 'unocss/vite'118119export default {120plugins: [121UnoCSS(), // Must be before React when using attributify122React(),123],124}125```126127**Note:** Remove `tsc` from build script if using `@unocss/preset-attributify`.128129### Vue130131Works out of the box with `@vitejs/plugin-vue`.132133### Svelte134135```ts136import { svelte } from '@sveltejs/vite-plugin-svelte'137import extractorSvelte from '@unocss/extractor-svelte'138import UnoCSS from 'unocss/vite'139140export default {141plugins: [142UnoCSS({143extractors: [extractorSvelte()],144}),145svelte(),146],147}148```149150Supports `class:foo` and `class:foo={bar}` syntax.151152### SvelteKit153154Same as Svelte, use `sveltekit()` from `@sveltejs/kit/vite`.155156### Solid157158```ts159import UnoCSS from 'unocss/vite'160import solidPlugin from 'vite-plugin-solid'161162export default {163plugins: [164UnoCSS(),165solidPlugin(),166],167}168```169170### Preact171172```ts173import Preact from '@preact/preset-vite'174import UnoCSS from 'unocss/vite'175176export default {177plugins: [178UnoCSS(),179Preact(),180],181}182```183184### Elm185186```ts187import Elm from 'vite-plugin-elm'188import UnoCSS from 'unocss/vite'189190export default {191plugins: [192Elm(),193UnoCSS(),194],195}196```197198### Web Components (Lit)199200```ts201UnoCSS({202mode: 'shadow-dom',203shortcuts: [204{ 'cool-blue': 'bg-blue-500 text-white' },205],206})207```208209```ts210// my-element.ts211@customElement('my-element')212export class MyElement extends LitElement {213static styles = css`214:host { ... }215@unocss-placeholder216`217}218```219220Supports `part-[<part-name>]:<utility>` for `::part` styling.221222## Inspector223224Visit `http://localhost:5173/__unocss` in dev mode to:225226- Inspect generated CSS rules227- See applied classes per file228- Test utilities in REPL229230## Legacy Browser Support231232With `@vitejs/plugin-legacy`:233234```ts235import legacy from '@vitejs/plugin-legacy'236import UnoCSS from 'unocss/vite'237238export default {239plugins: [240UnoCSS({241legacy: {242renderModernChunks: false,243},244}),245legacy({246targets: ['defaults', 'not IE 11'],247renderModernChunks: false,248}),249],250}251```252253## VanillaJS / TypeScript254255By default, `.js` and `.ts` files are not extracted. Configure to include:256257```ts258// uno.config.ts259export default defineConfig({260content: {261pipeline: {262include: [263/\.(vue|svelte|[jt]sx|html)($|\?)/,264'src/**/*.{js,ts}',265],266},267},268})269```270271Or use magic comment in files:272273```ts274// @unocss-include275export const classes = {276active: 'bg-primary text-white',277}278```279280<!--281Source references:282- https://unocss.dev/integrations/vite283-->284