什么是css原子化
CSS原子化的优缺点
- 减少了css体积,提高了css复用
- 减少了起名的复杂度
- 增加了记忆成本,将css拆分为原子后,开发者必须记住一些class才能书写,即使类似tailwindcss提供了完善的工具链,开发者写background,也要记住开头是bg
项目接入unocss
tips:最好用于vite项目中,webpack搭建的项目中unocss属于阉割版功能很少
安装
vite.config.ts
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
|
import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx'; import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import unocss from 'unocss/vite'
export default defineConfig({ plugins: [ vue(), vueJsx(), AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), unocss({ rules: [] })] })
|
main.ts引入
配置静态css
1 2 3
| rules: [ ['test', { color: 'pink' }] ]
|
全局任意组件内使用class类名test都可生效
使用正则表达式配置动态css
1 2 3
| rules: [ [/^m-(\d+)$/, ([, d]) => ({ margin: `${Number(d) * 10}px` })] ]
|
shortcuts可以自定义组合样式
1 2 3 4 5 6 7 8 9 10
| plugins: [vue(), vueJsx(), unocss({ rules: [ [/^m-(\d+)$/, ([, d]) => ({ margin: `${Number(d) * 10}px` })], ['flex', { display: "flex" }], ['test', { color: 'pink' }] ], shortcuts: { btn: "test flex" } })],
|
unocss预设
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
| import { presetIcons, presetAttributify, presetUno } from 'unocss'
export default defineConfig({ plugins: [ vue(), vueJsx(), AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), unocss({ presets: [presetIcons(), presetAttributify(), presetUno()], rules: [ ['test', { color: 'pink' }], ['font', { color: 'yellowgreen' }] ] })], resolve: { alias: { '@': '/src' } } })
|
presetIcons Icon图标预设
图标集合安装,首先去icones官网选择一套需要的icon
看清url后缀,安装对应的图标库
1
| pnpm i -D @iconify-json/material-symbols
|
标签中直接使用类名即可
presetAttributify 属性化模式支持
属性语义化,无需class样式即可生效
presetUno 工具类预设
默认的 @unocss/preset-uno 预设(实验阶段)是一系列流行的原子化框架的 通用超集,包括了 Tailwind CSS,Windi CSS,Bootstrap,Tachyons 等。
例如,ml-3(Tailwind),ms-2(Bootstrap),ma4(Tachyons),mt-10px(Windi CSS)均会生效。