更新记录
1.1.0(2026-10-15)
- 代码块(
pre)默认改为横向滚动:保持原始行与缩进,超出宽度时左右滑动,不再被硬折断 - 新增
wrapCode属性(默认false):设为true时代码块超出宽度自动换行;行内code始终随文本换行 <pre>内的<code>不再叠加行内代码的底色 / 内边距 / 圆角,统一由代码块样式呈现- 示例页面新增长代码行与「代码块自动换行」开关,便于对比效果
平台兼容性
uni-app(5.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | × | √ | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | × | √ | √ | √ | √ | - | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 | 蒸汽模式 |
|---|---|---|---|
| × | √ | √ | × |
hy-rich-text HTML 富文本显示器
hy-rich-text 是一个 uni-app(Vue2 / Vue3) 的只读 HTML 富文本渲染组件(显示器),解析引擎为自研轻量实现,无任何第三方依赖。
支持 H5 / PC、App(Android / iOS / HarmonyOS)以及微信等主流小程序、快应用。 组件把 HTML 解析成视图就绪的块树,全平台统一渲染为
view/text/image,不使用rich-text/v-html,保证各端表现一致。 另提供 uni-app x 版本:hy-rich-text-x。
功能特性
- 纯只读渲染,不含编辑能力,无第三方依赖
- 支持常用 HTML 标签:
div/p/h1~h6/blockquote/pre/code/ul/ol/li/dl/dt/dd/table/thead/tbody/tfoot/tr/th/td/hr/img/a/br以及行内语义标签span/strong/b/em/i/u/s/del/ins/mark/small/big/sub/sup/kbd/samp/var/cite/q/abbr/time/font等 - 支持原生 HTML 实体:命名实体(
&/ /©/—…)与数字实体({/😀) - 支持
style="..."行内样式 - 支持
<style>简单选择器:标签 /.class/#id/ 后代(空格)/ 子代(>)/ 逗号分组 / 通配* - 支持 CSS 简写展开(
margin/padding/border/border-radius/background/font)与单位换算(px/rpx/em/rem/pt/%) - 支持深色主题与文本可选择(
selectable)开关 - 支持一键复制按钮(
copyable):开启后组件右上角显示「复制」按钮,点击派发copy事件并回传纯文本,复制动作由使用者在回调中自行实现 - 支持图片点击派发
image事件,并可选自动uni.previewImage - 支持通过
tagStyle/extraCss注入自定义样式
安装
将 hy-rich-text 目录放入项目的 uni_modules 目录即可,组件已支持 easycom,无需手动 import。
基本用法
<template>
<view style="padding: 30rpx;">
<hy-rich-text
:content="html"
:dark="false"
:selectable="true"
:copyable="true"
@link="onLink"
@image="onImage"
@copy="onCopy"
/>
</view>
</template>
<script>
export default {
data() {
return {
html: '<h2>HTML 富文本</h2><p>支持 <strong>粗体</strong>、<em>斜体</em>、<span style="color:#e91e63">彩色文字</span> 与 <a href="https://dcloud.io">链接</a>。</p>'
}
},
methods: {
onLink(href) {
uni.showToast({ title: '链接:' + href, icon: 'none' })
},
onImage(src) {
// previewImage 为 true 时组件已自动预览
},
onCopy(text) {
uni.setClipboardData({
data: text,
success: () => {
uni.showToast({ title: '已复制', icon: 'none' })
}
})
}
}
}
</script>
完整可运行示例见插件内
example/example.vue(若要运行,请将其路径加入项目pages.json的pages数组)。
属性 Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| content | String | '' | 待渲染的 HTML 源文本 |
| dark | Boolean | false | 是否使用深色主题 |
| selectable | Boolean | true | 渲染出的文本是否可长按选择 / 复制 |
| copyable | Boolean | false | 是否显示右上角「复制」按钮;点击仅派发 copy 事件,组件不自动写入剪贴板 |
| previewImage | Boolean | true | 点击图片时是否自动调用 uni.previewImage;无论是否自动预览,都会派发 image 事件 |
| wrapCode | Boolean | false | 代码块(pre)是否自动换行。默认 false 时保持原始行与缩进、超出宽度横向滚动;true 时超出宽度换行。行内 code 始终随文本换行 |
| extraCss | String | '' | 追加的 CSS 文本,优先级高于 <style> 标签内容 |
| baseFontSize | Number | 16 | 根字号(px),用于 rem 与默认正文大小 |
| tagStyle | Object | {} | 按标签覆盖默认样式,如 { h1: { color: '#f00' } },优先级高于 CSS 规则、低于行内 style |
事件 Events
| 事件名 | 回调参数 | 说明 |
|---|---|---|
| link | href : string |
点击链接时触发,参数为链接地址 |
| image | src : string |
点击图片时触发,参数为图片地址 |
| copy | text : string |
点击「复制」按钮时触发(需 copyable 为 true),参数为还原后的纯文本内容;组件不自动复制,由使用者在回调中实现 |
也可通过组件方法
this.$refs.rt.getText()获取当前渲染内容的纯文本。
支持的语法
HTML 标签
| 类别 | 标签 |
|---|---|
| 块级容器 | div section article header footer main nav aside figure figcaption address center details |
| 文本块 | p h1~h6 pre blockquote |
| 列表 | ul ol li dl dt dd |
| 表格 | table thead tbody tfoot tr th td caption |
| 分割 | hr |
| 行内语义 | span strong b em i u ins s del strike mark small big sub sup code kbd samp var cite q abbr time bdi wbr font |
| 媒体 / 链接 | img a br |
不渲染的标签:
scriptstyle(内容仅用于 CSS)headtitlemetalinkbasenoscripttemplateiframecanvassvg。
CSS 样式
- 来源与优先级(由低到高):标签内置默认样式 →
<style>/extraCss规则 →tagStyle→ 行内style - 选择器:标签、
.class、#id、后代(空格)、子代(>)、逗号分组、通配* - 属性:
colorbackground(-color)font-sizefont-weightfont-stylefont-familytext-decoration(-line)text-alignline-heightletter-spacingtext-indentmargin(-*)padding(-*)border(-*)border-radiuswidthheightmax-widthmin-heightdisplaywhite-spaceword-breakopacitytext-transformvertical-alignlist-style-type等 - 简写展开:
margin/padding/border/border-radius/background/font - 单位换算:
px/rpx/em(依父字号)/rem(依baseFontSize)/pt/% - 安全过滤:
url()/expression//code> /@import/<>一律忽略
平台支持
| 平台 | 支持情况 |
|---|---|
| App(Android) | √ |
| App(iOS / HarmonyOS) | 待验证 |
| H5 / PC | √ |
| 微信 / 支付宝 / 头条 / 百度 / 快手 / QQ / 飞书 / 小红书小程序 | √ |
| 华为快应用 / 联盟快应用 | 待验证 |
说明:上表「√」为已通过编译验证的平台;「待验证」表示代码已按跨端实现、但尚未在对应平台实测,请按需自行验证。
注意事项
- 组件为只读显示器,不提供编辑、光标、选区等编辑能力。
- 全平台自研渲染,不使用
rich-text/v-html;CSS 支持为常用子集,float/position/transform/ 伪类 / 媒体查询等安全降级或忽略。 - 标签内置默认样式可被
<style>/extraCss/tagStyle/ 行内样式逐级覆盖。 - 未闭合标签会自动补全;可省略闭合的标签(
p/li/td/tr等)在遇到同类或父级结束标签时自动闭合。 - 图片默认
mode="widthFix"自适应容器宽度;点击是否自动预览由previewImage控制,复制动作由使用者自行实现。 - 表格整体支持横向滚动,单元格内容自动折行;列宽按内容自适应。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 297
赞赏 1
下载 12682122
赞赏 1956
赞赏
京公网安备:11010802035340号