UnoCSS, Vite + Vue3 easy setup
Tags: vue, unocss, vite, tailwindcss
Published: 2023-06-05 21:42:16

## What is UnoCSS in brief?

UnoCSS is a modern, flexible, and high-performance CSS engine. It provides core CSS functionalities through presets, making application styling quick and easy without compromising performance or flexibility. It uses atomic CSS principles, allowing for the creation of small, reusable styles that can be combined for complex designs. UnoCSS enables the development of high-performance applications without the limitations of popular frameworks.

Let's easily use it with Vue3 + Vite

Firstly, I recommend checking out the official documentation at **https://unocss.dev/guide/**. However, since the documentation is primarily based on TypeScript code examples, I'm preparing this mini tutorial to reduce any confusion.

First, we create our Vue project;

```shell
npm init vue@latest
```

After selecting the project name and requirements step by step, we will include UnoCSS in the project. I am simply sharing my settings.

```shell
Vue.js - The Progressive JavaScript Framework

✔ Project name: … unocss-vue
✔ Add TypeScript? … No
✔ Add JSX Support? … No
✔ Add Vue Router for Single Page Application development? … No
✔ Add Pinia for state management? … No
✔ Add Vitest for Unit Testing? … No
✔ Add an End-to-End Testing Solution? › No
✔ Add ESLint for code quality? … Yes
✔ Add Prettier for code formatting? … No

Scaffolding project in ../unocss-vue...

Done. Now run:

  cd unocss-vue
  npm install
  npm run dev
```

Let's navigate to the directory where the project is installed and run the "npm install" command to install the project.

In the same directory, we are including UnoCSS in the game;

```
npm i -D unocss
```

UnoCSS has been added to the project dependencies, now let's include the package in the vite.config.js file.

```js
// vite.config.js

import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// import UNOCSS
import Unocss from 'unocss/vite'

export default defineConfig({
  plugins: [vue(),Unocss({})], // define as plugin.
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})
```

We can start using the uno.css file in our main.js file in the project by importing it;

```js
// main.js
import { createApp } from 'vue'
import App from './App.vue'
import 'uno.css'

createApp(App).mount('#app')
```

Let's start using UnoCSS by customizing it with "Presets," which are predefined packages. I recommend checking out the [documentation](https://unocss.dev/presets/) for all other packages here.

Let me briefly mention the packages we will install:

**Uno preset:** It works as a common version of popular frameworks such as Tailwind CSS, Windi CSS, Bootstrap, Tachyons, etc.

**Attributify preset:** You can use the attributify mode inside HTML elements, for example;

```html
<button 
  bg="blue-400 hover:blue-500 dark:blue-500 dark:hover:blue-600"
  text="sm white"
  font="mono light"
  p="y-2 x-4"
  border="2 rounded blue-200"
>
  Button
</button>
```

Let's install these two packages in the directory where our project is located,

```shell
npm i -D @unocss/preset-uno
npm i -D @unocss/preset-attributify
```

Then add the installed packages to the vite.config.js file and define their settings,

```js
// vite.config.js

import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// UNOCSS
import Unocss from 'unocss/vite'
import { presetAttributify, presetUno } from 'unocss' // Presets

export default defineConfig({
  plugins: [vue(),
  Unocss({
    presets: [presetAttributify(),presetUno()], // Presets
  })],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})
```

All installations are done. Now we can use UnoCSS in our Vue project, and I highly recommend using the [VS Code extension](https://marketplace.visualstudio.com/items?itemName=antfu.unocss). Currently, there is no plugin available for Jetbrains IDEs, but I hope it will be developed soon. You can vote here for support [WEB-59407](https://youtrack.jetbrains.com/issue/WEB-59407/UnoCSS-Support)

**Example App.vue template structure:**
```html
<template>
  <nav text-white bg-green-5 flex justify-between font-sans vw-100 py-6 px-4>
    <div>Logo</div>
    <div w-10rem flex justify-around>
      <span>Home</span>
      <span>Contact</span>
    </div>
  </nav>
  <main flex justify-center items-center vw-100 h-20rem bg-gray-2 >
    <div font-sans text-3xl font-500>Hero</div>
  </main>
</template>
```

App view;

![UnoCSS Vite Vue3 Setup](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r20tetwszvcip56r9z9l.png)

Well done.

If you're looking for a fast and easy-to-use CSS framework, UnoCSS is a powerful option.

Thank you for reading! I hope this short tutorial has been helpful. If you have any questions or comments, please feel free to share them down below.

---
#### If you like this post, please like and share <3

{% embed https://twitter.com/ThePracticalDev/status/1666333418378915840 %}