Skip to content

NuxtUI

这是 Nuxt 官方推出的组件库,该组件库主要基于 tailwindcss 和 HeadlessUI 来构建 Vue 组件。

TailwindCSS#

这是一个原子类的 css 库,也是当年最火的项目。一句话概括,那就是将常用的样式声明写成了类的形式,之后基本不用再写单独的样式声明,只需要在 html 标签上挂类就好了。

在 TailwindCSS 这种原子类流行之前,比较流行 bootstrap 这样的样式库,同样也是提供了很多样式类。例如在 bootstrap 中书写一个 button 按钮:

<button class="btn btn-primary">点击</button>

但是如果是使用 tailwindcss 来写,则是这样的:

<button
class="bg-blue-500 hover:bg-blue-600 focus:bg-blue-700 focus:ring-4 focus:ring-blue-300 focus:ring-opacity-50 text-white font-bold py-2 px-4 rounded"
>
点击
</button>

大家可以去 TailwindCSS 官网 看一下这个库所提供的原子类,每个样式类真的就只有一两条样式声明。

思考🤔:为什么现在流行这种 css 解决方案?特别是刚开始接触 tailwindcss 的人,并没觉得这个有多特别,怎么一下子就火了呢?

现代前端框架都有一个特点:数据状态来驱动视图

<template>
<div :class="test"></div>
</template>
<script setup>
const test = ref({
a: true,
b: true,
c: false,
})
</script>

HeadlessUI#

HeadlessUI,其实也是一个组件库。早期开发的时候,可能更多的接触的是诸如 ElementUI、Antd 这一类的组件库,这一类组件库我们可以称之为传统组件库。那么传统组件库有什么问题呢?

  1. 样式难以重置
  2. 需要等待官方的维护
  3. 历史包袱重

正因为这些遗留的问题存在,所以逐渐出现了 Headless 类型的组件库。所谓 Headless,指的是将用户界面(UI)的逻辑与显示层(视图层)解耦的组件库或工具。这类工具通常只提供功能逻辑和无样式的原始 html 结构,而不包含具体的视觉样式,让开发者可以完全自由地定制外观。其特点如下:

  1. 无样式
  2. 高可定制性(主要指的是样式方面)
  3. 专注于功能逻辑

常见的 Headless 组件库有:

NuxtUI#

有了前面的前置知识,接下来要理解 NuxtUI 就非常简单了。正如 NuxtUI 官网的介绍:

Nuxt UI is a module that provides a set of Vue components and composables built with Tailwind CSS and Headless UI to help you build beautiful and accessible user interfaces.

NuxtUI 其实就是基于 TailwindCSS 和 HeadlessUI 这两个目前所流行的技术所构建的组件库,分为两套:

这里我们看一下 NuxtUI 就好了。

如果是一个已有的项目,那么通过下面的命令来添加 NuxtUI:

Terminal window
npx nuxi@latest module add ui

在 nuxt.config.ts 中配置:

export default defineNuxtConfig({
modules: ['@nuxt/ui'],
})

如果是要初始化一个新项目,那么可以通过命令:

Terminal window
npx nuxi@latest init -t ui