n-tag 标签
行内小标签,用于状态标注、分类标记、筛选条件回显。view 为根,文字走 text 或默认插槽;底色与描边走显式色调类(填充 n-tag--primary、镂空 n-tag--plain-primary),文字墨色行内指定,不依赖样式继承。
closeable只负责显示关闭图标并派发close事件,组件不自行隐藏——是否移除标签由你在回调里用v-if决定- 标签宽度随内容收缩;放进纵向布局会被交叉轴拉宽,按横向行容器使用是行内标签的常态
- 关闭图标用内置图标字体渲染;形态走 shape 单选(square / round / mark),一次只选一种,无组合歧义
light是浅色调(类型色低透明度底 + 类型色文字);与plain同传时镂空生效
平台兼容性
| App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ小程序 |
|---|---|---|---|---|---|---|
| √ | √ | √ | × | × | × | × |
API
属性
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|---|---|---|---|---|
| text | 标签文字(便捷写法,内容复杂时改用默认插槽;传了 text 插槽就让位) | String | "" | - |
| type | 标签类型(功能色调,决定底色/描边/文字色) | String | primary | primary<br/>success<br/>warning<br/>error<br/>info |
| size | 标签尺寸 | String | normal | large<br/>normal<br/>small<br/>mini |
| plain | 镂空:透明底,边框与文字取类型色;与 light 同传时镂空生效 | Boolean | false | - |
| light | 浅色调:类型色低透明度底 + 类型色文字(无边框);与 plain 同传时 plain 生效 | Boolean | false | - |
| shape | 形态单选:square 默认小圆角 / round 全圆角胶囊 / mark 标记形(右半圆左直角,贴边排版用) | String | "square" | square<br/>round<br/>mark |
| closeable | 显示关闭图标,点击派发 close 事件(组件不自行隐藏) | Boolean | false | - |
| text-style | 微调标签文字的行内样式,如 "font-weight:600"(页面 class 打不进组件内部) | String | "" | 与 css 相同 |
| custom-class | 挂到根节点的额外 class(类需定义在组件样式表内) | String | "" | - |
| custom-style | 根节点行内样式,如 "margin-right:8px" 用于和其他标签排间距 | String | "" | 与 css 相同 |
事件
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| close | 点击关闭图标时触发(组件不自行隐藏,由使用者在回调里移除标签) | 事件对象 |
插槽
| 插槽名 | 说明 |
|---|---|
| default | 标签内容(图标与文字自由组合);传了 text 属性时插槽让位 |
主题令牌
| 令牌 | 默认值 | 说明 |
|---|---|---|
| --n-tag-height | 24px | 常规档高度(lg/sm/mini 档同名后缀,见 variable.scss) |
| --n-tag-font-size | 12px | 常规档文字字号(各档位同名后缀) |
| --n-tag-padding-x | 10px | 常规档左右内边距(各档位同名后缀) |
| --n-tag-radius-square | 8px | 默认圆角 |
| --n-tag-radius-circle | 999px | 胶囊圆角 |
| --n-tag-close-gap | 4px | 文字与关闭图标的间距 |
$n-tag-radius-mark*(mark 半圆半径)与$n-tag-light-alpha(浅色底透明度)只支持编译时覆盖(uni.scss 同名覆盖):前者须写进 border-radius 多值简写、后者须参与 rgba 合成,多值/合成里嵌运行时 var() 各端解析不可靠。
实现说明
与参考实现对照的取舍(同类组件功能面取并集、冲突从使用者视角择优融合)
| 机制 | 参考做法 | 本库做法 | 分歧理由 |
|---|---|---|---|
| 配色形态 | 三态单 prop(dark/light/plain)或镂空布尔 | 实底默认 + plain / light 布尔 |
与全库布尔风格一致(n-button plain 同款);镂空与浅色同传时镂空优先(描边是更强的显式意图) |
| 浅色底 | 类型色固定透明度合成 | rgba($n-color-*, $n-tag-light-alpha) 编译期合成 |
rgba 与运行时 var() 无法叠加;文字色仍走运行时令牌 |
| 图标 | 图标名 prop(内部渲染固定尺寸) | 默认插槽 + n-icon 自由组合 | 插槽是超集(图标名/色/字号/位置全可控);标签宽度随内容收缩,纯图标插槽无方形声明需求 |
| 关闭行为 | 点击即自隐藏(内部隐藏态/show prop) | 只派发 close 事件,不自行隐藏 | 显式优于隐式;v-for 场景回调里闭包捕获条目定位,比 index 载荷类型安全 |
| 关闭热区 | 热区即图标盒(约 10~16px) | 通高 ×(字形 + 6px 右向扩展),字形视觉位置不变 | 点击容错(高度方向收益最大);扩展量受最小尺寸档右内边距约束,防越出根节点被 App 端裁剪 |
| 超长文字 | 单行省略(nowrap + ellipsis) | max-lines(App)+ 省略号 CSS 双通道 |
App 端走 max-lines 组件属性(lines 属性已废弃,绑了告警)、Web 端框架不消费行数属性由样式兜底(n-text 同款分治);标签是单行元素为品类约定,插槽内容的宽度约束由使用者管理 |
| mark 半圆 | 单侧圆角标记形态 | border-radius 右侧两角取半径、左侧归零(半径 = 高度一半,按档位) | 纯圆角实现平台一致;贴边角标场景由使用者在容器上定位标签 |
| 尺寸档位 | 无档位(字号 rpx 直传)或两三档 | 四档(large/normal/small/mini),高度/字号/内边距成套 | 行内标签与按钮同构的档位心智;单值字号 prop 会破坏高度档位 |
| 自定义色 | bgColor / color / borderColor / closeColor 单值 props | type 预设 + custom-style / text-style 行内通道 | 三通道是本库统一定制哲学;行内可一次改多个属性,预设之外的色值同一条通道直达;插槽内容无法继承组件墨色,需要与组件对齐时导出函数 tagInkColor(type, plain, light) 取同源色 |
| 细边框 | 0.5px 毛细边框开关 | 不收 | 0.5px 跨端渲染不一致(Web 端非整像素发虚),1px 是全端安全值 |
| 点击事件 | click(index) 可点选标签 | 不收 | 可点选的数据标签物种归 n-data-tag(单选/多选/禁用/互斥全能力),本组件保持纯标注 |
| 间距与缩放 | margin 四向 / gutter / width / scaleRatio props | custom-style 一通道 | 行内样式超集,避免 prop 膨胀;成组标签间距 readme 示例即此做法 |
| 关闭图标内外位 / 关闭色 | 单参考源有、行为无法核实 | 不收 | 加密发行源内部行为不可考;需要完全自定义关闭区时用插槽自建(与该参考源演示页同款做法) |