UnoCSS 原子化开发初体验

UnoCSS 是一个即时的原子化 CSS 引擎,旨在灵活和可扩展。核心是不拘一格的,所有的 CSS 工具类都是通过预设提供的。再也不用为了取一个 classname 类名而烦恼了。

UnoCSS 原子化

一、UnoCSS 特点

  1. 完全可定制:无核心工具,所有功能都通过预设提供
  2. 即时的:无解析、无抽象语法树、无扫描。它比 Windi CSS 或 Tailwind JIT 快5倍
  3. 轻量级的:零依赖且适用于浏览器:~6kb min+brotli
  4. 丰富的集成能力:对Vite、Webpack、PostCSS、CLI、VS Code、ESLint等工具的一流支持
  5. 快捷方式:通过别名或动态分组实现工具类
  6. 属性化模式:在属性中对工具类进行分组
  7. 纯 CSS 图标:将任何图标作为单个类使用
  8. 变体组:使用常见前缀的组合工具类的速记方式
  9. CSS 指令:使用 @apply 指令在 CSS 中重用工具类
  10. 编译模式:在构建时将多个类合成为一个类
  11. 检查器:交互式检查和调试
  12. CDN 运行时构建:只需一行 CDN 引入即可使用 UnoCSS

二、安装

这里以 Vue3 + Vite 为例

  1. 安装 unocss
pnpm add -D unocss
  1. vite.config.js 中配置
// vite.config.ts
import UnoCSS from 'unocss/vite'
import { defineConfig } from 'vite'

export default defineConfig({
  plugins: [UnoCSS()]
})
  1. 创建一个 uno.config.jts 配置文件:
// uno.config.js
import { defineConfig } from 'unocss'

export default defineConfig({
  // ...UnoCSS选项
})
  1. main.js 中引入
// main.js

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from '@/App.vue'
import router from '@/router'
import 'unocss/themes/solid.css'

// ..

createApp(App)
  .use(createPinia())
  .use(router)
  .mount('#app')

三、使用

1、width、height

常用值:

  • w-0width: 0
  • w-1width: 0.25rem
  • h-100px: height: 100px
  • h--10px: height: -10px
  • h-full: height: 100%
  • min-w-screen: min-width: 100vw
<div class="min-h-100px w-50vw"></div>
<!--等价于-->
<div style="min-height: 100px; width: 50vw;"></div>

2、background

<div class="bg-#f00"></div>
<!--等价于-->
<div style="background-color: #f00"></div>

3、font、text-align

<div class="text-center font-700 text-#f00 text-20px"></div>
<!--等价于-->
<div style="text-align: center; font-weight: 700; color: #f00; font-size: 20px;"></div>

4、border、border-radius

常用值:

  • rounded-noneborder-radius: 0;
  • rounded-lborder-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem;
  • rounded-full: border-radius: 9999px;
  • border-0: border-width: 0;
  • b-0: border-width: 0;
  • b-1: border-width: 1px;
  • b-b-1: border-bottom-width: 1px;
  • b-solid: border-style: solid;
  • b-#f00: border-color: #f00;
  • b-rd: border-radius: 0.25rem;
  • b-rounded: border-radius: 0.25rem;
  • b-rd-6px: border-radius: 6px;
  • b-rd-full: border-radius: 9999px;
  • b-rd-50%: border-radius: 50%;
<div class="b-1 b-solid b-#f00 b-rd-6px"></div>
<!--等价于-->
<div style="border: 1px solid #f00; border-radius: 6px;"></div>

5、margin、padding

常用值:

  • m-0margin: 0;
  • mx-0: margin-left: 0; margin-right: 0;
  • py-10px: padding-top: 10px; padding-bottom: 10px;
  • p-10px: padding: 10px;
  • p--20px: padding: -20px;
<div class="m-10px p-10px"></div>
<!--等价于-->
<div style="margin: 10px; padding: 10px;"></div>

6、flex

常用值:

  • flex: display: flex;
  • flex-wrap: flex-wrap: wrap;
  • flex-row: flex-direction: row;
  • flex-col: flex-direction: column;
  • flex-justify-between: justify-content: space-between;
  • flex-justify-center: justify-content: center;
  • flex-items-center: align-items: center;
<div class="flex flex-row justify-between items-center"></div>
<!--等价于-->
<div style="display: flex; flex-direction: row; justify-content: space-between; align-items: center;"></div>

7、overflow

常用值:

  • overflow-hidden: overflow: hidden;
  • overflow-auto: overflow: auto;
  • overflow-scroll: overflow: scroll;
  • overflow-x-auto: overflow-x: auto;
<div class="min-h-100px max-h-60vh w-100% overflow-y-scroll"></div>
<!--等价于-->
<div style="min-height: 100px; max-height: 60vh; width: 100%; overflow-y: scroll;"></div>

8、position

