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.jsimport { 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/

欢迎访问:天问博客

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

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

相关文章

如何公网访问内网的群晖NAS随时随地远程访问本地存储的学习资源

文章目录 前言本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是前排提醒&#xff1a; 1. 搭建群晖虚拟机1.1 下载黑群晖文件vmvare虚拟机安装包1.2 安装VMware虚拟机&#xff1a;1.3 解压黑群晖虚拟机文件1.4 虚拟机初始化1.5 没有搜索到黑群晖的解…

成都工业学院Web技术基础(WEB)实验六:ECMAScript基础语法

写在前面 1、基于2022级计算机大类实验指导书 2、代码仅提供参考&#xff0c;前端变化比较大&#xff0c;按照要求&#xff0c;只能做到像&#xff0c;不能做到一模一样 3、图片和文字仅为示例&#xff0c;需要自行替换 4、如果代码不满足你的要求&#xff0c;请寻求其他的…

TwinCAT3 Modbus-TCP Client/Server使用

目录 一、环境配置和准备 1、PLC中安装TF6250-Modbus-TCP库 2、勾选TF6250的license 3、PLC工程中添加Tc2_ModbusSrv库文件 4、分别创建测试ModbusTCP测试的Server和Client程序 二、PLC作为Client端 1、设置测试电脑IP地址 2、运行MobusTCP测试工具 3、PLC端程序编写 …

Hiera实战:使用Hiera实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

可学习超图拉普拉斯算子代码

python版本&#xff1a;3.6。sklearn版本&#xff1a;scikit-learn0.19 问题1&#xff1a;ERROR: Could not build wheels for ecos, scs, which is required to install pyproject.toml-based projects| 解决办法&#xff1a;cvxpy安装过程中遇到的坑_ecos 2.0.7.post1 cp37 …

大数据技术7:基于StarRocks统一OALP实时数仓

前言&#xff1a; 大家对StarRocks 的了解可能不及 ClickHouse或者是远不及 ClickHouse 。但是大家可能听说过 Doris &#xff0c;而 StarRocks 实际上原名叫做 Doris DB &#xff0c;他相当于是一个加强版的也就是一个 Doris ,也就是说 Doris 所有的功能 StarRocks 都是有的&a…

【设计模式--结构型--桥接模式】

设计模式--结构型--桥接模式 桥接&#xff08;Bridge&#xff09;模式定义结构案例好处使用场景 桥接&#xff08;Bridge&#xff09;模式 定义 将抽象与实现分离&#xff0c;使他们可以独立变化。它是用组合关系代替继承关系来实现&#xff0c;从而降低了抽象和实现这两个维…

达梦 DM 数据库

达梦数据库 varchar varchar2的区别, 推荐使用 varchar2 -- 日期格式化 SELECT DATE_FORMAT(GETDATE(), %Y-%m-%d %H:%i:%s);-- 2023-12-11 SELECT CURDATE();-- 2023-12-11 09:22:24 SELECT SYSDATE();-- 2023-12-11 11:09:53.136527 SELECT GETDATE();-- 当前日期1 -1天 SEL…

MyEclipse中常用的快捷键大全

Eclipse的编辑功能非常强大&#xff0c;掌握了Eclipse快捷键功能&#xff0c;能够大大提高开发效率。Eclipse中有如下一些和编辑相关的快捷键。 1. 【ALT/】 此快捷键为用户编辑的好帮手&#xff0c;能为用户提供内容的辅助&#xff0c;不要为记不全方法和属性名称犯愁…

vite+vue3实现动态路由

在做这个动态路由的时候踩了很多坑&#xff0c;其中大部分是粗心了 动态菜单主要是导入的方式 import.meta.glob 参考&#xff1a;功能 | Vite 官方中文文档 1、多层路由渲染&#xff08;用3层路由做demo&#xff09; 拿到接口的数据是后台直接处理好的结构&#xff0c;但是…

Lua脚本操作redis

模拟库存扣减 基础版 SpringBootTest class LuaTests {Resource(name"redisTemplate")ValueOperations<String,Long> valueOperations;AutowiredStringRedisTemplate stringRedisTemplate;final String priductKey "product.1";Testvoid test1()…

Java NIO, IO 整理

NIO: IO多路复用: 参考: Redis&#xff08;六&#xff09;单线程I/O多路复用模型浅析_单线程多路复用-CSDN博客 Java NIO 详解_java nio详解_开发菜鸡的博客-CSDN博客 Java Socket 之 NIO - 掘金 答应我&#xff0c;这次搞懂 I/O 多路复用&#xff01;_小林coding的博客-CS…

Spring JdbcTemplate

一、简介 Spring 框架对 JDBC 进行封装&#xff0c;使用 JdbcTemplate 方便实现对数据库操作。它是 spring 框架中提供的一个对象&#xff0c;是对原始 Jdbc API 对象的简单封装。spring 框架为我们提供了很多的操作模板类。 针对操作关系型数据&#xff1a; jdbcTemplateHibe…

A* 算法简介

一、A* 算法简介A* algorithm is a popular choice for graph search. Breadth First Search is the simplest of the graph search algorithms. Graph search algorithms, including A*, take a “graph” as input. A* algorithm is a modification of Dijkstra’s Algorithm…

华为OD机试 - 部门人力分配(Java JS Python C)

题目描述 部门在进行需求开发时需要进行人力安排。 当前部门需要完成 N 个需求,需求用 requirements 表述,requirements[i] 表示第 i 个需求的工作量大小,单位:人月。 这部分需求需要在 M 个月内完成开发,进行人力安排后每个月人力时固定的。 目前要求每个月最多有2个…

在k8s中部署nfs-client-provisioner

1、部署过程 1.1、环境依赖 在部署nfs-client-provisioner之前&#xff0c;需要先部署nfs服务。 因为&#xff0c;nfs-client-provisioner创建的pv都是要在nfs服务器中搭建的。 本示例中的nfs server的地址如下&#xff1a; [rootnode1 /]# showmount -e Export list for …

pinia 持久化插件使用

官方文档 本文主要介绍 vue3组合式 api 使用持久化插件的写法。 选项式 写法官方已给出 安装依赖 pnpm i pinia-plugin-persistedstate插件的使用 import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstateconst pinia creat…

JavaMap工具类(MapUtils)

1、Object转Map 2、将 map 中的 value 为null的的元素转成空字符串"" 3、map转Object 4、MAP 判空 5、Map 排序 按key值长度进行排序 6、两个MAP对比&#xff0c;在oldMap中移除remMap中所有的key值 备注&#xff1a;排序的话(TreeMap)是可以直接实现简单排序的…

VR转接线方案/VR Link串流数据线方案/VR眼镜PD快充方案

虚拟现实技术(英文名称&#xff1a;Virtual Reality&#xff0c;缩写为VR)&#xff0c;又称虚拟实境或灵境技术&#xff0c;是20世纪发展起来的一项全新的实用技术。虚拟现实技术囊括计算机、电子信息、仿真技术&#xff0c;其基本实现方式是以计算机技术为主&#xff0c;利用并…

Java:commons-lang3中的StringUtils.strip实现移除字符串首尾字符

依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version> </dependency>示例 // 包名 import org.apache.commons.lang3.StringUtils;// 处理字符串&…