UnoCss(原子化css引擎) 让你的开发更轻松愉快

什么是原子化CSS,UnoCSS又是什么,对此有疑问的推荐看下antfu的这篇文章——重新构想原子化 CSS (antfu.me) 相信看完这篇文章的你也会跟我一样热衷于UnoCSS.

介绍

今天介绍一个CSS开发利器 UnoCSS , 是一个具有高性能且极具灵活性的即时原子化 CSS 引擎,具有按需加载的特性,相信使用过 Tailwind CSS,Windi CSS ,等CSS框架的同学对CSS原子化这个概念都不会陌生,原子化 CSS 是一种 CSS 的架构方式,它倾向于小巧且用途单一的 class,并且会以视觉效果进行命名。

079b8202311071502346227.png

对比

unocss 的作者是Anthony Fu,是 Vite 团队的成员,也是 Vitesse (Vite 社区最受欢迎的起手模板之一) 的作者。Anthony Fu 在开发Vitesse是使用 Tailwind CSS 作为 Vitesse 的默认 UI 框架。但由于 Tailwind 生成了数 MB 的 CSS,使得加载与更新 CSS 成为了整个 Vite 应用的性能瓶颈。后来作者发现了Windi CSS,相比于Tailwind CSS 具有按需加载,零依赖等特性。在CSS文件打包的大小与加载速度上得到了很大的提升.

使用和配置

UnoCSS 是一个引擎,而非一款框架,因为它并未提供核心工具类,所有功能可以通过预设和内联配置提供。

    • 规则(Rules) - 定义原子 CSS 实用程序
    • 预设(Presets) - 常见用例的预定义配置。
    • 快捷方式(Shortcuts) - 将多个规则组合成一个简写。
    • 主题(Theme) - 定义主题变量。
    • 变体(Variants) - 将自定义约定应用于规则。
    • 转换器(Transformers) - 将转换器编码为用户源代码以支持约定。
    • 提取器(Extractors) - 定义提取实用程序的位置和方式。
    • 预检(Preflights) - 定义全局 CSS 规则。
    • 层(Layers) - 定义每个实用程序层的顺序。
    • 自动完成(Presets) - 定义自定义自动完成建议。

准备

首先,使用 vite 创建一个最基础的vue模板

pnpm create vite

Copy

安装依赖 unocss,@unocss/reset

pnpm i unocss,@unocss/reset

Copy

如果需要使用 UnoCSS 的图标预设,还需要安装@iconify/json

pnpm i @iconify/json

Copy

如果需要使用 UnoCSS 的深色模式,最好再安装一下@vueuse/core,方便切换深色模式

pnpm i @vueuse/core

Copy

集成 UnoCSS

1.修改vite.config.ts,添加 unocss plugin

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import unocss from 'unocss/vite'// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(), unocss()]
})

Copy

2.修改main.ts

import { createApp } from 'vue'/** 重置样式 这里引入自定义的重置样式也可 */
import '@unocss/reset/tailwind.css'
/** *  项目内的样式,*  注意:最好放在重置样式后,uno.css前*/
import './style.css'
/** 引入uno.css,不引入不生效 */
import 'uno.css'import App from './App.vue'createApp(App).mount('#app')

Copy

注意:不管是UnoCSS还是tailwindcss、windicss,默认 4单位 = 1rem,即 1单位 = 1/4rem,而 rem 是相对于html的 font-size 来计算的,一般来说大部分浏览器的html默认 font-size 为 16px,即 1rem = 16px,也就是说 Unocss 的1单位换算成 px 就是 4px,这种方式没什么问题,但对于习惯了使用px计算的人来说,每次都要心算一遍要写多少单位就略显麻烦了。那么有没有办法让 unocss 的 1单位=1px 了,这样就没有心算成本了,答案是当然有:由公式 1单位 = 0.25 * ${html font-size} = 1px 可知:将 html 的 font-size 应该为 4px 即可

3.新增unocss.config.ts

