unocss是一个即时的原子CSS引擎,它可以让你用简短的类名来控制元素的样式,而不需要写复杂的CSS代码。
当然,原子样式也有很多选择,最著名的就是 Tailwind
。 但由于Tailwind 会生成大量样式定义,会导致全量的 CSS 文件往往体积会多至数 MB,从而有性能上有一些不足。
扩展:什么是原子化
原子化CSS是一种CSS架构方式,其支持小型、单一用途的类,其名称基于视觉功能。
更加通俗的来讲,原子化CSS是一种新的CSS编程思路,它倾向于创建小巧且单一用途的class,并且以视觉效果进行命名。
参考 官方文档Vite配置,webpack
往下翻即可
npm install -D unocss
// fig.js
import UnoCSS from 'unocss/vite'
import { defineConfig } from 'vite'export default defineConfig({plugins: [UnoCSS(),],
})
// fig.js
const UnoCSS = require('@unocss/webpack').ports = {plugins: [UnoCSS(),],optimization: {realContentHash: true,},
}
// fig.js
const UnoCSS = require('@unocss/webpack').ports = {plugins: [UnoCSS(),],css: {extract: {filename: '[name].[hash:9].css',},},
}
用于编写用户想要的 unocss
配置
// fig.js
import { defineConfig } from 'unocss'export default defineConfig({// ...UnoCSS options
})
// main.js
import 'virtual:uno.css';
------------------------------------------------------------- 分割线 -------------------------------------------------------------
vue-cli5官方配置案例
vue-cli4官方配置案例
以vue-cli5
配置为例,做讲解
npm install -D unocssnpm install -D @unocss/webpack
const UnoCSS = require('@unocss/webpack').ports = {configureWebpack: {plugins: [UnoCSS()],optimization: {// realContentHash: true}},chainWebpack: config => {// ... to dule.rule('vue').uses.delete('cache-loader')dule.rule('tsx').uses.delete('cache-loader')({cache: false})},css: {extract: true}
}
用于编写用户想要的 unocss
配置
// fig.js
import { defineConfig, presetAttributify, presetUno, transformerVariantGroup } from 'unocss'export default defineConfig({presets: [presetAttributify(),presetUno()],transformers: [transformerVariantGroup()],rules: [],shortcuts: [{'flex-center': 'flex items-center justify-center'}]
})
// main.js
import 'virtual:uno.css';
对应刚入手 unocss
的同学来说,规则怎么写是不知道的,但不用着急,官方(大佬 antfu
)给出了 交互式文档
输入你想要的css样式,就可以获得对应的class名称
注意: unocss
支持用预设单位(预设单位是rem
),也可以自定义单位
.px-1 {padding-left: 0.25rem;padding-right: 0.25rem;
}
.px-10rpx {padding-left: 10rpx;padding-right: 10rpx;
}.p-t-1 {padding-top: 0.25rem;
}
.p-b-1 {padding-bottom: 0.25rem;
}
.p-l-1 {padding-left: 0.25rem;
}
.p-r-1 {padding-right: 0.25rem;
}
.p-1 {padding: 10px;
}
.px-1 {padding-left: 0.25rem;padding-right: 0.25rem;
}
.py-1 {padding-top: 0.25rem;padding-bottom: 0.25rem;
}
.mx-1 {margin-left: 0.25rem;margin-right: 0.25rem;
}
.my-1 {margin-top: 0.25rem;margin-bottom: 0.25rem;
}
.flex {display: flex;
}
.flex-1 {flex: 1 1 0%;
}
.items-center {align-items: center;
}
.justify-center {justify-content: center;
}
.color-#999 {--un-text-opacity: 1;color: rgba(153, 153, 153, var(--un-text-opacity));
}
.text-12px {font-size: 12px;
}
.break-all {word-break: break-all;
}
注意: 在 unocss
中,自定义颜色想要给到 类名后面,并且 RGB 格式的颜色会被转成 RGBA 类型,如:
.color-#999 {--un-text-opacity: 1;color: rgba(153, 153, 153, var(--un-text-opacity));
}.bg-#fcc {--un-bg-opacity: 1;background-color: rgba(255, 204, 204, var(--un-bg-opacity));
}
静态规则
和 动态规则
export default defineConfig({rules: [['m-1', { margin: '0.3rem' }] // 一个配置为一个数组]
})// 伪代码: 如上配置之后,在css中检测到m-1就会编译成
.m-1 { margin: 0.3rem; }
export default defineConfig({rules: [/** match[1]代表获取到的值 */[/^m-(d+)$/, match => ({ margin: `${+match[1] * 10}px` })],[/^p-(d+)$/, match => ({ padding: `${+match[1] * 10}px` })],]
})// 伪代码: 这样就可以修改unocss预设的大小,例如m-1会编译成.m-1 { margin: 10px; }
在vscode中我们都会有用到快捷键一键生成代码,unocss也不例外,假如你有个盒子,里面的内容需要垂直居中,那么就可以定义为:
export default defineConfig({shortcuts: [{'flex-center': 'flex items-center justify-center',}, // 静态快捷方式,是一个对象,可配多个]
})
当然,也可以精选 动态配置快捷方式
export default defineConfig({shortcuts: [[/^base-border-(.*)$/, match => `border-1 border-style-dashed border-${match[1]}`], // 动态快捷方式,一个配置为一个数组]
})// 伪代码: 编译结果
.base-border-red {border-width: 1px;--un-border-opacity: 1;border-color: rgba(248, 113, 113, var(--un-border-opacity));border-style: dashed;
}
非常好用,推荐
安装插件
安装启用后,页面上就能看出哪些 class
使用 unocss
提供 (带有虚线),并且能显示类名对应的样式内容,如下:
配置vscode的自动提示
ctrl + shift + p
=> 输入 open Setting
=> 选择 首选项:打开用户设置
"editor.quickSuggestions": {"strings": true,"other": true,"comments": true,},
配置完成后,在输入类名时会对 unocss
中存在的 class 进行只能提示,如:
相关文档:
官方文档/英文 => 可用于学习项目配置、rules配置
交互式文档 => 可用于查询样式对应的类名
参考文章 => 感谢博主的分享
文章仅为本人学习过程的一个记录,仅供参考,如有问题,欢迎指出!
对博客文章的参考,若原文章博主介意,请联系删除!请原谅
本文发布于:2024-01-31 18:51:24,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170669828630620.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |