更新记录
1.0.0(2026-11-12) 下载此版本
首次发布。
功能
- 本地解析 HTML / Markdown(不使用 WebView),渲染为原生组件
- 块级元素:段落、六级标题、有序/无序/嵌套列表、引用、代码块、表格、图片、视频、分割线
- HTML 常用内联样式子集:颜色、背景色、字号、加粗、斜体、下划线/删除线、对齐、行内代码
- 表格:表头自动识别(兼容
<th>与<thead>包裹<td>)、单元格背景色铺满整格;列宽两种模式可选:等分 / 按各列最长文本占比自适应 - 列表:左侧主题色引导线,
<li>内嵌套块级标签自动归并,组内紧凑、组间正常段距 - 空段落处理:
<p><br></p>转受控空行,连续空段落自动折叠 - 图片:懒加载 + 点击全屏预览(自动收集全文图片),1px 占位图 / spacer.gif 自动过滤
- 主题系统:5 套预设(default / compact / article / dark / darkblue)+ customStyle 浅合并覆盖
- 深色主题自动忽略内容自带背景色
- 表头渲染开关 prop(tableHeader)
- 解析器独立导出(parseRichText),可自行接管渲染层
平台
- Android(minSdk 21)/ iOS / 鸿蒙 HarmonyOS
- 纯 UTS + uvue 实现,无原生混编代码,三端共用同一份解析与渲染逻辑
平台兼容性
uni-app x(3.8.10)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 鸿蒙插件版本 | 微信小程序 |
|---|---|---|---|---|---|---|---|---|
| × | × | 5.0 | 1.0.0 | 12 | 1.0.0 | 12 | 1.0.0 | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 | 蒸汽模式 |
|---|---|---|---|
| × | × | √ | √ |
djiz-rich-text
uni-app x 富文本渲染组件插件。在本地解析 HTML / Markdown(不使用 WebView),渲染为原生组件:文本、标题、列表、引用、代码块、表格、图片、视频、分割线。
平台支持
| Android | iOS | 鸿蒙 HarmonyOS | Web / 小程序 |
|---|---|---|---|
| √(5.0 / API 21+) | √(12.0+) | √(NEXT / API 12+) | - |
编译工具要求 HBuilderX 4.61+。纯 UTS + uvue 实现,无原生混编代码,最低系统版本跟随 uni-app x 官方平台要求:Android 5.0(API 21)、iOS 12、HarmonyOS NEXT(API 12)。
特性
- 本地解析:手写 HTML tokenizer + Markdown 行扫描,解析与渲染分离,产出扁平块模型,无递归组件
- 丰富块级元素:段落、六级标题、有序/无序/嵌套列表、引用、代码块、表格、图片、视频、分割线
- HTML 常用内联样式子集:
color、background-color、font-size、font-weight、font-style、text-decoration、text-align、行内 code - 表格:表头自动识别(兼容
<th>与<thead>包裹<td>两种写法)、单元格自带背景色铺满整格、flex 均分列 - 列表:左侧主题色引导线,
<li>内嵌套<p>/<div>自动归并、不丢序号,组内紧凑、组间正常段距 - 空段落智能处理:
<p><br></p>转为受控空行,连续空段落自动折叠,避免段距叠加 - 图片:懒加载 + 点击全屏预览(自动收集全文图片、按顺序定位),1px 占位图 / spacer.gif 自动过滤
- 主题系统:5 套内置预设(default / compact / article / dark / darkblue)+
customStyle浅合并覆盖任意字段 - 深色主题自动忽略内容自带背景色,避免白字压浅灰底
- 解析器独立导出,可自行接管渲染层
使用方式
easycom 自动引入,无需手动 import:
<djiz-rich-text :content="html" type="auto" />
<!-- 指定主题 -->
<djiz-rich-text :content="md" type="markdown" theme="article" />
<!-- 覆盖个别样式字段 -->
<djiz-rich-text
:content="html"
theme="dark"
:custom-style="{ linkColor: '#7CC7FF', paragraphSpacing: 12 }"
/>
// 服务端获取内容后直接传入,type='auto' 自动识别 HTML / Markdown
const content = ref<string>('')
uni.request({
url: 'https://example.com/api/article/1',
success: (res) => {
content.value = (res.data as UTSJSONObject)['html'] as string
}
})
Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| content | string | '' |
富文本原文(服务端下发的 HTML 或 Markdown) |
| type | string | 'auto' |
解析类型:auto / html / markdown。auto 按首字符 < 判断 |
| theme | string | 'default' |
预设主题:default / compact / article / dark / darkblue |
| customStyle | object | 无 | 样式覆盖,传普通对象即可,与 theme 预设浅合并(字段见下表) |
| themeColor | string | 无 | 链接颜色快捷别名,等价于 customStyle.linkColor |
| lazyLoad | boolean | true |
图片懒加载 |
| preview | boolean | true |
点击图片全屏预览,自动收集全文图片按序浏览 |
| selectable | boolean | false |
文本是否可长按选择 |
| imageMode | string | 'widthFix' |
图片裁剪缩放模式,同 image 组件 mode |
| tableHeader | boolean | true |
是否按表头渲染表格首行(背景色 + 加粗)。false 时首行按普通单元格显示 |
| tableWidthMode | string | 'equal' |
表格列宽模式:equal 等分 / auto 按各列最长文本估算宽度占比分配(全角按 1em、半角按 0.55em 估算) |
Events
| 事件 | 参数 | 说明 |
|---|---|---|
| link-click | href: string |
点击链接 |
| image-click | src: string, index: number |
点击图片。index 为全文图片序号;preview 开启时组件内部已自动弹出预览 |
| image-error | src: string |
图片加载失败 |
样式覆盖(customStyle)
customStyle 传普通对象,字段缺省时回退到所选 theme 预设的默认值。优先级:HTML 内联样式 > customStyle > theme 预设 > 内置默认。
| 字段 | 类型 | 说明 |
|---|---|---|
| backgroundColor | string | 根容器背景色,默认透明 |
| fontSize | number | 正文字号(px),默认 16 |
| textColor | string | 正文颜色 |
| lineHeightRatio | number | 正文行高倍数 |
| headingSizes | number[] | 六级标题字号数组,按位覆盖 |
| headingColor | string | 标题颜色 |
| headingLineHeightRatio | number | 标题行高倍数 |
| paragraphSpacing | number | 段落间距(px),标题/代码/表格等块间距由此派生 |
| listItemSpacing | number | 列表项间距(px) |
| listIndent | number | 列表缩进(px) |
| listGuideColor | string | 列表左侧引导线颜色 |
| linkColor | string | 链接颜色 |
| quoteBorderColor | string | 引用块左边框颜色 |
| quoteBackground | string | 引用块背景色 |
| codeBackground | string | 代码块 / 行内代码背景色 |
| codeTextColor | string | 代码块文字颜色 |
| tableBorderColor | string | 表格边框颜色 |
| tableHeaderBackground | string | 表头背景色 |
| tableHeaderColor | string | 表头文字颜色 |
| tableHeaderBold | boolean | 表头文字是否加粗,默认 true |
| tableFontSize | number | 表格字号(px),默认 14 |
| dividerColor | string | 分割线颜色 |
| ignoreContentBackground | boolean | 是否忽略内容自带的背景色(深色主题已内置开启) |
示例:article 预设基础上微调
const custom = {
headingColor: '#0F766E',
tableBorderColor: '#99D5CF',
tableHeaderBackground: '#E6F4F1',
paragraphSpacing: 12
} as UTSJSONObject
<djiz-rich-text :content="html" theme="article" :custom-style="custom" />
解析能力说明
HTML 支持的标签:h1~h6、p、div、span、strong/b、em/i、u、s/del、code、pre、a、blockquote、ul/ol/li、table/thead/tbody/tr/th/td、img、video、br、hr
HTML 内联样式子集:color、background-color、font-size、font-weight、font-style、text-decoration、text-align
Markdown 支持:标题、加粗/斜体/删除线、行内代码、代码块、链接、图片、引用、有序/无序列表、GFM 表格、分割线,及扩展视频语法 @[video](url)
特殊处理:
<p><br></p>空段落 → 固定高度空行,连续多个自动折叠为一个<li>内嵌套<p>/<div>内容自动并入当前列表项- 宽度/高度为 1 的图片及
spacer.gif占位图自动丢弃 - 单元格
background样式提升到单元格容器层,背景铺满整格而非仅文字
进阶:自行接管渲染
解析器独立导出,可跳过组件、自行渲染块模型:
import { parseRichText, RichTextBlock } from '@/uni_modules/djiz-rich-text'
const blocks: RichTextBlock[] = parseRichText(html, 'auto')
目录结构
djiz-rich-text/
├── components/djiz-rich-text/djiz-rich-text.uvue # 跨端渲染组件
├── utssdk/
│ ├── index.uts # 解析入口:parseRichText / detectContentType
│ ├── model.uts # 块模型 + 主题样式系统(5 套预设 + 合并逻辑)
│ ├── htmlParser.uts # HTML 手写 tokenizer 解析器
│ └── markdownParser.uts # Markdown 解析器
└── package.json
完整演示见项目页面:pages/rich-text-demo/demo.uvue(本地示例)、pages/rich-text-api-demo/api.uvue(远程接口实测)。

收藏人数:
下载插件并导入HBuilder
赞赏(0)
下载 8
赞赏 1
下载 12761349
赞赏 1959
赞赏
京公网安备:11010802035340号