@fish-render/descriptions
Version:
Fish Render descriptions component for Vue 3
286 lines (222 loc) • 7.31 kB
Markdown
Vue 3 描述列表组件,支持响应式布局和多种样式引入方式。
```bash
npm install @fish-render/descriptions
yarn add @fish-render/descriptions
pnpm add @fish-render/descriptions
```
当你引入组件时,样式会自动加载:
```vue
<template>
<Descriptions title="用户信息" :column="3">
<DescriptionsItem label="姓名">张三</DescriptionsItem>
<DescriptionsItem label="年龄">25</DescriptionsItem>
<DescriptionsItem label="职业">工程师</DescriptionsItem>
</Descriptions>
</template>
<script setup>
import { Descriptions, DescriptionsItem } from '@fish-render/descriptions'
// 样式会自动加载,无需额外引入
</script>
```
如果你想要手动控制样式的引入时机:
```vue
<template>
<Descriptions title="用户信息" :column="3">
<DescriptionsItem label="姓名">张三</DescriptionsItem>
<DescriptionsItem label="年龄">25</DescriptionsItem>
<DescriptionsItem label="职业">工程师</DescriptionsItem>
</Descriptions>
</template>
<script setup>
import { Descriptions, DescriptionsItem } from '@fish-render/descriptions'
</script>
<style>
/* 手动引入样式 */
@import '@fish-render/descriptions/style.css';
</style>
```
```javascript
import { createApp } from 'vue'
import App from './App.vue'
import { Descriptions, DescriptionsItem } from '@fish-render/descriptions'
import '@fish-render/descriptions/style.css'
const app = createApp(App)
app.component('Descriptions', Descriptions)
app.component('DescriptionsItem', DescriptionsItem)
app.mount('#app')
```
```javascript
import { createApp } from 'vue'
import App from './App.vue'
import DescriptionsPlugin from '@fish-render/descriptions'
const app = createApp(App)
app.use(DescriptionsPlugin)
app.mount('#app')
```
```vue
<template>
<Descriptions title="用户信息">
<DescriptionsItem label="姓名">张三</DescriptionsItem>
<DescriptionsItem label="年龄">25</DescriptionsItem>
<DescriptionsItem label="职业">工程师</DescriptionsItem>
<DescriptionsItem label="邮箱">zhangsan@example.com</DescriptionsItem>
</Descriptions>
</template>
```
```vue
<template>
<Descriptions title="产品信息" :column="{ xs: 1, sm: 2, md: 3, lg: 4 }">
<DescriptionsItem label="产品名称">Vue 3 组件库</DescriptionsItem>
<DescriptionsItem label="版本">1.0.0</DescriptionsItem>
<DescriptionsItem label="作者">Fish Render</DescriptionsItem>
<DescriptionsItem label="许可证">MIT</DescriptionsItem>
</Descriptions>
</template>
```
```vue
<template>
<Descriptions title="项目详情" layout="vertical" :gutter="[16, 24]" label-width="120px">
<DescriptionsItem label="项目名称" :span="2">Fish Render</DescriptionsItem>
<DescriptionsItem label="技术栈">Vue 3 + TypeScript</DescriptionsItem>
<DescriptionsItem label="描述" :span="3">
一个现代化的 Vue 3 组件库,提供丰富的 UI 组件和优秀的开发体验
</DescriptionsItem>
</Descriptions>
</template>
```
```vue
<template>
<Descriptions title="自定义样式示例" class="custom-descriptions">
<DescriptionsItem label="标签" label-class="custom-label"> 内容 </DescriptionsItem>
<DescriptionsItem label="标签" content-class="custom-content"> 内容 </DescriptionsItem>
</Descriptions>
</template>
<style>
.custom-descriptions {
border: 1px solid
border-radius: 8px;
padding: 16px;
}
.custom-label {
color:
font-weight: bold;
}
.custom-content {
color:
}
</style>
```
| 参数 | 类型 | 默认值 | 说明 |
| ---------- | ---------------------------------------- | ----------------------- | -------------- |
| title | string | '' | 描述列表的标题 |
| column | number \| Responsive | { xs: 1, sm: 2, lg: 3 } | 列数配置 |
| layout | 'horizontal' \| 'vertical' \| 'auto' | 'auto' | 布局方式 |
| gutter | number \| [number, number] \| Responsive | 15 | 间距配置 |
| labelWidth | number \| string | undefined | 标签宽度 |
| 参数 | 类型 | 默认值 | 说明 |
| ------------ | ------------------------- | --------- | ---------- |
| label | string | '' | 标签文本 |
| span | number \| Responsive | 1 | 跨列数 |
| labelWidth | number \| string | undefined | 标签宽度 |
| labelClass | string \| object \| array | undefined | 标签样式类 |
| contentClass | string \| object \| array | undefined | 内容样式类 |
```typescript
// 响应式配置类型
type Responsive = {
xs?: number
sm?: number
md?: number
lg?: number
xl?: number
}
// 列数类型
type ColumnType = number | Responsive
// 布局类型
type LayoutType = 'auto' | 'horizontal' | 'vertical'
// Descriptions 组件 Props
interface DescriptionsProps {
title?: string
column?: ColumnType
layout?: LayoutType
gutter?: number | [number, number] | Responsive
labelWidth?: number | string
}
// DescriptionsItem 组件 Props
interface DescriptionsItemProps {
label?: string
labelClass?: string | object | string[] | object[]
contentClass?: string | object | string[] | object[]
span?: number | Responsive
labelWidth?: string | number
}
```
组件使用 CSS 类名,你可以通过覆盖这些类名来自定义样式:
```css
/* 描述列表容器 */
.desc-container {
/* 自定义容器样式 */
}
/* 描述列表头部 */
.desc-header {
/* 自定义头部样式 */
}
/* 描述列表网格 */
.desc-grid {
/* 自定义网格样式 */
}
/* 描述列表项 */
.desc-item {
/* 自定义项目样式 */
}
/* 描述列表标签 */
.desc-label {
/* 自定义标签样式 */
}
/* 描述列表内容 */
.desc-content {
/* 自定义内容样式 */
}
```
组件使用以下响应式断点,与 Tailwind CSS 保持一致:
- `xs`: 0px 及以上
- `sm`: 640px 及以上
- `md`: 768px 及以上
- `lg`: 1024px 及以上
- `xl`: 1280px 及以上
1. **浏览器兼容性**:组件使用了 CSS Grid 布局,确保在现代浏览器中使用
2. **响应式设计**:响应式断点与 Tailwind CSS 保持一致
3. **样式加载**:样式是全局的,会在应用启动时自动加载
4. **Tree Shaking**:如果你使用 Tree Shaking,建议使用手动引入样式的方式
5. **TypeScript 支持**:组件完全支持 TypeScript,提供完整的类型定义
```bash
pnpm install
pnpm run build:component descriptions
pnpm run publish:component descriptions
```
MIT License