unocss 基础用法

news2024/11/17 11:26:36

一、什么是unocss

unocss是一个即时的原子CSS引擎,它可以让你用简短的类名来控制元素的样式,而不需要写复杂的CSS代码。
当然,原子样式也有很多选择,最著名的就是 Tailwind。 但由于Tailwind 会生成大量样式定义,会导致全量的 CSS 文件往往体积会多至数 MB,从而有性能上有一些不足。

扩展:什么是原子化

原子化​​CSS​​​是一种​​CSS​​架构方式,其支持小型、单一用途的类,其名称基于视觉功能。

更加通俗的来讲,原子化​​CSS​​​是一种新的​​CSS​​​编程思路,它倾向于创建小巧且单一用途的​​class​​,并且以视觉效果进行命名。

二、unocss的优点

  • 它可以让你快速地开发和原型设计,而不需要考虑CSS的细节。
  • 它可以让你的CSS文件更小,因为它只生成你用到的工具类。
  • 它可以让你的CSS更一致,因为它遵循一套预设的规则和变量。
  • 它可以让你的CSS更灵活,因为它支持自定义工具类,变体,指令和图标。
  • 它可以让你的CSS更易于维护,因为它避免了样式冲突和重复代码。

三、项目中使用 unocss

参考 官方文档Vite配置,webpack 往下翻即可

3.1 安装

npm install -D unocss

3.2 打包配置

  • 3.2.1 vite配置
// vite.config.js
import UnoCSS from 'unocss/vite'
import { defineConfig } from 'vite'

export default defineConfig({
  plugins: [
    UnoCSS(),
  ],
})
  • webpack5中配置
// webpack.config.js
const UnoCSS = require('@unocss/webpack').default

module.exports = {
  plugins: [
    UnoCSS(),
  ],
  optimization: {
    realContentHash: true,
  },
}
  • webopack4中配置
// webpack.config.js
const UnoCSS = require('@unocss/webpack').default

module.exports = {
  plugins: [
    UnoCSS(),
  ],
  css: {
    extract: {
      filename: '[name].[hash:9].css',
    },
  },
}

