Lala Code

Lala 的前端大補帖,歡迎一起鑽研前端技術😊

0%

Vuetify與TailwindCSS類別衝突,如何整合Vuetify utility

Vuetify

Vuetify 是一個基於 Vue.js 的開源 UI 框架,它提供了一系列的預製組件和樣式,讓開發者能夠快速地建立美觀、功能豐富的網頁應用程式。Vuetify 的設計目標是簡化前端開發流程,同時提供一致性的外觀和使用者體驗。



近一年來,Vuetify 的下載量也是表現得不錯

Vuetify



於是我使用了 Vuetify3,並且搭配 TailwindCSS 來做這次的專案

但卻遇到了一個問題...




Vuetify 與 TailwindCSS 的樣式互相衝突了!!!😱

Bobbe



在設定 mb-1 時,會出現兩個 mb-1

Vuetify


Vuetify 的類別會被加上 !important,導致 TailwindCSS 都會被蓋掉了



搜尋了一下解法,TailwindCSS 有支援前綴的方式,如發生命名衝突時,這會是一個好方法,直接在設定檔加上 prefix

tailwind.config.js

1
2
3
module.exports = {
prefix: 'tw-',
}


這麼一來,所有的樣式前面都會被加上 tw-

1
2
3
4
5
6
7
8
9
.tw-text-left {
text-align: left;
}
.tw-text-center {
text-align: center;
}
.tw-text-right {
text-align: right;
}


在加類名時就會變成

1
2
3
<div class="tw-text-lg md:tw-text-xl tw-bg-red-500 hover:tw-bg-blue-500">
<!-- -->
</div>


但這有個缺點,TailwindCSS 的類名本來就很長了,每個類名再加上 tw- 後,變得又臭又長,不是很美觀 😥

所以我決定還是從 Vuetify 下手!!



好在爬了幾篇文章後解決了我的問題

只要三個步驟

  • Vuetify 基本設定
  • 安裝 vite-plugin-vuetify,設定 settings.scss 路徑
  • 設定 vuetify utility



Vuetify 基本設定

首先先在進入點加入 Vuetify ,因為我專案需要有一些 icon,所以有加入一些 icon 的檔案,也有針對專案去做一些顏色、breakpoint 的客製設定,這些都可視專案情況加入

main.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { createApp } from "vue";
import "./assets/scss/main.scss";
import App from "./App.vue";

// Vuetify
import "vuetify/styles";
import { createVuetify } from "vuetify";
import * as components from "vuetify/components";
import * as directives from "vuetify/directives";
import { fa } from "vuetify/iconsets/fa";
import { aliases, mdi } from "vuetify/lib/iconsets/mdi";
import "@mdi/font/css/materialdesignicons.css";
import "@fortawesome/fontawesome-free/css/all.css";

const vuetify = createVuetify({
theme: {
themes: {
light: {
dark: false,
colors: {
primary: "#288a31",
},
},
},
},
icons: {
defaultSet: "mdi",
aliases,
sets: {
mdi,
fa,
},
},
display: {
mobileBreakpoint: "sm",
thresholds: {
xs: 0,
sm: 640,
md: 768,
lg: 1024,
xl: 1280,
},
},
components,
directives,
});

const app = createApp(App);
app.use(vuetify);
app.mount("#app");


安裝 vite-plugin-vuetify,設定 settings.scss 路徑

接著要先安裝 vite-plugin-vuetify,並設定 styles 設定檔的路徑

vite.config.js

1
2
3
4
5
6
7
8
9
10
11
12
13
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vuetify from "vite-plugin-vuetify";

// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
vuetify({
styles: { configFile: "src/assets/scss/settings.scss" },
}),
],
});


設定 vuetify utility

新增一個 settings.scss 檔案並設定 vuetify utility,我們可以針對不需要使用的 utility 來做關閉,在這邊我關閉了 vuetify 對 margin 和 padding 的相關類別

除此之外也可以調整變數的預設值 🥳

src/assets/scss/settings.scss

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
@use 'vuetify/settings' with (
$utilities: (
margin: false,
margin-x: false,
margin-y: false,
margin-top: false,
margin-bottom: false,
margin-left: false,
margin-right: false,
margin-start: false,
margin-end: false,
negative-margin: false,
negative-margin-x: false,
negative-margin-y: false,
negative-margin-top: false,
negative-margin-bottom: false,
negative-margin-left: false,
negative-margin-right: false,
negative-margin-start: false,
negative-margin-end: false,
padding: false,
padding-x: false,
padding-y: false,
padding-top: false,
padding-bottom: false,
padding-left: false,
padding-right: false,
padding-start: false,
padding-end: false,
negative-padding: false,
negative-padding-x: false,
negative-padding-y: false,
negative-padding-top: false,
negative-padding-bottom: false,
negative-padding-left: false,
negative-padding-right: false,
negative-padding-start: false,
negative-padding-end: false,
),
$messages-font-size: 14px,
$input-control-height: 32px,
$field-focused-border-width: 1px
);

完全解決了我的問題 🥳🥳🥳

這麼一來就不會有類別覆蓋的問題,也可以結合兩邊的好用之處

大功告成囉!!



Reference

VUETIFY

How to replace Vuetify utility classes with TailwindCSS

npm trends



🚀實體工作坊分享

玩轉 Web頁面的前端技術(HTML/CSS/JS) 一日體驗課

最近時賦學苑開了實體體驗課,即使你對程式碼沒有概念也能上手!Lala 會帶你一起做出一個個人品牌形象網站,帶你快速了解前端的開發流程,快跟我們一起玩轉 Web 吧!



🚀線上課程分享

線上課程可以加速學習的時間,省去了不少看文件的時間XD,以下是我推薦的一些課程
想學習更多關於前後端的線上課程,可以參考看看。

Hahow

Hahow 有各式各樣類型的課程,而且是無限次數觀看,對學生或上班族而言,不用擔心被時間綁住



六角學院

如果你是初學者,非常推薦六角學院哦!
剛開始轉職也是上了六角的課,非常的淺顯易懂,最重要的是,隨時還有線上的助教幫你解決問題!


Udemy

Udemy 裡的課程非常的多,品質普遍不錯,且價格都滿實惠的,CP值很高!
也是很多工程師推薦的線上課程網站。
❤️