UnoCSS快速入门

UnoCSS快速入门

  • UnoCSS
    • 一、UnoCSS简介
    • 二、UnoCSS解决问题
    • 三、UnoCSS实践
    • 四、好文推荐


UnoCSS

一、UnoCSS简介

在这里插入图片描述

  • UnoCSS 是一个即时、按需的原子级 CSS 引擎。它专注于提供轻量化、高性能的 CSS 解决方案。
  • “Instant On-demand” 表示 UnoCSS 的加载和渲染速度非常快,可以立即进行使用。它不需要预先编译,使得样式可以在需要时动态地生成。
  • “Atomic CSS Engine” 表示 UnoCSS 使用原子级 CSS 样式的概念。原子级 CSS 是一种通过将样式属性定义为独立的类来构建页面的方法。每个类都只包含一项或几项样式属性,可以在组件中灵活地组合和应用这些类,以实现细粒度的样式控制。
  • UnoCSS 的目标是通过仅传递实际使用的样式属性,减小生成的 CSS 文件的体积。这样可以优化页面的加载速度,并减少不必要的网络传输和运行时的样式计算。
  • 总的来说,UnoCSS 是一个即时、按需的原子级 CSS 引擎,旨在提供快速、高性能的原子级 CSS 解决方案。

二、UnoCSS解决问题

  • UI 库 Bootstrap 很早就在提供大量原子化 CSS 工具类。不过在应用开发中,由于原子化 CSS 自身的劣势——原子类的编写缺少提示、原子类的定义使 CSS 最终产物膨胀、原子类的大量堆叠降低 html 的可读性,语义化 CSS 逐渐成为了主流,原子 CSS 慢慢被边缘化,成为一种辅助的手段。

  • 现代的原子化 CSS 方案——Tailwind CSS、Windi CSS、UnoCSS,之所以将原子化 CSS 方案再度推向高潮,是因为其解决了上述的三大痛点:

    • 它们都推出了 VSCode 插件,为编写原子类提供了充分的提示与自动补全。
    • 它们都在构建阶段扫描代码,能够按照代码中的实际使用情况生成工具类,解决了原子类使 CSS 产物膨胀问题。
    • 针对原子类堆叠降低可读性的问题,提供了 @apply 语法支持在 CSS 中对多个原子类进行合并,与语义化 CSS 实现了很好的配合。
  • UnoCSS 和 Tailwind CSS 有一些区别和特点:

    1. 设计理念: UnoCSS 的设计理念是提供一个即时、按需的原子级 CSS 引擎。它专注于轻量化和高性能,并使用原子类的方式来构建页面样式。相比之下,Tailwind CSS 提供了更全面和丰富的工具集,以便于快速开发和定制化。它使用了一组预定义的类,通过组合这些类来构建页面样式。
    2. 文件大小和加载性能: UnoCSS 生成的 CSS 文件相对较小,因为它仅包含实际使用的样式属性。这可以减少网络传输和运行时的样式计算,从而提高页面加载性能。而 Tailwind CSS 的 CSS 文件较大,因为它提供了大量的预定义类,以满足各种常见样式需求。
    3. 学习曲线和使用方式: UnoCSS 使用原子类的方式来定义样式,需要熟悉其命名规则和使用方法,特别适合熟悉原子类概念的开发者。相比之下,Tailwind CSS 的类命名直观且易于理解,上手较快。它也提供了丰富的文档和示例,帮助开发者更快地上手。
    4. 定制性和灵活性: Tailwind CSS 提供了大量的预定义类,使得样式定制和扩展非常方便。开发者可以通过配置文件自定义主题、添加新的类或修改现有类。UnoCSS 则更加注重即时、按需生成样式,定制性较弱。

在这里插入图片描述

  • UnoCSS 并非要替代 Tailwind CSS 而是从另一个角度使原子化CSS在业务中融合的更完美

按需生成

在这里插入图片描述

  • 传统的方式不仅会消耗不必要的资源(生成了但未使用),甚至有时更是无法满足你的需求,因为总会有部分需求无法包含在内。

在这里插入图片描述

  • 通过调换 “生成” 和 “扫描” 的顺序,“按需” 会为你节省浪费的计算开销和传输成本,同时可以灵活地实现预生成无法实现的动态需求。另外,这种方法可以同时在开发和生产中使用,提供了一致的开发体验,使得 HMR (Hot Module Replacement, 热更新) 更加高效。
  • Tailwind 的 API 和插件系统沿用了旧的思维方式进行设计,并不能适应新的按需方式。其核心工具是在生成器中锻造出来的,而且其定制化功能相当有限。(Tailwind 3.0也是按需引入啦)

性能