3.3 创建一个`uno.config.ts 配置文件

用于编写用户想要的 unocss 配置

// uno.config.js
import { defineConfig } from 'unocss'

export default defineConfig({
  // ...UnoCSS options
})

3.4 全局引入

// main.js
import 'virtual:uno.css';

四、常见用法

4.1 交互式文档

对应刚入手 unocss 的同学来说,规则怎么写是不知道的,但不用着急,官方(大佬 antfu)给出了 交互式文档
输入你想要的css样式,就可以获得对应的class名称

在这里插入图片描述

4.2 常见基础用法

注意: unocss支持用预设单位(预设单位是rem),也可以自定义单位

  • padding 相关用法
.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;
}
  • margin相关用法
    margin 相关可以参照 padding
.mx-1 {
  margin-left: 0.25rem;
  margin-right: 0.25rem;
}
.my-1 {
  margin-top: 0.25rem;
  margin-bottom: 0.25rem;
}
  • flex 相关
.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));
}

五、自定义规则

5.1 自定义规则分为两类: 静态规则动态规则

  • 静态规则:类似于自定义的一个固定样式集
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; }

5.2 配置快捷方式(样式集合)

在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;
}

六、安装vscode插件

非常好用,推荐

  • 安装插件 在这里插入图片描述
    安装启用后,也面上就能看出哪些 class 使用 unocss 提供 (带有虚线),如下:
    在这里插入图片描述
  • 配置vscode的自动提示
  1. ctrl + shift + p => 输入 open Setting => 选择 首选项:打开用户设置 在这里插入图片描述
  2. 添加以下配置
"editor.quickSuggestions": {
    "strings": true,
    "other": true,
    "comments": true,
  },

配置完成后,在输入类名时会对 unocss 中存在的 class 进行只能提示,如:
在这里插入图片描述
 
 
相关文档:

官方文档/英文 => 可用于学习项目配置、rules配置
交互式文档 => 可用于查询样式对应的类名
参考文章 => 感谢博主的分享

 
 

文章仅为本人学习过程的一个记录,仅供参考,如有问题,欢迎指出!

对博客文章的参考,若原文章博主介意,请联系删除!请原谅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/636910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言函数的函数名和参数

VC6新建单文档工程; 视类添加2个函数; int getmax(int a,int b) {return a>b?a:b; }int two(int a) {return a * 2; } 调用,输出, void CMingView::OnDraw(CDC* pDC) {CMingDoc* pDoc GetDocument();ASSERT_VALID(pDoc);…

Segment-Anything的一些相关论文总结

1、 Segment Anything Model (SAM) Enhanced Pseudo Labels for Weakly Supervised Semantic Segmentation Tianle Chen, Zheda Mai, Ruiwen Li, Wei-lun Chao https://arxiv.org/abs/2305.05803 图像级监督的弱监督语义分割(WSSS)由于其标注成本较像素级标注低而受到越来越…

基于react18.x和router v6创建一个简单的静态页面

基于react18.x和router v6创建一个简单的静态页面 效果示例图README.md学习网站创建项目安装react-router-dom v6依赖安装scss 项目目录路由router/index.jsApp.jsindex.js路由地址错误,打开404页面页面docs/index.jsx页面tutorial/index.jsx 效果示例图 README.md …

fio下发的请求大小不确定

fio下发的请求大小不确定 问题描述调用栈回顾nvme_set_queue_limits函数研究内核调用栈 问题描述 fio --filename/dev/xxx_dev --direct1 --rwwrite --bs1M --ioenginelibaio --iodepth1 --runtime60 --numjobs1 --time_based --group_reporting --name"test xxx" -…

第一课 django后端框架初始和安装

这里写目录标题 django是什么django 发展历史:django主要组件django的应用场景django的官网如下django的安装 django是什么 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 django 发展历史: Django 是从真实世界的应用中成长起来的,它是由堪萨斯…

你知道微信的转账是可以退回的吗

微信作为当今最受欢迎的即时通讯软件之一,其转账功能得到了广泛的应用。在使用微信转账时,我们可能会遇到一些问题,例如误操作、支付失败或者需要退款等等。 首先需要注意的是,微信转账退回的操作只能在“一天内未确认”时进行。如…

亚马逊美国站 幼儿床CPC认证 亚马逊审核标准ASTM F1821检测报告

婴儿床的作用 1、孩子单独睡觉可以锻炼他的独立能力; 2、与父母分开睡对孩子的呼吸好,空气流通的好,比较清新; 3、晚上睡觉时大人会压到宝宝,或者大人盖被子时可能不小心蒙住孩子的头,这都是非常危险的&…

数据存储:MySQL之MVCC

MVCC(Mutil-Version Concurrency Control),中文翻译为多版本并发控制。 MVCC只在repeatable read和read committed两个隔离级别下工作。其他两个隔离级别和MVCC不兼容。因为READ UNCOMMITTED 总是读取最新版本的数据,而不是符合当前事务版本的数据快照。…

势不可挡!实景三维新技术“踏足”新疆热土!

6月6日,众所瞩目的“全自主、全流程、全覆盖”2023实景三维新技术报告会乌鲁木齐站重磅召开。来自传统测绘、应急管理、水利、建筑工程等行业200多位专家、同仁、行业精英齐聚祖国西北边陲热土,共同交流实景三维新技术发展新趋势。 新疆维吾尔自治区测绘…

【Android开发基础】SQLite开发复刻通讯录、记事本、计算机

文章目录 一、引言二、设计1、通讯录(1)效果(2)思路(3)实现 2、记事本(1)效果(2)思路(3)实现 三、附件1、计算器UI界面设计2、源代码 …

这是国内“颜值最高”的大学生知识交流社区

【WRITE-BUG数字空间】要“颜值”有“颜值”,要“内涵”有“内涵”😎 界面UI紧随潮流、符合大学生的审美,功能更是完备: 👉 提供聊天大厅,即时群聊、畅所欲言 👉 提供协同编辑的云文档&#xff…

代码随想录| day11|栈与队列part02 ● 20. 有效的括号● 1047. 删除字符串中的所有相邻重复项● 150. 逆波兰表达式求值

20. 有效的括号 链接&#xff1a;代码随想录 阅读答案并二刷。 class Solution { public:bool isValid(string s) {int ns.size();int i0;//建立括号栈stack<char>sta;while(i<n){char temps[i];if(temp(||s[i]{||s[i][){sta.push(temp);}else{if(sta.empty()){return…

Halcon 光盘一维码识别 曲面一维码识别 识别光盘上的条形码(极坐标变换,将曲面的一维码转成矩形的一维条码)

文章目录 1 问题描述2 关键代码演示2.1 分割CD上包含条形码的环2.2 极坐标变换 将环状条码转成矩形条码3 完整代码1 问题描述 如图 识别光盘上的条形码 图片路径 C:\Users\hp\AppData\Roaming\MVTec\HALCON-22.11-Steady\examples\images2 关键代码演示 2.1 分割CD上包含条形…

项目管理专业人员能力等级评价CSPM(国标评级)你想知道的这都有

2021年10月&#xff0c;中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系&#xff0c;开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会&#xff08;CAS&#xff09;组织开展的项…

Vue中如何进行文件预览与打印?

Vue中如何进行文件预览与打印&#xff1f; 在Vue应用中&#xff0c;有时我们需要实现文件预览和打印的功能。比如&#xff0c;我们可能需要预览并打印PDF文件、图片文件等。本文将介绍如何在Vue中实现文件预览和打印的功能&#xff0c;并提供相应的代码示例。 文件预览 PDF文…

“混战”大模型,知乎、小红书、快手各有所长

配图来自Canva可画 一直以来&#xff0c;追逐风口都是互联网企业的天性。因此&#xff0c;继元宇宙风口之后&#xff0c;横空出世并火遍全国的AIGC和ChatGPT&#xff0c;便又成为了各行业企业追逐的焦点。在此背景下&#xff0c;无论是国内互联网大厂&#xff0c;还是科技公司…

力扣笔记(每日随机一题)—— 打强整数

问题&#xff08;中等&#xff09; 给定三个整数x 、 y 和 bound &#xff0c;返回 值小于或等于 bound 的所有 强整数 组成的列表 。 如果某一整数可以表示为 x i y j x^i y^j xiyj &#xff0c;其中整数 i > 0 且 j > 0 i > 0 且 j > 0 i>0且j>0&a…

jmeter009:用户自定义变量

添加路径&#xff1a;线程组>配置元件>用户自定义变量 (用户自定义变量)元件的使用&#xff1a;

vue 打开重复页签

先上图 这两个红色框线实际都是产品详情页面&#xff0c;用产品名称替代了页面的title 1、首先在router/index.js配置路由 {path: /productDetail,component: Layout,hidden: true,children: [{path: productDetail/:productId(\\d), //必须该种方法传递参数component: () &…

超高频工业rfid读头对比高频读头有哪些优势?

超高频的工作频段主要在860MHz~960MHz之间&#xff0c;对比高频RFID来说&#xff0c;超高频技术的传输速度更快&#xff0c;读取距离也更远&#xff0c;批量群读的性能也更好&#xff0c;因此在工业、物流与供应链等领域都有非常广泛的应用。 超高频工业rfid读头对比高频读头有…