import { defineConfig, presetAttributify, presetUno, presetIcons } from 'unocss'export default defineConfig({presets: [presetUno(), presetAttributify(), presetIcons({scale: 1.2, warn: true})],shortcuts: ['wh-full': 'w-full h-full','flex-center': 'flex justify-center items-center','flex-col-center': 'flex-center flex-col','flex-x-center': 'flex justify-center','flex-y-center': 'flex items-center','i-flex-center': 'inline-flex justify-center items-center','i-flex-x-center': 'inline-flex justify-center','i-flex-y-center': 'inline-flex items-center','flex-col': 'flex flex-col','flex-col-stretch': 'flex-col items-stretch','i-flex-col': 'inline-flex flex-col','i-flex-col-stretch': 'i-flex-col items-stretch','flex-1-hidden': 'flex-1 overflow-hidden',/***** grid布局 *****/'grid-column-2': 'grid grid-cols-2 grid-rows-none','grid-column-3': 'grid grid-cols-3 grid-rows-none','grid-column-4': 'grid grid-cols-4 grid-rows-none','grid-column-5': 'grid grid-cols-5 grid-rows-none',/**定位相关**/'absolute-lt': 'absolute left-0 top-0','absolute-lb': 'absolute left-0 bottom-0','absolute-rt': 'absolute right-0 top-0','absolute-rb': 'absolute right-0 bottom-0','absolute-tl': 'absolute-lt','absolute-tr': 'absolute-rt','absolute-bl': 'absolute-lb','absolute-br': 'absolute-rb','absolute-center': 'absolute-lt flex-center wh-full','fixed-lt': 'fixed left-0 top-0','fixed-lb': 'fixed left-0 bottom-0','fixed-rt': 'fixed right-0 top-0','fixed-rb': 'fixed right-0 bottom-0','fixed-tl': 'fixed-lt','fixed-tr': 'fixed-rt','fixed-bl': 'fixed-lb','fixed-br': 'fixed-rb','fixed-center': 'fixed-lt flex-center wh-full','nowrap-hidden': 'whitespace-nowrap overflow-hidden','ellipsis-text': 'nowrap-hidden text-ellipsis','transition-base': 'transition-all duration-300 ease-in-out'],rules: [[/^bc-(.+)$/, ([, color]) => ({ 'border-color': `#${color}` })],[/^m-(\d+)$/, ([, d]) => ({ margin: `${d / 4}rem` })],[/^p-(\d+)$/, (match) => ({ padding: `${match[1] / 4}rem` })],['card-shadow', { 'box-shadow': '0 1px 2px -2px #00000029, 0 3px 6px #0000001f, 0 5px 12px 4px #00000017' }],],theme: {colors: {//primary: 'var(--primary-color)',//dark_bg: 'var(--dark-bg)',},},
})

Copy

使用UnoCSS

dd285202311071509458461.png

预览效果

d4574202311071510116845.png

插件推荐 (UnoCSS)

此插件非常强大,不仅有输入提示,并且还可以鼠标悬浮显示编译后的css样式,对自定义的 shortcuts、rules 和 colors 都生效哦, 效果如下图

effee202311071510583870.png

总结

UnoCSS 绝对是我用过的最好用的原子化CSS了,没有之一,它设计很优雅, 足够轻,用着非常爽,并且它对 tailwindcss 和 windicss 的写法做了兼容,你甚至可以直接对着 tailwindcss 文档写 UnoCSS,过渡成本无限接近 0。可能你刚开始写原子化CSS的时候会有点痛苦,但请相信我,写熟了之后你一定会直呼:真香!

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

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

相关文章

《洛谷深入浅出基础篇》——P3405 citis and state ——哈希表

上链接:P3405 [USACO16DEC] Cities and States S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P3405 上题干: 题目描述 Farmer John 有若干头奶牛。为了训练奶牛们的智力,Farmer John 在谷仓的墙上放了一…

ceph学习笔记

ceph ceph osd lspoolsrbd ls -p testpool#查看 ceph 集群中有多少个 pool,并且每个 pool 容量及利 用情况 rados dfceph -sceph osd tree ceph dfceph versionsceph osd pool lsceph osd crush rule dumpceph auth print-key client.adminceph orch host lsceph crash lsceph…

python计算脚长 青少年电子学会等级考试 中小学生python编程等级考试一级真题答案解析2022年9月

目录 python字符串输出 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python字符串输出 2022年9月 python编程等级考试一级编程…

基于Zemax的高能激光发射系统的扩束系统设计

关键词:高功率激光发射系统;扩束系统 1 引言 高功率激光发射系统是强激光空间传输系统中不可缺少的装置。对高功率激光发射系统的研究一直是激光应用领域的关键技术问题。高功率激光发射系统通常由准直系统、导光光路系统和扩束系统组成,光学系统要求具…

【docker】Docker网络与iptables

Docker能为我们提供很强大和灵活的网络能力,很大程度上要归功于与iptables的结合。在使用时,你可能没有太关注到 iptables在其中产生的作用,这是因为Docker已经帮我们自动的完成了相关的配置。 iptables在Docker中的应用主要是用于网络流量控…

三十二、W5100S/W5500+RP2040树莓派Pico<UPnP示例>

文章目录 1 前言2 简介2 .1 什么是UPnP?2.2 UPnP的优点2.3 UPnP数据交互原理2.4 UPnP应用场景 3 WIZnet以太网芯片4 UPnP示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 随着智能家居、物联网等…

Aerial for Mac: 沉浸在高清鸟瞰的世界,让你的屏幕焕发新生

你是否已经厌倦了那些平淡无奇的屏保程序?是否希望你的Mac屏幕能更生动、更有趣?如果你对此抱有强烈的期待,那么Aerial for Mac绝对会是你期待已久的解决方案。 Aerial for Mac是一款独具特色的高清屏保程序,它以鸟瞰的视角带你领…

第八篇 基于JSP 技术的网上购书系统——商品信息查看、我的购物车、结算中心功能实现(网上商城、仿淘宝、当当、亚马逊)

目录 1.商品信息查看 1.1功能说明 1.2界面设计 1.3 处理流程 1.4数据来源和算法 1.4.1数据来源 1.4.2查询条件 1.4.3表间关系 1.4.4相关sql实例 2.我的购物车 2.1功能说明 2.2界面设计 2.3处理流程 2.4 数据来源和算法 3.结算中心 3.1功能说明 3.2界…

Flume学习笔记(3)—— Flume 自定义组件

前置知识: Flume学习笔记(1)—— Flume入门-CSDN博客 Flume学习笔记(2)—— Flume进阶-CSDN博客 Flume 自定义组件 自定义 Interceptor 需求分析:使用 Flume 采集服务器本地日志,需要按照日志…

人工智能Keras的第一个图像分类器(CNN卷积神经网络的图片识别)

CNN卷积神经网络是人工智能的开端,CNN卷积神经网络让计算机能够认识图片,文字,甚至音频与视频。CNN卷积神经网络的基础知识,可以参考:CNN卷积神经网络 LetNet体系结构是卷积神经网络的“第一个图像分类器”。最初设计用于对手写数字进行分类,上期文章我们分享了如何使用k…

【LeetCode刷题-滑动窗口】-- 795.区间子数组个数

795.区间子数组个数 class Solution {public int numSubarrayBoundedMax(int[] nums, int left, int right) {return lessEqualsThan(nums,right) - lessEqualsThan(nums,left - 1);}private int lessEqualsThan(int[] nums,int k){int len nums.length;int res 0,left 0,ri…

基于单片机智能液位水位监测控制系统设计

**单片机设计介绍, 基于单片机智能液位水位监测控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能液位水位监测控制系统可以用来检测和控制液位的高低,并可以用于水泵的控制和自…