探索未来:CSS引擎的前沿技术
发表时间: 2022-10-14 22:33
windi css 是一个实用的 css 框架,能够帮助前端快速搭建项目页面。相较于知名的 tailwind css,其提供更快的加载速度和热更新响应。
而脱胎于 windi css 的 unocss - 一个具有高性能且极具灵活性的即时原子化 css 引擎,将会成为 windi css v4 版本的引擎。unocss 本身非常具有潜力,有望成为 css 未来的一大基座。
unocss 具有多项超前优势:
// 静态化规则rules: [ ['m-1', { margin: '0.25rem' }]]// 动态化规则rules: [ [/^m-(\d+)$/, ([, d]) => ({ margin: `${d / 4}rem` })], [/^p-(\d+)$/, (match) => ({ padding: `${match[1] / 4}rem` })],]
在使用时:
<div class="m-100"> <button class="m-3"> <icon class="p-5" /> My Button </button></div>
生成的 css:
.m-100 { margin: 25rem; }.m-3 { margin: 0.75rem; }.p-5 { padding: 1.25rem; }
variants: [ // 支持所有规则的 `hover:` { match: s => s.startsWith('hover:') ? s.slice(6) : null, selector: s => `${s}:hover`, }, // 支持 `!` 前缀,使规则优先级更高 { match: s => s.startsWith('!') ? s.slice(1) : null, rewrite: (entries) => { // 在所有 CSS 值中添加 ` !important` entries.forEach(e => e[1] += ' !important') return entries }, }],
可以将自己的自定义规则和可变修饰打包成预设,与他人分享,或是使用 UnoCSS 作为引擎创建你自己的原子化 CSS 框架。
对于冗长可读性差的 css class:
<button class="bg-blue-400 hover:bg-blue-500 text-sm text-white font-mono font-light py-2 px-4 rounded border-2 border-blue-200 dark:bg-blue-500 dark:hover:bg-blue-600"> Button</button>
转化成:
<button bg="blue-400 hover:blue-500 dark:blue-500 dark:hover:blue-600" text="sm white" font="mono light" p="y-2 x-4" border="2 rounded blue-200"> Button</button>
纯 CSS 的图标,不需要任何 JavaScript。
<!-- A basic anchor icon from Phosphor icons --><div class="i-ph-anchor-simple-thin" /><!-- An orange alarm from Material Design Icons --><div class="i-mdi-alarm text-orange-400 hover:text-teal-400" /><!-- A large Vue logo --><div class="i-logos-vue text-3xl" /><!-- Sun in light mode, Moon in dark mode, from Carbon --><button class="i-carbon-sun dark:i-carbon-moon" /><!-- Twemoji of laugh, turns to tear on hovering --><div class="i-twemoji-grinning-face-with-smiling-eyes hover:i-twemoji-face-with-tears-of-joy" />
<template> <div class="m-2 rounded"><slot></div><template><!-- 以下内容将被注入 bundler 中 --><style scoped>.m-2{margin:0.5rem;}.rounded{border-radius:0.25rem;}</style>
UnoCSS 可以比 Tailwind 的 JIT 引擎快 200 倍。
目前 UnoCSS 已获得 7.2k star,可谓是 css 的明日之星,值得学习!
github 地址:
https://github.com/unocss/unocss#custom-variants
文档地址:
https://github.com/unocss/unocss#custom-variants