jiangjiu / blog-md

前端/健身 思考与笔记~
https://github.com/jiangjiu/blog-md/issues
86 stars 6 forks source link

unocss使用指南 #65

Open jiangjiu opened 1 year ago

jiangjiu commented 1 year ago

介绍

Unocss是一个具有高性能且极具灵活性的即时原子化 CSS 引擎。可以通过预设等配置达到和 Tailwind/Windi 等原子化框架相同的行为。此外,uno具有性能更好,更灵活等优势,参考原子化CSS框架对比 在使用unocss来写原子化css之前,除了阅读unocss文档,同时建议阅读tailwindcss或windicss的文档,因为这两个框架文档更完善,从中能学习到原子化css的更多知识。 📖【unocss】Github Readme 📖【unocss】重新构想原子化 CSS 📖【tailwindcss】官方文档 📖【windicss】官方文档

目标

基础目标:

开发前准备

插件

vscode编译器提供了unocss的提示插件,安装后鼠标悬停在类名上会展示编译后的css代码。

image

但是,目前unocss插件还不支持预设类名的自动补全,按照这个issue讨论的方法,可以在项目中添加tailwind.config.js配置文件,再安装tailwindcss的插件,可以蹭一下tailwindcss的自动补全提示(因为unocss提供的预设是Tailwind / Windi CSS 的超集,所以一开始不熟悉预设类名有哪些时,可以去这俩框架的文档中查找并使用)。

image

tailwind.config.js这个配置文件是为了开发更便捷,与项目配置并无关系,目前没有加入到脚手架中,如果有需要可以自行引入。

配置文件

import {
    defineConfig,
    presetUno,
    presetAttributify,
} from 'unocss';
import transformerVariantGroup from '@unocss/transformer-variant-group';
import transformerCompileClass from '@unocss/transformer-compile-class';

export default defineConfig({
    presets: [
        presetAttributify(), // 启用属性化模式
        presetUno(), // 启用常见框架的预设
    ],
    transformers: [
        transformerVariantGroup(), // 启用变体组合
        transformerCompileClass(), // 启用类名压缩
    ],
    // 主题扩展
    theme: {
        fontFamily: { // 把用到的fontFamily放这里
            'Barlow': 'Barlow Bold',
            'FZLTCHJW': 'FZLTCHJW',
        },
        colors: {
            'yellow': {
                light: '#fffbd3',
                DEFAULT: '#fffacd',
            },
        },
    },
    // 自定义层级顺序
    layers: {
        'my-layer': 10,
        default: 1,
        'rules': -10,
        'shortcuts': -20,
    },
    // 自定义规则
    rules: [
        // 静态规则
        ['r-bg-red', { background: '#ff0000' }],
        // 动态规则
        [/^m-(\d+)$/, ([, d]) => ({ margin: `${d / 4}rem` }), {layer: 'my-layer'}],
    ],
    // 快捷样式组合
    shortcuts: [
        // 静态别名
        {
            'bg-common': 'bg-[length:100%] bg-no-repeat',
            'flex-center': 'flex justify-center items-center',
            'translate-center': 'left-50% top-50% translate--50%',
        },
        // dynamic shortcuts
        [/^text-gradient-to-(.*)$/, ([, c]) => `bg-gradient-to-${c} bg-clip-text text-transparent`],
    ],
});

配置项介绍

theme

通过配置可以扩展主题,你可以在配置中制定主题属性,制定的属性将被合并到默认主题中。 常见的width、height、colors、fontSize等均支持扩展主题(不是所有属性都支持,例如backgrounfSize不支持),更多主题属性参见文档:主题属性文档 theme: { // ... colors: { 'veryCool': '#0000ff', // 新增一个颜色 text-veryCool bg-veryCool 都可以应用该颜色 'red': { 500: '#fd9000', // 覆盖默认red-500的颜色 } }, } ⚠️注意 不是所有属性都支持扩展主题,例如backgrounfSize就不支持。所以实现background-size: 100% 需要[]。即: bg-[length:100%]

rules

尽管预设提供了大部分常见的基础实用类名,但并不能满足更多复杂的样式和需求,可以使用rules自定义更多实用类名规则,简化css的使用。

shortcuts

将复用度很高的实用类名进行组合,通过快捷别名进行使用。

layers

css生成顺序会影响其生效优先级,通过layer控制层级顺序。

Rules Merging

unocss会将同一层级,相同内容的类名合并生成,以减小css体积。

各种css优先级

!important > 内联样式 > 内部样式表 > 导入样式表 > unocss 若不自定义layer,unocss中各项优先级为:rules > 预设实用类名(utilities) > shortcuts

lmq352489099 commented 1 year ago

各种css优先级 !important > 内联样式 > 内部样式表 > 导入样式表 > unocss

这个优先级是在哪里设置的,还是内部就是默认这样子了