在这里插入图片描述

  • 从结果来看,UnoCSS 可以比 Tailwind 的 JIT 引擎快 200 倍!说实话,在按需生成的情况下,Windi 和 Tailwind JIT 都已经算是超快了,UnoCSS 的性能提升感知度可能没有那么高。然而,几乎为零的开销意味着你可以将 UnoCSS 整合到你现有的项目中,作为一个增量解决方案与其他框架一同协作,而不需要担心性能损耗。

  • Pure CSS icons

    • 纯css图标,使用 Iconify作为图标的数据源
  • Attributify Mode

    • 特有的属性模式
  • Variant Groups

    • 属性组的写法转换
  • Shortcuts

    • 快捷写法
  • Tagify

    • 标记
  • Web fonts

    • 网页字体
  • CDN Runtime

    • CDN运行时
  • Inspector

    • 检查

三、UnoCSS实践

  • Integrations (unocss.dev)
  • 首先创建好项目,然后安装unocss(顺便安装好unocss插件):
  • 在这里插入图片描述

在这里插入图片描述

# 安装unocss和三个预设,第一个是工具类预设,第二个是属性化模式支持,第三个是icon支持
npm i -D unocss @unocss/preset-uno @unocss/preset-attributify @unocss/preset-icons
# or
yarn add -D unocss @unocss/preset-uno @unocss/preset-attributify @unocss/preset-icons
# or
pnpm i -D unocss @unocss/preset-uno @unocss/preset-attributify @unocss/preset-icons
  • 安装完成

在这里插入图片描述

  • 修改vite.config.js文件:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// 引入Unocss
import Unocss from 'unocss/vite';
import { presetUno, presetAttributify, presetIcons } from 'unocss'
// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(),Unocss({ // 使用Unocsspresets: [presetUno(),presetAttributify(),presetIcons()],})]
})
  • 修改main.js文件
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import 'uno.css' // focus codecreateApp(App).mount('#app')
  • 在app.vue中编写代码
<script setup>
</script><template><button class="bg-blue w-80 h-10 ml-10 m-1">button</button>
</template><style scoped>
</style>

在这里插入图片描述

  • 可以通过以下方式自定义一个简单的 UnoCSS 静态规则
// vite.config.js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import Unocss from "unocss/vite";
import { presetUno, presetAttributify, presetIcons } from "unocss";// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(),Unocss({presets: [presetUno(), presetAttributify(), presetIcons()],rules:[['m-1', { margin: '1px' }] // 这里可以自定义]}),],
});

在这里插入图片描述

  • 可以通过配置使用Webpack打包Unocss,这里就不详细展开啦

  • 使用风险:UnoCSS 仍处于实验阶段,但由于其精简的设计,生成的结果已经非常可靠了。需要注意的一点是,API 还没有最终定案,虽然我们会遵循 semver 的进行版本发布,但是还请为破坏性改动做好准备。


四、好文推荐

  • 重新构想原子化 CSS (antfu.me)
  • 从 Tailwind CSS 到 UnoCSS —— 原子化真的是前端CSS的救星吗
  • 来试试antfu大佬的原子化css构想成果——UnoCSS

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

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

相关文章

如何进行渗透测试以提高软件安全性?

对于各种规模的企业和组织来说&#xff0c;软件安全是一个至关重要的问题。随着网络攻击越来越复杂&#xff0c;软件中的漏洞越来越多&#xff0c;确保你的软件安全比以往任何时候都更重要。提高软件安全性的一个有效方法是渗透测试&#xff08;penetration testing&#xff09…

Mac-postman存储文件目录

今天postman弹窗要求登录账号才可访问之前的API文档数据。 但是这postman的账号又是前同事的账号&#xff0c;我没有他的账号和密码啊。 登录了我自己的postman账号后&#xff0c;所有的api文档都不见了....我服了。 首先去屏幕左上角---> 前往 --->个人 然后键盘按显…

用图说话——流程图进阶

目录 一、基本流程图 二、时序流程图 一、基本流程图 经常阅读歪果仁绘制的流程图&#xff0c;感觉比较规范&#xff0c;自己在工作中也尝试用他们思维来绘图&#xff0c;这是一个小栗子&#xff1a; 二、时序流程图 在进行Detail设计过程中&#xff0c;一般的绘图软件显得…

【QT】信号和槽能自动传递参数

一、前置示例代码 main.cpp #include "widget.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv); // 应用程序对象a&#xff0c;在Qt中&#xff0c;应用程序对象&#xff0c;有且仅有一个。Widget w; // 窗口对…

电力巡检/电力抢修行业解决方案:AI+视频技术助力解决巡检监管难题

一、行业背景 随着国民经济的蓬勃发展&#xff0c;工业用电和居民用电需求迅速增加&#xff0c;电厂、变电站、输电线路高负荷运转&#xff0c;一旦某个节点发生故障&#xff0c;对生产、生活造成巨大的影响。目前电力行业生产现场人员、设备较多&#xff0c;而生产监督员有限…

PS笔记2_钢笔工具的形状和路径

本文目录 前言Step 1 形状的用法&#xff1a;画图Step 2 路径的用法&#xff1a;抠图 前言 当我们在PS中选择钢笔工具时&#xff0c;上方功能栏中可以选择钢笔的功能项&#xff0c;有三种选项&#xff1a;形状&#xff0c;路径和像素。最常用的就是“形状”和“路径”。本博文…

