• 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

    1. import { defineConfig } from 'vite'
    2. import vue from '@vitejs/plugin-vue'
    3. import unocss from 'unocss/vite'
    4. // https://vitejs.dev/config/
    5. export default defineConfig({
    6. plugins: [vue(), unocss()]
    7. })

    Copy

    2.修改main.ts

    1. import { createApp } from 'vue'
    2. /** 重置样式 这里引入自定义的重置样式也可 */
    3. import '@unocss/reset/tailwind.css'
    4. /**
    5. * 项目内的样式,
    6. * 注意:最好放在重置样式后,uno.css前
    7. */
    8. import './style.css'
    9. /** 引入uno.css,不引入不生效 */
    10. import 'uno.css'
    11. import App from './App.vue'
    12. 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

    1. import { defineConfig, presetAttributify, presetUno, presetIcons } from 'unocss'
    2. export default defineConfig({
    3. presets: [presetUno(), presetAttributify(), presetIcons({scale: 1.2, warn: true})],
    4. shortcuts: [
    5. 'wh-full': 'w-full h-full',
    6. 'flex-center': 'flex justify-center items-center',
    7. 'flex-col-center': 'flex-center flex-col',
    8. 'flex-x-center': 'flex justify-center',
    9. 'flex-y-center': 'flex items-center',
    10. 'i-flex-center': 'inline-flex justify-center items-center',
    11. 'i-flex-x-center': 'inline-flex justify-center',
    12. 'i-flex-y-center': 'inline-flex items-center',
    13. 'flex-col': 'flex flex-col',
    14. 'flex-col-stretch': 'flex-col items-stretch',
    15. 'i-flex-col': 'inline-flex flex-col',
    16. 'i-flex-col-stretch': 'i-flex-col items-stretch',
    17. 'flex-1-hidden': 'flex-1 overflow-hidden',
    18. /***** grid布局 *****/
    19. 'grid-column-2': 'grid grid-cols-2 grid-rows-none',
    20. 'grid-column-3': 'grid grid-cols-3 grid-rows-none',
    21. 'grid-column-4': 'grid grid-cols-4 grid-rows-none',
    22. 'grid-column-5': 'grid grid-cols-5 grid-rows-none',
    23. /**定位相关**/
    24. 'absolute-lt': 'absolute left-0 top-0',
    25. 'absolute-lb': 'absolute left-0 bottom-0',
    26. 'absolute-rt': 'absolute right-0 top-0',
    27. 'absolute-rb': 'absolute right-0 bottom-0',
    28. 'absolute-tl': 'absolute-lt',
    29. 'absolute-tr': 'absolute-rt',
    30. 'absolute-bl': 'absolute-lb',
    31. 'absolute-br': 'absolute-rb',
    32. 'absolute-center': 'absolute-lt flex-center wh-full',
    33. 'fixed-lt': 'fixed left-0 top-0',
    34. 'fixed-lb': 'fixed left-0 bottom-0',
    35. 'fixed-rt': 'fixed right-0 top-0',
    36. 'fixed-rb': 'fixed right-0 bottom-0',
    37. 'fixed-tl': 'fixed-lt',
    38. 'fixed-tr': 'fixed-rt',
    39. 'fixed-bl': 'fixed-lb',
    40. 'fixed-br': 'fixed-rb',
    41. 'fixed-center': 'fixed-lt flex-center wh-full',
    42. 'nowrap-hidden': 'whitespace-nowrap overflow-hidden',
    43. 'ellipsis-text': 'nowrap-hidden text-ellipsis',
    44. 'transition-base': 'transition-all duration-300 ease-in-out'
    45. ],
    46. rules: [
    47. [/^bc-(.+)$/, ([, color]) => ({ 'border-color': `#${color}` })],
    48. [/^m-(\d+)$/, ([, d]) => ({ margin: `${d / 4}rem` })],
    49. [/^p-(\d+)$/, (match) => ({ padding: `${match[1] / 4}rem` })],
    50. ['card-shadow', { 'box-shadow': '0 1px 2px -2px #00000029, 0 3px 6px #0000001f, 0 5px 12px 4px #00000017' }],
    51. ],
    52. theme: {
    53. colors: {
    54. //primary: 'var(--primary-color)',
    55. //dark_bg: 'var(--dark-bg)',
    56. },
    57. },
    58. })

    Copy

    使用UnoCSS

    dd285202311071509458461.png

    预览效果

    d4574202311071510116845.png

    插件推荐 (UnoCSS)

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

    effee202311071510583870.png

    总结

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

  • 相关阅读:
    利用代码生成工具快速生成基于SqlSugar框架的Winform界面项目
    SpringSecurity 完整认证流程
    【17 > 分布式接口幂等性】1. 概述与接口重试的问题
    web期末作业设计网页 HTML+CSS+JavaScript仿王者荣耀游戏新闻咨询(网页设计期末课程设计)
    【SpringBoot从入门到精通】第四章 Springboot配置文件
    MongoDB-快速上手MongoDB命令行的一些简单操作
    Spring Security 核心解读(一)整体架构
    【深度学习】Fooocus-MRE docker镜像 CUDA11.8
    Vue2+Vue3
    tsne可视化cnn模型
  • 原文地址:https://blog.csdn.net/luxiaol/article/details/134402556