赞
踩
# vue-3-vite 中安装
npm install -D tailwindcss@latest postcss@latest autoprefixer@latest
# 初始化,新增 tailwind.config.js and postcss.config.js
npx tailwindcss init -p
// postcss.config.js module.exports = { plugins: { tailwindcss: {}, autoprefixer: {}, }, } // tailwind.config.js module.exports = { purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], darkMode: false, // or 'media' or 'class' theme: { extend: {}, }, variants: { extend: {}, }, plugins: [], }
/* ./src/index.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
// src/main.ts
import { createApp } from 'vue'
import App from './App.vue'
import './index.css'
createApp(App).mount('#app')
# 安装
pnpm install element-plus
// main.ts,完整使用
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
const app = createApp(App)
app.use(ElementPlus)
app.mount('#app')
npm install -D unplugin-vue-components unplugin-auto-import
// vite.config.ts import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; // import * as path from 'path'; import AutoImport from 'unplugin-auto-import/vite'; import Components from 'unplugin-vue-components/vite'; import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'; // https://vitejs.dev/config/ export default defineConfig({ plugins: [ vue(), AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), ], });
参考地址:最好的使用,可以开箱即用 https://github.com/whidy/elementplus-tailwindcss-best-practice/tree/extend-colors
element.ts
/** * 兼容tailwindcss主题和ElementPlus色彩的扩展方案 By Whidy 2022-01-14 11:29:05 * element plus 主题:https://element-plus.gitee.io/zh-CN/guide/theming.html * Colors:https://element-plus.gitee.io/zh-CN/component/color.html * Element Chalk Variables * node_modules/element-plus/theme-chalk/src/common/var.scss * 部分色彩见底部注释 */ const palettes = { base: ["primary", "success", "warning", "danger", "error", "info"], hasLight9: ["primary"], hasLight2: ["success", "warning", "danger", "error", "info"] // danger === error }; const hasLight9 = function (group) { const colors = {}; group.forEach(name => { colors[`el-${name}-light`] = {}; for (let index = 9; index > 0; index--) { colors[`el-${name}-light`][index * 100] = `var(--el-color-${name}-light-${index})`; } }); return colors; }; const hasLight2 = function (group) { const colors = {}; group.forEach(name => { colors[`el-${name}-light`] = `var(--el-color-${name}-light)`; colors[`el-${name}-lighter`] = `var(--el-color-${name}-lighter)`; }); return colors; }; const baseColor = function (group) { const colors = {}; group.forEach(name => { colors[`el-${name}`] = `var(--el-color-${name})`; }); return colors; }; const getColors = function (palettes) { const colors = {}; for (const key in palettes) { const group = palettes[key]; if (key === "base") { Object.assign(colors, baseColor(group)); } else if (key === "hasLight9") { Object.assign(colors, hasLight9(group)); } else if (key === "hasLight2") { Object.assign(colors, hasLight2(group)); } } // console.log(colors); return colors; }; module.exports = { theme: { extend: { colors: getColors(palettes) } } }; // 部分参考 // --el-color-white: #ffffff; // --el-color-black: #000000; // --el-color-primary: #409eff; // --el-color-primary-light-1: #53a8ff; // --el-color-primary-light-2: #66b1ff; // --el-color-primary-light-3: #79bbff; // --el-color-primary-light-4: #8cc5ff; // --el-color-primary-light-5: #a0cfff; // --el-color-primary-light-6: #b3d8ff; // --el-color-primary-light-7: #c6e2ff; // --el-color-primary-light-8: #d9ecff; // --el-color-primary-light-9: #ecf5ff; // --el-color-success: #67c23a; // --el-color-success-light: #e1f3d8; // --el-color-success-lighter: #f0f9eb; // --el-color-warning: #e6a23c; // --el-color-warning-light: #faecd8; // --el-color-warning-lighter: #fdf6ec; // --el-color-danger: #f56c6c; // --el-color-danger-light: #fde2e2; // --el-color-danger-lighter: #fef0f0; // --el-color-error: #f56c6c; // --el-color-error-light: #fde2e2; // --el-color-error-lighter: #fef0f0; // --el-color-info: #909399; // --el-color-info-light: #e9e9eb; // --el-color-info-lighter: #f4f4f5; // --el-text-color-primary: #303133; // --el-text-color-regular: #606266; // --el-text-color-secondary: #909399; // --el-text-color-placeholder: #c0c4cc; // --el-border-color-base: #dcdfe6; // --el-border-color-light: #e4e7ed; // --el-border-color-lighter: #ebeef5; // --el-border-color-extra-light: #f2f6fc; // --el-background-color-base: #f5f7fa; // --el-border-width-base: 1px; // --el-border-style-base: solid; // --el-border-color-hover: var(--el-text-color-placeholder); // --el-border-base: var(--el-border-width-base) var(--el-border-style-base) var(--el-border-color-base); // --el-border-radius-base: 4px; // --el-border-radius-small: 2px; // --el-border-radius-round: 20px; // --el-border-radius-circle: 100%; // --el-box-shadow-base: 0 2px 4px rgba(0, 0, 0, 0.12),0 0 6px rgba(0, 0, 0, 0.04); // --el-box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1); // --el-svg-monochrome-grey: #dcdde0; // --el-fill-base: var(--el-color-white); // --el-font-size-extra-large: 20px; // --el-font-size-large: 18px;
import { resolve } from "path"; import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' // https://vitejs.dev/config/ export default defineConfig({ plugins: [ vue(), AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), ], resolve: { alias: { "@": resolve(__dirname, "src"), }, }, build: { rollupOptions: { output: { manualChunks(id) { // 初始化tailwindcss文件,放入至main.ts中路径一致 if (id.includes("src/index.css")) { return "tailwindcss"; } if (id.includes("element-plus/theme-chalk/")) { // 当然也可以优化下这个判断,不过目前这样写足矣了。 return "element-plus"; } }, }, }, }, server: { port: 3201 } })
module.exports = {
presets: [
require("./src/assets/styles/element.ts") // 根据您放置的element.ts配置路径
],
content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"],
plugins: [],
}
pnpm add @iconify/iconify
pnpm add vite-plugin-purge-icons @iconify/json -D
// vite.config.ts import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; import PurgeIcons from 'vite-plugin-purge-icons'; // import * as path from 'path'; import AutoImport from 'unplugin-auto-import/vite'; import Components from 'unplugin-vue-components/vite'; import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'; // https://vitejs.dev/config/ export default defineConfig({ plugins: [ vue(), AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), PurgeIcons({ content: ['**/*.html', '**/*.ts', '**/*.js', '**/*.vue'], }), ], });
// main.ts
import { createPinia } from 'pinia';
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import piniaPluginPersist from 'pinia-plugin-persist';
import './assets/styles/input.css';
import '@purge-icons/generated'; // 添加进来
const pinia = createPinia();
pinia.use(piniaPluginPersist);
const app = createApp(App);
app.use(router);
app.use(pinia);
app.mount('#app');
// 定义图标组件,设置传入大小和图标名称 <script setup lang="ts"> const props = defineProps({ icon: { type: String, default: () => 'logos:airflow' }, size: { type: String, default: () => "100" }, }) </script> <template> <span class="iconify" :data-icon="props.icon" :data-width="props.size" :data-height="props.size" ></span> </template> <style> </style>
// 使用
<app-icon icon="logos:alfresco" size="500"></app-icon>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。