uniapp-styleless-components

A styleless component library for uni-app, providing unstyled Vue 3 components with semantic classNames/styles props for full customization.
400
Install
npm install uniapp-styleless-components
Latest Version:1.1.0
Vue:3
License:MIT
Last Updated:Jul 14, 2026
Links: GitHub  ·  npm
Maintainer: hayden-cn

uniapp-styleless-components

一套无样式(Unstyled / Styleless)的 uni-app Vue 3 组件库。
组件仅提供功能逻辑,基础布局与语义化 DOM 结构,不包含任何视觉样式,让开发者最大程度掌控 UI 表现。

安装

pnpm add uniapp-styleless-components

需要 vue ^3.4.21 和 @dcloudio/uni-app >= 3.0.0 作为 peer 依赖。

快速开始

注册全局配置

在 main.ts 中注册 ConfigProvider,传入页面配置和初始化逻辑,具体使用方式参见全局配置:

import { createConfigProvider } from "uniapp-styleless-components";
import appPagesConfig from "@/pages.json";

export function createApp() {
  const app = createSSRApp(App);

  app.use(createConfigProvider(), {
    pageContainer: {
      appPagesConfig: appPagesConfig,
      init: async () => {},
    },
    // 可选:主题颜色、组件默认值等
    // theme: { color: { primary: "#1890ff" } },
    // button: { size: "medium" },
    // formContainer: { labelPosition: "left" },
    // listContainer: { rowKey: "id", defaultPageSize: 10 },
  });

  return { app };
}

使用组件

组件有两种使用方式:

方式一:直接导入组件:

<template>
  <form-container v-model="formData" :items="items"></form-container>
</template>

<script setup lang="ts">
import { FormContainer } from "uniapp-styleless-components"
</script>

方式二(推荐):使用 easycom 自动注册,无需手动导入。在 pages.json 中添加规则:

{
  "easycom": {
    "custom": {
      "^sc-(.*)": "uniapp-styleless-components/components/$1/$1.vue"
    }
  }
}

配置后即可在页面中直接使用 <sc-button>、<sc-field> 等标签。

完整示例

<template>
  <page-container>
    <sc-button label="提交" type="primary" @click="onSubmit" />

    <sc-row gap="16rpx">
      <sc-field v-model="name" type="text" placeholder="请输入姓名" />
      <sc-field v-model="city" type="option" :field-props="{ options }" />
    </sc-row>

    <sc-list-container v-bind="listProps">
      <template #item="{ item }">
        <view>{{ item.name }}</view>
      </template>
    </sc-list-container>
  </page-container>
</template>

<script setup>
import { useListContainer } from "uniapp-styleless-components";

const name = ref("");
const city = ref("");

const { listProps } = useListContainer({
  getListData: async (pagination, params) => {
    const res = await uni.request({ url: "/api/list", data: { ...pagination, ...params } });
    return { records: res.data.list, pagination: res.data.pagination };
  },
});
</script>

组件列表

组件 说明 文档
Button 按钮 docs/button.md
Row Flex 行布局 docs/row.md
Column Flex 列布局 docs/column.md
Grid CSS Grid 布局 docs/grid.md
Tabs 标签页 docs/tabs.md
Field 字段派发(12 种类型) docs/field.md
FormContainer 表单容器(校验/分组) docs/form-container.md
ListContainer 列表容器(分页/刷新) docs/list-container.md
PageContainer 页面容器(导航栏/安全区/水印) docs/page-container.md
ConfigProvider 配置提供者 docs/config-provider.md

Hooks

Hook 说明 文档
usePageContainer 页面布局信息与路由 docs/hooks.md
useFormContainer 表单数据管理与校验 docs/hooks.md
useListContainer 列表分页管理 docs/hooks.md
useField 字段通用行为 docs/hooks.md
useConfig 获取全局/局部配置 docs/config-provider.md

工具函数

函数 导入路径 说明
toastError / toastSuccess / toastWarning / toastConfirm uniapp-styleless-components/utils Toast 提示
SilenceError uniapp-styleless-components/errors 静默错误类

详见 docs/utils.md。

核心概念

无样式

组件不包含任何 CSS 样式,仅渲染语义化的 HTML 结构。所有视觉效果由开发者自行定义。

语义化 DOM

每个组件定义一组语义化 DOM 节点,可通过 classNames 和 styles 属性独立控制:

<button
  label="提交"
  :classNames="{ root: 'btn', icon: 'btn-icon', label: 'btn-label' }"
  :styles="{ root: { borderRadius: '8rpx' }, label: { fontWeight: 'bold' } }"
/>

CSS 变量主题

通过 ConfigProvider 配置主题颜色,组件内部自动使用 CSS 变量传递色值:

app.use(createConfigProvider(), {
  theme: { color: { primary: "#1890ff", success: "#52c41a", warning: "#faad14", danger: "#ff4d4f" } },
});

导入路径

所有组件通过 easycom 自动注册,无需手动导入。
Hooks、工具函数和类型可按需导入:

// Hooks
import { usePageContainer, useFormContainer, useListContainer, useField } from "uniapp-styleless-components";

// 配置
import { createConfigProvider, useConfig } from "uniapp-styleless-components";

// 工具函数
import { toastError, toastSuccess } from "uniapp-styleless-components";

// 错误类
import { SilenceError } from "uniapp-styleless-components";

// 类型
import type { FormField, FormRuleItem } from "uniapp-styleless-components";

如需 VSCode 组件参数类型提示,推荐配合 uniapp-easycom-types 使用。

文档

每个组件的详细文档见 docs/ 目录:

文档 内容
Button 按钮类型、变体、尺寸、形状、图标、加载、微信开放能力
Row Flex 行布局、对齐、间距、换行
Column Flex 列布局
Grid CSS Grid 布局、行列定义、对齐
Tabs 标签页、图标、禁用、自定义内容
Field 12 种字段类型、属性传递优先级
FormContainer 表单校验、字段组、标签位置、自定义渲染
ListContainer 分页、下拉刷新、无限滚动、查询参数
PageContainer 导航栏、安全区域、水印、加载遮罩
ConfigProvider 全局配置、主题颜色、局部覆盖
Hooks 所有 composables 的完整 API
Utils 工具函数 API

License

MIT

Related Packages

@skiyee/oiyo

以融合AI协作、提升开发体验、降低使用心智为目的 UniApp 增强型工程框架

8,700 39
vite-plugin-css-modules-optimize

A css modules optimization plugin for vue

101,944 4
@tdesign/uniapp

TDesign Component for Uniapp

67,985 1,780
@uni-ku/root

借助 Vite 模拟出虚拟的全局组件,解决 Uniapp 无法使用全局共享组件问题

44,742 174
@uni-ku/bundle-optimizer

uni-app 分包优化插件化实现

36,524 123

Version History

Version Released Vue License
1.1.0 ^3.4.21 MIT
1.0.0 ^3.4.21 MIT