UnoCSS快速入门

news2024/12/22 10:03:03

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({ // 使用Unocss
      presets: [
        presetUno(),
        presetAttributify(),
        presetIcons()],
    })
  ]
})
  • 修改main.js文件
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import 'uno.css' // focus code

createApp(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.coloradmin.cn/o/1138987.html

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

相关文章

V8 引擎中的垃圾收集器

V8 引擎中的垃圾收集器 垃圾收集是跟踪活动对象的过程&#xff0c;同时销毁堆内存中未引用的对象&#xff0c;为将来创建的新对象腾出空间。本文将讨论V8 引擎的垃圾收集器&#xff0c;V8 引擎是由 Google 用 C 编写开发的开源、高性能 JavaScript 和 WebAssembly 引擎。 V8 引…

three.js第一课

官网 1.创建场景 2.创建几何体 3.创建材质 4.创建网格模型 5.将几何体、材质加入网格模型&#xff0c;设置网格模型的位置&#xff0c;将网格模型加入场景中 6.创建相机&#xff0c;构造函数中设置角度、最后面视椎体的长宽比&#xff0c;相机离视椎体近端面的距离、视椎体的远…

算法训练营第二天 | 977.有序数组的平方、209.长度最小的子数组、 59.螺旋矩阵II

问题&#xff08; 一 &#xff09; 问题描述&#xff1a; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱…

并发编程- 线程池ForkJoinPool工作原理分析(实践)

数据结构加油站&#xff1a; Comparison Sorting Visualization 并发设计模式 单线程归并排序 public class MergeSort {private final int[] arrayToSort; //要排序的数组private final int threshold; //拆分的阈值&#xff0c;低于此阈值就不再进行拆分public MergeSort…

重学JDK8新特性之Stream

集合处理数据的弊端 当我们在需要对集合中的元素进行操作的时候&#xff0c;除了必需的添加&#xff0c;删除&#xff0c;获取外&#xff0c;最典型的操作就是 集合遍历 public static void main(String[] args) {// 定义一个List集合List<String> list Arrays.asList…

流程引擎-自定义函数的应用

背景&#xff1a; 某些业务需求比较特殊&#xff0c;需要在表单中校验或实现一些功能&#xff0c;泛微流程表单配置时实现的方式多种多样&#xff1a;JS脚本、SQL语句、公式以及其他一些标准化拖拽功能&#xff0c;本次给大家分享一下流程表单中的公式实现的一些需求场景。泛微…

动态组件<component>

用法&#xff1a; <template><div><Navbar></Navbar><Home v-if"componentName 首页"></Home><List v-else-if"componentName 列表"></List><Center v-else-if"componentName 我的">…

公众号爆文写作怎么做?或许这些领域才适合你!

最近分享了很多爆款案例&#xff0c;看了的人都在跟进&#xff0c;有些人做得很出色&#xff0c;持续出爆款&#xff0c;但还是有人遇到了瓶颈&#xff0c;阅读量停滞不前。 其实&#xff0c;能否成功与个人能力、经验、环境以及一丢丢的运气有关。 但是&#xff0c;公众号不止…

PTL电子标签助力仓储行业转型升级提升拣货效率降低误差率

在智能物流、智能工厂和智能零售等行业的快速发展中&#xff0c;电子货位标签、物流智能设备和专业智能穿戴产品的应用变得越来越重要。这些技术的引入为仓储行业带来了巨大的变革和提升。作为一家致力于电子货位标签、物流智能设备和专业智能穿戴产品的开发和市场推广的公司&a…

windows10下SQL Prompt安装和注册

文章目录 windows10下SQL Prompt安装下载安装程序安装关闭联网注册机使用测试卸载 windows10下SQL Prompt安装 下载安装程序 官网 下载后 安装 双击打开界面 关闭联网 激活失效&#xff1a; 方法1&#xff1a;在本地hosts加入以下代码&#xff1a; 127.0.0.1 licensin…

Fabric.js 自定义控件

本文简介 带尬猴&#xff0c;我是德育处主任 虽然 Fabric.js 提供的基础功能已经很丰富了&#xff0c;但有时难免需要定制一些需求。比如本文要讲的 『自定义控件』。掌握创建自定义控件这个功能&#xff0c;能够创建更加精美和实用的图形应用程序&#xff0c;提高用户体验和用…

pycharm远程连接Linux服务器

文章目录 一&#xff1a;说明二&#xff1a;系统三&#xff1a;实现远程连接方式一&#xff1a; 直接连接服务器不使用服务器的虚拟环境步骤一&#xff1a;找到配置服务器的地方步骤二&#xff1a;进行连接配置步骤三&#xff1a;进行项目文件映射操作步骤四&#xff1a;让文件…

【JavaSE专栏53】Java集合类HashMap详解

Java集合类HashMap详解 摘要引言1. HashMap简介&#xff1a;掌握什么是HashMap&#xff1f;&#x1f9d0;2. HashMap的操作技巧&#xff1a;从基础到高级&#x1f680;2.1 添加键值对&#xff1a;put(K key, V value) &#x1f4e5;2.2 获取值&#xff1a;get(Object key) &…

ORACLE数据库查询所有索引的sql语句

SELECT * FROM ALL_INDEXES WHERE TABLE_NAMEB_CONFIG; 举例&#xff1a;

PCIE-Malformed tlp,UR,UC,CA

Malformed TLP (1)收到的cpl&#xff0c;actual payload 不等于length&#xff1b; (2)收到的cpl&#xff0c;违背了RCB准则&#xff1b; (3)Local tlp prefix不在end-end tlp prefix前&#xff1b; (4)不支持local tlp prefix的设备&#xff0c;同时extended fmt field为1…

提升用户体验的关键步骤

快速搭建功能齐全的户外帐篷用具小程序&#xff0c;是现今越来越流行的一种商业模式。通过将线下的户外用品店转移到线上&#xff0c;不仅可以减少人力成本和租金等固定支出&#xff0c;还可以为用户提供更便捷的购物体验。因此&#xff0c;学习如何快速搭建一个功能齐全的户外…

面向对象(基础)知识点强势总结!!!

文章目录 一、知识点总结&#xff08;1&#xff09;面向过程VS面向对象&#xff08;2&#xff09;类、对象&#xff08;3&#xff09;类的成员之一&#xff1a;属性&#xff08;或成员变量&#xff09;&#xff08;4&#xff09;类的成员之二&#xff1a;方法&#xff08;5&…

echarts折线图y轴刻度自适应

在做温湿度趋势曲线图时&#xff0c;我碰到了如下图这样的问题。我的实际值&#xff0c;都没有超过100的刻度的&#xff0c;但是他y轴的刻度线都到了250去了&#xff0c;这样完全不对。 尝试过强行给y周刻度设置最大最小值 &#xff0c;但是结果也不对。 yAxis: { type: value…

知识付费系统的移动应用开发:跨平台和原生应用的比较

移动应用在知识付费系统中发挥着重要作用&#xff0c;为用户提供了便捷的访问方式。在开发知识付费系统的移动应用时&#xff0c;开发团队通常需要考虑使用跨平台开发工具或原生开发。本文将比较这两种方法&#xff0c;讨论它们的优点和缺点&#xff0c;并提供示例代码来说明它…

正确部署Baichuan2(Ubuntu20.4) 步骤及可能出现的问题

部署其实是不太复杂的,但实际上也耗费了接近2-3天的时间去不断的设置 1 硬件配置信息 采用esxi 虚拟化的方式将T4 卡穿透给esxi 种的ubuntu20.4虚拟机 CPU给到8 core 内存至少32GB以上 T4卡是16GB 2 预先准备OS环境 这里使用的是ubuntu20.4版本,esxi中需要设置uefI启动方…