Сегодня мы установим и настроим vue 3 vite с unocss. UnoCSS — это атомарный движок CSS, а не фреймворк. Все разработано с учетом гибкости и производительности. В UnoCSS нет основных утилит, все функциональные возможности предоставляются через предустановки.
посмотреть
Как установить unocss в vue 3
Создайте проект Vue
Установите vue 3 с route и другими библиотеками.
npm init vue@latest
Выберите требования к проекту.
✔ Project name: … <your-project-name>
✔ Add TypeScript? … No / Yes
✔ Add JSX Support? … No / Yes
✔ Add Vue Router for Single Page Application development? … No / Yes
✔ Add Pinia for state management? … No / Yes
✔ Add Vitest for Unit testing? … No / Yes
✔ Add Cypress for both Unit and End-to-End testing? … No / Yes
✔ Add ESLint for code quality? … No / Yes
✔ Add Prettier for code formatting? … No / Yes
Scaffolding project in ./<your-project-name>...
Done.
> cd <your-project-name>
> npm install
> npm run dev
Установка Unocss & настройка конфигурационного файла Vite
установить unocss
npm i -D unocss
// vite.config.ts
import Unocss from 'unocss/vite'
export default {
plugins: [
Unocss({ /* options */ }),
],
}
vite.config.js
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Unocss from 'unocss/vite'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue(),
Unocss({}),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})
импортируйте uno.css в файл main.js
src/main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import 'uno.css'
const app = createApp(App)
app.use(router)
app.mount('#app')
HomeView.vue
<template>
<div class="grid h-screen place-items-center">
<div class="space-x-2">
<h3 class="text-center">Vue 3 with Unocss button</h3>
<button
class="px-4 py-2 text-white bg-blue-400 border border-blue-200 rounded hover:bg-blue-500"
>
Button
</button>
<button
class="px-4 py-2 text-white bg-red-400 border border-red-200 rounded hover:bg-red-500"
>
Button
</button>
<button
class="px-4 py-2 text-white bg-green-400 border border-green-200 rounded hover:bg-green-500"
>
Button
</button>
</div>
</div>
</template>
Установка пресетов Unocss в vue 3
unocss предоставляет множество пресетов, например.
@unocss/preset-uno — пресет по умолчанию (сейчас он эквивалентен @unocss/preset-wind).
@unocss/preset-mini — минимальные, но необходимые правила и варианты.
@unocss/preset-wind — компактный пресет Tailwind / Windi CSS.
@unocss/preset-attributify — Обеспечивает режим атрибутирования для других пресетов и правил.
@unocss/preset-icons — Использование любой иконки в качестве утилиты класса.
@unocss/preset-web-fonts — Удобное использование веб-шрифтов.
@unocss/preset-typography — Предустановка типографики.
@unocss/preset-tagify — Режим Tagify для UnoCSS.
@unocss/preset-rem-to-px — Переводит rem в px для утилиты.
Установите некоторые из них и используйте.
npm i -D @unocss/preset-uno
npm i -D @unocss/preset-attributify
Далее нужно добавить preset-uno и attributify в vite.config.js.
vite.config.js
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import Unocss from 'unocss/vite'
import vue from '@vitejs/plugin-vue'
import { presetAttributify, presetUno } from 'unocss'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue(),
Unocss({
presets: [presetAttributify(),presetUno()],
}),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})
HomeView.vue
<template>
<div class="grid h-screen place-items-center">
<div class="space-x-2">
<h3 text="center">create unocss button using preset-attributify </h3>
<button
bg="blue-400 hover:blue-500"
text="sm white"
font="mono light"
p="y-2 x-4"
border="2 rounded blue-200"
>
Button
</button>
<button
bg="red-400 hover:red-500"
text="sm white"
font="mono light"
p="y-2 x-4"
border="2 rounded red-200"
>
Button
</button>
<button
bg="green-400 hover:green-500"
text="sm white"
font="mono light"
p="y-2 x-4"
border="2 rounded green-200"
>
Button
</button>
</div>
</div>
</template>