start
2025年,回首过往,思绪如窗前的苍蝇,嗡嗡作响。此刻,我打开记忆的窗,倒一倒脑子,看看那些岁月里留下了什么。
个人理解
- UnoCSS 原子引擎的作用:在大型项目维护中,其核心价值在于让公共样式更加规范,极大地降低了对人员专业能力的要求。
- 旧模式之困:以往,前端项目依赖全局公共样式文件进行统一管理。然而,在前端架构相对松散的背景下,这种方式往往导致全局样式利用率低下,样式代码散乱无章,对开发人员的专业素养提出了极高要求。
- 类比思考:相比之下,Java 架构的管理则严格得多,即使是创建一个简单的 “Hello World” 项目,也需要完整安装整个架构才能启动;这种严谨性在前端领域并不常见。
- 前端架构之变:前端领域中,Angular 架构与 Java 架构类似,要求严格且完整;而 Vue、React 以及其他新兴架构则更倾向于渐进式、逐步增长的方式,这种方式更符合前端开发的实际需求。
- 前端渐进的根本:前端开发的核心在于文件的轻量化,因为前端文件需要通过网络传输,越小的文件才能实现更快的加载速度。这与后端架构有着天然的区别,后端文件仅在服务器运行,无需考虑网络传输的限制。
简介
UnoCSS 是一个高性能的原子化 CSS 引擎,由 Vite 团队成员 Anthony Fu 开发。它具有以下特点:
- 高性能:采用预设扫描和即时生成方式,按需生成样式,无需打包未使用的样式。
- 可定制性强:完全可定制的原子化 CSS 引擎,支持自定义规则、快捷方式、变体等。
- 体积小:按需生成,体积小。
- 灵活:支持属性化模式、纯 CSS 图标等特性。
快速体验
官方提供的 CDN 访问缓慢、异常,我自己整理提供一份,可以自取,进行快速体验、验证和研究!
基础用法
文字样式
<div class="text-4xl font-600 font-italic underline lh-tight">
文字
</div>
text-4xl:设置字体大小为4xlfont-600:设置字体粗细为600font-italic:设置字体为斜体underline:设置下划线lh-tight:设置行高为紧凑
边框样式
<div class="border-2 rd-2xl border-dashed inline-block lh-10 text-4xl lh-20">
文字
</div>
border-2:设置边框宽度为2rd-2xl:设置圆角为2xlborder-dashed:设置边框为虚线inline-block:设置为行内块元素lh-10:设置行高为10lh-20:设置行高为20
边距样式
<div class="p-x-4 py-8 mb-2 mt-3 inline-block border-2">
边距
</div>
p-x-4:设置水平内边距为4py-8:设置垂直内边距为8mb-2:设置下外边距为2mt-3:设置上外边距为3
宽高样式
<div class="w-40 h-30 border-2 py-2">
<div class="h-full w-screen border-dashed border-1">宽高</div>
</div>
w-40:设置宽度为40h-30:设置高度为30h-full:设置高度为父元素的100%w-screen:设置宽度为屏幕宽度border-dashed:设置边框为虚线border-1:设置边框宽度为1
颜色样式
<div class="w-40 h-30 bg-stone p-2">
<div class="bg-pink op-30 mb-2">背景</div>
<div class="bg-blue color-green p-2">颜色</div>
</div>
bg-stone:设置背景颜色为stonebg-pink:设置背景颜色为pinkop-30:设置不透明度为30%color-green:设置字体颜色为green
Flex 布局
<div class="flex justify-center items-center">
<div class="w-20 h-20 bg-red-500"></div>
<div class="w-20 h-20 bg-green-500"></div>
</div>
flex:启用Flexbox布局justify-center:水平居中对齐items-center:垂直居中对齐
111
<div class="center">
<div class="w-20 h-20 bg-red-500"></div>
<div class="w-20 h-20 bg-green-500"></div>
</div>
w-20:同样设置宽度为20单位h-20:同样设置高度为20单位bg-green-500:设置背景颜色为绿色(具体颜色值由CSS框架定义,通常是某种绿色的深浅变体)
高级用法
响应式设计
<div class="sm:text-left md:text-center lg:text-right">
响应式文本对齐
</div>
sm:text-left:在小屏幕上文本左对齐md:text-center:在中等屏幕上文本居中对齐lg:text-right:在大屏幕上文本右对齐
动画效果
<div class="animate-bounce animate-duration-2s">
弹跳动画
</div>
animate-bounce:启用弹跳动画animate-duration-2s:设置动画持续时间为2秒
属性化模式
<button bg="blue-400 hover:blue-500" text="sm white" font="mono light" p="y-2 x-4" border="2 rounded blue-200">
Submit
</button>
bg="blue-400 hover:blue-500":设置背景颜色为blue-400,悬停时为blue-500text="sm white":设置字体大小为小,字体颜色为白色font="mono light":设置字体为等宽,字体粗细为轻p="y-2 x-4":设置垂直内边距为2,水平内边距为4border="2 rounded blue-200":设置边框宽度为2,边框为圆角,边框颜色为blue-200
UnoCSS 的适用场景
- 快速开发:适用于需要快速搭建界面的场景,例如简单的官网页面、响应式H5页面、业务复杂度低的中后台系统
- 高性能需求:特别适合大型应用或对构建速度、性能有较高要求的项目。按需生成 CSS 的方式可以显著减少最终打包体积
- 高度定制化:对于需要自定义设计系统或有特殊样式需求的项目,UnoCSS 的灵活性和定制能力能够提供更好的支持
推荐程度
- 高推荐:如果你的项目对性能优化有较高要求,或者需要高度定制化的样式,且团队能够接受一定的学习成本,那么推荐使用 UnoCSS
- 中等推荐:对于中等复杂度的项目,尤其是团队对原子化 CSS 有一定了解的情况下,UnoCSS 也是一个不错的选择
- 低推荐:如果项目非常复杂,需要频繁的组件复用和团队协作,且对性能优化要求不高,那么可能更适合使用传统的组件化框架
与 ElementUI 及 Tailwind CSS 的对比
与 ElementUI 对比
- ElementUI:更适合快速开发且需要完整组件库支持的项目,尤其是Vue项目;它提供了丰富的预定义组件和统一的样式体系,适合团队协作
- UnoCSS:更适合需要高度定制化样式、对性能有较高要求的项目;虽然没有内置的组件库,但可以通过原子类组合实现复杂样式
与 Tailwind CSS 对比
- Tailwind CSS:社区庞大,文档和资源丰富,适合团队开发和快速构建设计系统;它的类名标准化,易于理解和使用
- UnoCSS:性能更优,按需生成 CSS,文件体积更小;提供了更高的灵活性和定制能力,但社区相对较小
总结
选择建议
- 如果你更关注开发速度和团队协作,且需要丰富的组件库支持,ElementUI 或 Tailwind CSS 可能是更好的选择
- 如果你更关注性能优化和高度定制化,且能够接受一定的学习成本,UnoCSS 是一个值得尝试的工具
市场现状
目前,Tailwind CSS 在原子化 CSS 框架中占据主导地位,拥有更成熟的社区和丰富的资源。但 UnoCSS 凭借其高性能和灵活性,在一些特定场景下具有独特的优势
end
恳请诸位同仁、挚友、兄弟姐妹不吝赐教,多多指点!