AcWing 1.2.1 最长上升子序列模型 + 动态规划 + 图解(详细)

&#xff08;1&#xff09;acwing 4557. 最长上升子序列 4557. 最长上升子序列 - AcWing题库 给定一个长度为 N 的整数序列 a1,a2,…,aN。请你计算该序列的最长上升子序列的长度。上升子序列是指数值严格单调递增的子序列 输入格式 第一行包含整数 N第二行包含 N个整数 a1,a…

UE4 使用材质后期 制作玻璃有雨效果

效果展示&#xff0c;其实这是一个动画效果 以上为所有逻辑 拿到TexCoord给到Panner&#xff0c;Time和Speed都是通过下面计算而来&#xff0c;后面讲&#xff0c;再拿到时间和速度值过后&#xff0c;加上扰动值&#xff0c;最后取G值&#xff0c;因为雨事从上而下的动&#xf…

MATLAB中polyvalm函数用法

目录 语法 说明 示例 特征多项式的矩阵计算 polyvalm函数的功能是矩阵多项式计算。 语法 Y polyvalm(p,X) 说明 Y polyvalm(p,X) 以矩阵方式返回多项式 p 的计算值。此计算方式等同于使用多项式 p 替换矩阵 X。 示例 特征多项式的矩阵计算 求解 4 阶帕斯卡矩阵的特征…

RZMO-A-030/210、HZMO-A-030/315电控比例压力阀控制器

RZMO-A-030/50、RZMO-A-030/210、RZMO-A-030/350、RZMO-A-030/100、RZMO-A-030/315、HZMO-A-030/50、HZMO-A-030/210、HZMO-A-030/350、HZMO-A-030/100、HZMO-A-030/315滑阀型先导式数字型比例溢流阀&#xff0c;用于压力开环控制&#xff0c;可提供板式或叠加式安装。A型&…

禁止chrome浏览器更新方式

1、禁用更新服务 WinR调出运行&#xff0c;输入services.msc&#xff0c;进入服务。 在服务中有两个带有Google Update字样&#xff0c;双击打开后禁用&#xff0c;并把恢复选项设置为无操作。 2、删除计划任务 运行taskschd.msc&#xff0c;打开计划任务程序库&#xff0c;在…

15套前端经典实战项目大合集,小白练手必备实战项目

15套前端经典实战项目大合集&#xff0c;悄悄练习&#xff0c;你会惊艳所有人。 今日我以内卷为荣&#xff0c;明日内卷以我为荣&#xff0c;不管学习哪门语言都要做出实际的东西来&#xff0c;这个实际的东西就是项目。 这里整理了15前端经典实战项目&#xff0c;每套都有完…

【蓝桥杯选拔赛真题01】C++参赛建议 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析

目录 C/C++参赛建议 一、题目要求 1、编程实现 2、输入输出 二、算法分析 <

EPPlus库的安装和使用 C# 中 Excel的导入和导出

安装 工具栏->NuGet 包管理器->管理解决方案的NuGet程序包 安装到当前项目中 使用 将 DataGridView 数据导出为Excel 首先&#xff0c;需要将数据DataGridView对象转换为DataTable private void btnExport_Click(object sender, EventArgs e) {// 1.将当前页面的data…

R语言入门看这一章就够了(上)

目录 一、R的基础 1.1、R的安装 1.2、牛刀小试 1.3、线性关系实例 1.4、工作空间 1.5、R包的使用 包的安装 结果的重用 二、R数据集 2.1、向量 2.2、矩阵 2.3、数组 2.4、数据框 2.5、列表 三、R的常用命令 四、list列表详解 五、数据源导入方法 5.1、键盘输…

Mysql进阶-索引篇(上)

目录 索引概述 索引结构 数据结构 二叉树 红黑树 B-Tree BTree Hash 索引分类 聚集索引&二级索引 聚集索引选取规则: 具体结构 索引基础语法 SQL性能分析 SQL执行频率 慢查询日志 profile详情 explain 索引概述 介绍&#xff1a; 索引&#xff08; index &…

JetBrains ReSharper Ultimate 2023.2.2

JetBrains ReSharper Ultimate 国外知名软件公司JetBrains专为软件开发软件编程人员制作的各类应用工具箱&#xff0c;如&#xff1b;PHP集成开发工具PHPStorm&#xff0c;Java整合开发工具IntelliJ IDEA&#xff0c;Python集成开发工具PyCharm&#xff0c;HTML/CSS/JS开发工具…

17 HAP 覆盖特性与链路损耗特性分析

HAP 覆盖特性与链路损耗特性分析 HAP平台高度&#xff1a;17~22km之间。HAP通信业务的覆盖区域取决于覆盖区边缘至平台的仰角&#xff0c;仰角越小&#xff0c;覆盖区域越大。覆盖区内不同地点的用户至平台的距离差别也越大。HAP和终端几何关系&#xff1a; B&#xff1a;地面…