更新记录

1.1.0(2026-10-15)

  • 代码块(pre)默认改为横向滚动:保持原始行与缩进,超出宽度时可左右滑动,不再被硬折断
  • 新增 wrapCode 属性(默认 false):设为 true 时代码块超出宽度自动换行;行内 code 始终随文本换行
  • <pre> 内的 <code> 不再叠加行内代码的底色 / 内边距 / 圆角,统一由代码块样式呈现
  • 示例页面新增长代码行与「代码块自动换行」开关,便于对比效果

平台兼容性

uni-app x(5.07)

Chrome Safari Android iOS 鸿蒙 微信小程序
√ √ √ - - √

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× √ √ ×

hy-rich-text-x HTML 富文本显示器

hy-rich-text-x 是一个 uni-app x(uvue + UTS) 的只读 HTML 富文本渲染组件(显示器),解析引擎为自研轻量实现,无任何第三方依赖。

支持 App(Android / iOS / HarmonyOS)、Web 以及微信小程序。 组件把 HTML 解析成视图就绪的块树,统一渲染为 view / text / image,不使用 rich-text / v-html。 另提供 uni-app(Vue2 / Vue3)版本:hy-rich-text。

功能特性

  • 纯只读渲染,不含编辑能力,无第三方依赖
  • 支持常用 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 等
  • 支持原生 HTML 实体:命名实体(&amp; / &nbsp; / &copy; / &mdash; …)与数字实体(&#123; / &#x1F600;)
  • 支持 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-x 目录放入项目的 uni_modules 目录即可,组件已支持 easycom,无需手动 import。

基本用法

<template>
    <view style="padding: 15px;">
        <hy-rich-text-x
            :content="html"
            :dark="false"
            :selectable="true"
            :copyable="true"
            @link="onLink"
            @image="onImage"
            @copy="onCopy"
        />
    </view>
</template>

<script setup lang="uts">
    const html = ref('<h2>HTML 富文本</h2><p>支持 <strong>粗体</strong>、<em>斜体</em>、<span style="color:#e91e63">彩色文字</span> 与 <a href="https://dcloud.io">链接</a>。</p>')

    const onLink = (href: string) => {
        uni.showToast({ title: '链接:' + href, icon: 'none' })
    }
    const onImage = (src: string) => {
        // previewImage 为 true 时组件已自动预览
    }
    const onCopy = (text: string) => {
        uni.setClipboardData({
            data: text,
            success: () => {
                uni.showToast({ title: '已复制', icon: 'none' })
            },
            fail: () => {}
        })
    }
</script>

完整可运行示例见本插件 example/example.uvue。

属性 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),参数为还原后的纯文本内容;组件不自动复制,由使用者在回调中实现

也可通过组件方法 getText() 获取当前渲染内容的纯文本(配合 ref 调用)。

支持的语法

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

不渲染的标签:script style(内容仅用于 CSS)head title meta link base noscript template iframe canvas svg。

CSS 样式

  • 来源与优先级(由低到高):标签内置默认样式 → <style> / extraCss 规则 → tagStyle → 行内 style
  • 选择器:标签、.class、#id、后代(空格)、子代(>)、逗号分组、通配 *
  • 属性:color background(-color) font-size font-weight font-style font-family text-decoration(-line) text-align line-height letter-spacing text-indent margin(-*) padding(-*) border(-*) border-radius width height max-width min-height white-space opacity text-transform vertical-align 等
  • 简写展开:margin / padding / border / border-radius / background / font
  • 单位换算:px / rpx / em(依父字号)/ rem(依 baseFontSize)/ pt / %
  • 安全过滤:url() / expression / /code> / @import / < > 一律忽略

平台支持

平台 支持情况
App(Android) √
App(iOS / HarmonyOS) 待验证
Web √
微信小程序 √

说明:上表「√」为已通过编译验证的平台;「待验证」表示代码已按跨端实现、但尚未在对应平台实测,请按需自行验证。

注意事项

  1. 组件为只读显示器,不提供编辑、光标、选区等编辑能力。
  2. 全平台自研渲染,不使用 rich-text / v-html;CSS 支持为常用子集,float / position / transform / 伪类 / 媒体查询等安全降级或忽略。
  3. uni-app x 原生渲染下样式不跨组件继承,组件已把可继承样式(颜色、字号、字重、斜体、下划线、行高、对齐等)逐层显式下传。
  4. 标签内置默认样式可被 <style> / extraCss / tagStyle / 行内样式逐级覆盖。
  5. 未闭合标签会自动补全;可省略闭合的标签(p / li / td / tr 等)在遇到同类或父级结束标签时自动闭合。
  6. 图片默认 mode="widthFix" 自适应容器宽度;点击是否自动预览由 previewImage 控制,复制动作由使用者自行实现。
  7. 表格整体支持横向滚动,单元格内容自动折行;列宽按内容自适应。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。