如何在uni-app中使用原子化 CSS——UnoCSS

server/2024/9/23 12:17:52/

原文地址:原文链接

一、前言

UnoCSS是一个即时的原子化 CSS 引擎,旨在灵活和可扩展。核心是不拘一格的,所有的 CSS 工具类都是通过预设提供的。

那么,UnoCSS 与其他框架的有何不同之处呢?

UnoCSS 由 Windi CSS 团队的成员创建,灵感来源于我们在 Windi CSS 中的工作。虽然 Windi CSS 在 2023 年 3 月停止了维护,但您可以将 UnoCSS 看作是 Windi CSS 的"精神继承者"。

UnoCSS 继承了 Windi 的按需自然样式、属性模式、快捷方式、变体组、编译模式等特性,并在此基础上构建了极具可扩展性和性能的 UnoCSS,从而引入了新的功能,如纯 CSS 图标、无值属性模式、标签化、Web 字体等。

最重要的是,UnoCSS 作为一种原子级 CSS 引擎,所有的功能都是可选的,并且可以轻松创建自己的约定、设计系统和预设 - 您可以选择需要的功能组合 。

Windi CSS 和 UnoCSS 都从Tailwind CSS中汲取了很多灵感。由于 UnoCSS 是从头开始构建的,因此我们可以很好地了解原子 CSS 是如何通过前期的艺术和抽象转化为优雅且强大的 API 的。虽然 Tailwind CSS 和 UnoCSS 有不同的设计目标,因此无法直接进行比较,但我们将列举一些差异:

Tailwind CSS 是一个 PostCSS 插件,而 UnoCSS 是一个具有多种一流构建工具集成的同构引擎(包括PostCSS 插件)。这意味着 UnoCSS 可以在不同的地方更加灵活地使用(例如,CDN 运行时,可以动态生成 CSS),并且可以与构建工具深度集成,提供更好的 HMR、性能和开发者体验(例如,Inspector)。

从技术上讲,抛开权衡不谈,UnoCSS 也被设计成完全可扩展和可定制化,而 Tailwind CSS 则更加偏向于一种观点。在 Tailwind CSS 上构建自定义设计系统(或设计令牌)可能会很困难,你无法真正摆脱 Tailwind CSS 的约定。而在 UnoCSS 上,您可以完全控制地构建几乎任何您想要的东西。例如,我们在一个单一的预设中实现了整个与 Tailwind CSS 兼容的工具,而且还有许多其他有趣哲学的社区预设。

UnoCSS 相较于 Tailwind CSS 的缺点是不支持 Tailwind 的插件系统或配置,这意味着从一个定制化程度很高的 Tailwind CSS 项目迁移可能会更加困难。这是一个有意的决策,旨在使 UnoCSS 高性能和可扩展。

二、安装及使用

2.1 环境
请确保您的node版本≥16。

// package.json
"dependencies": {"dayjs": "^1.11.12","pinia": "^2.2.0","pinia-plugin-persist-uni": "^1.3.1","vite": "^5.3.5","wot-design-uni": "^1.3.6"
},
"devDependencies": {"@uni-helper/vite-plugin-uni-components": "^0.0.9","@unocss/transformer-directives": "^0.61.6","unocss": "^0.61.6","unocss-preset-weapp": "^0.61.1"
}

2.2 创建uno.config.ts