常用值:

  • absolute: position: absolute;
  • position-absolute: position: absolute;
  • position-fixed: position: fixed;
  • position-relative: position: relative;
  • left-0: left: 0;
  • top-5px: top: 5px;
  • z-0: z-index: 0;
  • z-100: z-index: 100;
<div class="absolute left-0 top-5px z-100"></div>
<!--等价于-->
<div style="position: absolute; left: 0; top: 5px; z-index: 100;"></div>

9、hover、focus、active、first、last

常用值:

  • hover-block: display: block;
  • hover-text-pink: color: pink;
<div class="last-hover-text-pink"></div>
<!--等价于-->
<style>
  .last-hover-text-pink:hover:last-child {
    --un-text-opacity: 1;
    color: rgba(244, 114, 182, var(--un-text-opacity));
  }
</style>

10、display

常用值:

  • block: display: block;
  • inline-block: display: inline-block;
  • flex: display: flex;
  • hidden: display: none;
<div class="flex"></div>
<!--等价于-->
<div style="display: flex;"></div>

11、important

<div class="!-text-20px"></div>
<!--等价于-->
<div style="font-size: 20px !important;"></div>

四、总结

UnoCSSTailwindCSS 类似,但是它更加轻量级,使用体验更好,而且它的中文文档也很完善,可以说是 TailwindCSS 的一个很好的替代品。
尤其是 UnoCSS 的自定义 classname 类名功能,不用 [] 包裹,更加直观,例如:

<!-- 使用 TailwindCSS -->
<div class="w-[100px] h-[20vh]"></div>

<!-- 使用 UnoCSS -->
<div class="w-100px h-20vh"></div>

参考文档

  • 英文:https://unocss.dev/
  • 中文:https://alfred-skyblue.github.io/unocss-docs-cn/
  • 样式查询:https://unocss.dev/interactive/

欢迎访问:天问博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Fastadmin】根据Fieldlist键值组件做一个等级配置的完整示例

目录 1.效果展示&#xff1a; ​编辑 2.建表&#xff1a; 3.html页面 4.controller控制器 5.js 6.model 1.效果展示&#xff1a; 2.建表&#xff1a; 表名&#xff1a;fa_xxfb_config /*Navicat Premium Data TransferSource Server : rootSource Server Type …

WPS Office JS宏实现批量处理Word中的标题和正文的样式

该篇讲解下word文档中的标题和正文批量修改样式&#xff0c;如下图&#xff1a; 前面一篇已讲解了WPS Office宏编辑器操作方法&#xff0c;这里不细讲了&#xff0c;如有不清楚可以查看该篇&#xff1a;https://blog.csdn.net/jiciqiang/article/details/134653657?spm1001.20…

制作蓝牙小车(一)

制作控制蓝牙小车app 想制作一个蓝牙小车&#xff0c;通过手机app程序操控小车运行&#xff0c;制作分2个部分&#xff08;app制作&#xff0c;蓝牙小车硬件以及程序制作&#xff09;&#xff0c;先完成第一个部分app制作&#xff0c;本次app是通过androidstudio软件来制作安卓…

私域爆款案例拆解-元气森林

一、背景调研 二、引流策略 三、私域运营策略

第十一章 React 封装自定义组件

一、专栏介绍 &#x1f30d;&#x1f30d; 欢迎加入本专栏&#xff01;本专栏将引领您快速上手React&#xff0c;让我们一起放弃放弃的念头&#xff0c;开始学习之旅吧&#xff01;我们将从搭建React项目开始&#xff0c;逐步深入讲解最核心的hooks&#xff0c;以及React路由、…

客户案例:EDLP在央国企邮件数据合规中的价值与优势

客户背景 某机械制造企业&#xff0c;作为动力设备领域的领军企业&#xff0c;专门从事动力设备的研发、制造与销售。凭借丰富的经验与卓越的技术实力&#xff0c;该企业致力于深度研究动力设备的核心技术&#xff0c;为客户提供高效且可靠的解决方案。 客户需求 作为企业健康…

4 向微服务架构转变

文章目录 小型单体系统为什么选择小型单体系统微服务与生俱来的问题小型单体系统适用于小团队拥抱重构 规划未来拆分的小型单体应用程序新需求和游戏化用户故事游戏化&#xff1a;积分、徽章和排行榜 转向微服务独立的工作流程水平可伸缩性细粒度的非功能需求其他优势劣势 架构…

【带头学C++】----- 九、类和对象 ---- 9.10 C++设计模式之单例模式设计

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️麻烦您点个关注&#xff0c;不迷路❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ 目 录 9.10 C设计模式之单例模式设计 举例说明&#xff1a; 9.10 C设计模式之单例模式设计 看过我之前的文章的&#xff0c;简单讲解过C/Q…

微信小程序---页面导航

1.声明式导航 &#xff08;1&#xff09;跳转到tabBar &#xff08;2&#xff09;跳转到非tabBar 注意&#xff0c;这个open-type"navigate"可以省略 &#xff08;3&#xff09;后退式导航 注意&#xff0c;如果只是后退到上一个页面&#xff0c;可以省略delta属性…

C++指针常量与常量指针

指针常量 const int * ptr new int(10); // 1&#xff09;常量指针 指针指向一个常量即指向的值不可改变 指针常量是指这个指针是一个常量&#xff0c;即指针的指向(地址)不可改变&#xff0c;但是地址对应的值是可以改变的。 常量指针 int * const ptr2 new int(20); // …

遥感图像之多模态检索AMFMN(支持关键词、句子对图像的检索)论文阅读、环境搭建、模型测试、模型训练

一、论文阅读 1、摘要背景 遥感跨模态文本图像检索以其灵活的输入和高效的查询等优点受到了广泛的关注。然而&#xff0c;传统的方法忽略了遥感图像多尺度和目标冗余的特点&#xff0c;导致检索精度下降。为了解决遥感多模态检索任务中的多尺度稀缺性和目标冗余问题&#xff…

机器学习硬件十年:性能变迁与趋势

本文分析了机器学习硬件性能的最新趋势&#xff0c;重点关注不同GPU和加速器的计算性能、内存、互连带宽、性价比和能效等指标。这篇分析旨在提供关于ML硬件能力及其瓶颈的全面视图。本文作者来自调研机构Epoch&#xff0c;致力于研究AI发展轨迹与治理的关键问题和趋势。 &…

RocketMQ源码

RocketMQ的核心三流程 启动流程 RocketMQ服务端由两部分组成NameServer和Broker&#xff0c;NameServer是服务的注册中心&#xff0c;Broker会把自己的地址注册到NameServer&#xff0c;生产者和消费者启动的时候会先从NameServer获取Broker的地址&#xff0c;再去从Broker发…

山东烟台一汽配城发生火灾 探索富维AI神器如何及时报警

近日&#xff0c;山东烟台一汽配城发生火灾&#xff0c;引起了广泛关注。火灾虽然被及时控制&#xff0c;但这一事件再次提醒我们&#xff0c;火灾预防的重要性不容忽视。在这一背景下&#xff0c;北京富维图像公司的FIS智能图像识别系统为我们提供了新的防范措施。 这一系统利…

使用人工智能优化常见业务流程

在现代商业环境中&#xff0c;人工智能(AI)正在改变企业的运营方式。将人工智能集成到业务流程中可以提高效率和准确性&#xff0c;从而节省大量时间和成本。 这使员工能够专注于更具战略性的任务。人工智能在商业中的应用范围从自动化日常任务到提供高级分析&#xff0c;以做…

Vue H5项目,怎么引入uni.webview sdk,调用uni postMessage实现手机蓝牙连接打印功能(uniapp)

前言 目前公司Vue H5项目&#xff0c;用webview打包成APP&#xff0c;现产品提出这样打包出来的app运行较慢&#xff0c;需要用uniapp方式&#xff08;即使用HBuilder编辑器来打包H5&#xff09;来打包&#xff0c;那需要的基座就不是安卓的基座而是uniapp的基座&#xff0c;而…

Appium 自动化测试从入门到精通,零基础也能听懂

1.Appium介绍 1&#xff0c;appium是开源的移动端自动化测试框架&#xff1b; 2&#xff0c;appium可以测试原生的、混合的、以及移动端的web项目&#xff1b; 3&#xff0c;appium可以测试ios&#xff0c;android应用&#xff08;当然了&#xff0c;还有firefoxos&#xff09…

记一次mybatis-plus的argument type mismatch报错

起初以为是boolean和数据库的tinyint不匹配导致&#xff0c;找了一天之后想起来把整个lambda注释掉发现list直接无法运行&#xff0c;说明问题不在boolean List<BmsBillboard> list bmsBillboardService.list(new LambdaQueryWrapper<BmsBillboard>().eq(BmsBillb…

盘点六款颇具潜力的伪原创AI工具

写作作为信息传递的主要媒介&#xff0c;在庞大的信息海洋中&#xff0c;为了在激烈的竞争中脱颖而出&#xff0c;伪原创AI工具成为越来越多写手的神秘利器。在本文中&#xff0c;我们将深入盘点六款颇具潜力的伪原创AI工具&#xff0c;为你揭开它们神秘的面纱。 1. 文心一言 …

【android开发-17】android中SQLite数据库CRUD详细介绍

1&#xff0c;SQLite数据库读写的操作步骤 在Android中&#xff0c;对SQLite数据库的操作主要包括以下步骤&#xff1a; 1&#xff0c;创建数据库&#xff1a;首先&#xff0c;您需要创建一个SQLite数据库。这可以通过在Android项目中创建一个新的类来实现&#xff0c;该类继…