// uno.config.ts
import presetWeapp from 'unocss-preset-weapp'
import { extractorAttributify, transformerClass } from 'unocss-preset-weapp/transformer'
import { presetIcons } from 'unocss'import transformerDirectives from '@unocss/transformer-directives'const { presetWeappAttributify, transformerAttributify } = extractorAttributify()export default {presets: [// https://github.com/MellowCo/unocss-preset-weapppresetWeapp(),// attributify autocompletepresetWeappAttributify(),presetIcons(),],shortcuts: [{'border-base': 'border border-gray-500_10','center': 'flex justify-center items-center',},],transformers: [transformerDirectives({enforce: 'pre',}),// https://github.com/MellowCo/unocss-preset-weapp/tree/main/src/transformer/transformerAttributifytransformerAttributify(),// https://github.com/MellowCo/unocss-preset-weapp/tree/main/src/transformer/transformerClasstransformerClass(),],theme: {color: {blue: 'rgba(22, 33, 255, 1)',red: '#e74c3c',sun: '#f1c40f',green: '#16a085',},border: {blue: 'rgba(22, 33, 255, 1)',red: '#e74c3c',sun: '#f1c40f',green: '#16a085',},},
}

2.3 创建vite.config.ts

// vite.config.ts
import { defineConfig } from "vite";
import uni from "@dcloudio/vite-plugin-uni";
import { resolve } from 'path';
import Components from '@uni-helper/vite-plugin-uni-components'
import { WotResolver } from '@uni-helper/vite-plugin-uni-components/resolvers'export default defineConfig(async() => {const UnoCss = await import('unocss/vite').then(i => i.default)return {plugins: [// make sure put it before `Uni()`Components({resolvers: [WotResolver()]}), uni(),UnoCss()],resolve: {alias: {'@': resolve(__dirname, './src'),'@components': resolve(__dirname, './src/components/'),},},}
});

注意:

unocss版本为0.58(不含)以后的版本在 vite.config.ts 中要使用如下的引入方式:

const UnoCss = await import('unocss/vite').then(i => i.default)

unocss版本为0.58(含)之前的版本使用如下方式引入:

import UnoCSS from 'unocss/vite';

2.4 main.ts中引入
最后在main.ts引入uno.css

import 'uno.css';

三、使用

<view class="text-area"><text class="title text-32px color-red">Hello,uni-app</text>
</view>

在这里插入图片描述


http://www.ppmy.cn/server/118250.html

相关文章

Spring Boot-消息队列相关问题

Spring Boot 消息队列相关问题及解决方案 消息队列&#xff08;Message Queue, MQ&#xff09;在分布式系统中的应用越来越广泛&#xff0c;尤其是在解耦系统、异步通信、负载均衡等场景中起到了至关重要的作用。消息队列为不同的服务提供了一种异步通信的机制&#xff0c;使得…

Kali Linux 2024.3 发布,包含新黑客工具

Kali Linux 2024.3 是 Offensive Security 备受推崇的基于 Debian 的发行版的最新版本&#xff0c;专为道德黑客和渗透测试而设计&#xff0c;现已发布。 本次新版本是一个重大更新&#xff0c;包含 11 个新的黑客工具&#xff0c;并专注于幕后更新和优化。 据 Kali Linux 团…

多输入多输出 | Matlab实现DBO-BP蜣螂算法优化BP神经网络多输入多输出预测

多输入多输出 | Matlab实现DBO-BP蜣螂算法优化BP神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现DBO-BP蜣螂算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现DBO-BP蜣螂算法优化BP神经网络…

Chrome谷歌浏览器登录账号next无反应

文章目录 问题描述 我们的Chrome浏览器在更新之后&#xff0c;会出现登录谷歌账号的时候&#xff0c;当你输入你的谷歌邮箱之后&#xff0c;点击 n e x t next next,也就是下一步的时候&#xff0c;页面没有反应&#xff0c;也就是没有跳转到输入密码的页面。 分析 根据logs里…

[Golang] Channel

[Golang] Channel 文章目录 [Golang] Channel什么是Channelchannel的初始化channel的操作双向channel和单向channel为什么有channel有缓冲channel和无缓冲channlechannel做一把锁 从之前我们知道go关键字可以开启一个Goroutine&#xff0c;但是Goroutine之间的通信还需要另一个…

【Elasticsearch系列六】系统命令API

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

828华为云征文|基于华为云Flexus云服务器X实现个人博客搭建

文章目录 ❀前言❀部署前准备❀宝塔安装❀安全组开放❀web访问验证❀安装docker❀安装wordpress❀安全组开放18040端口❀访问博客网址❀发布个人博客❀总结 ❀前言 大家好&#xff0c;我是早九晚十二。 近期华为云推出了最新的华为云Flexus云服务器X&#xff0c;这款云主机在算…

24/9/16 算法笔记 评估模型

评估机器学习模型的性能是一个关键步骤&#xff0c;它可以帮助我们了解模型在实际应用中的表现。以下是一些常用的评估模型的方法&#xff1a; 准确率&#xff08;Accuracy&#xff09;&#xff1a; 最常见的评估指标&#xff0c;表示正确预测的样本数占总样本数的比例。 精确度…