# rich-text

组件类型:UniRichTextElement

富文本。可渲染文字样式、图片、超链接。支持部分HTML标签

# 兼容性

Web 微信小程序 Android iOS HarmonyOS
4.0 4.41 3.9 4.11 4.61

# 支持的HTML标签和属性

HTML 属性 样式
br
p text-align color background-color text-decoration
ul
li text-align color background-color text-decoration
span color background-color text-decoration
strong
i
big
small
a href
u
del
h1-h6
img src

text-decoration仅支持line-through

# 属性

名称 类型 默认值 兼容性 描述
nodes array | string -
节点列表 | HTML String
selectable boolean false
文本是否可选
mode string "web"
渲染模式
合法值 兼容性 描述
web
使用webview渲染
native
使用原生渲染
@itemclick (event: UniRichTextItemClickEvent) => void -
拦截点击事件(只支持 a、img标签),返回img标签的src属性或a标签的href属性。event.detail={ src | href }
space string -
(string)
显示连续空格
合法值 兼容性 描述
ensp
中文字符空格一半大小
emsp
中文字符空格大小
nbsp
根据字体设置的空格大小
user-select boolean -
(boolean)
文本是否可选,该属性会使节点显示为 block。已废弃,请使用 selectable

# 事件

# UniRichTextItemClickEvent

# UniRichTextItemClickEvent 的属性值
名称 类型 必填 默认值 兼容性 描述
detail UniRichTextItemClickEventDetail - -
名称 类型 必备 默认值 兼容性 描述
src string - - <img/>图片链接
href string - - <a/>超链接

# 子组件

不可以嵌套组件

# 示例

hello uni-app x

扫码体验(手机浏览器跳转到App直达页)

Template

Script

<template>
  <view>
    <page-head title="rich-text"></page-head>
    <view class="uni-padding-wrap uni-common-mt">
      <view class="uni-btn-v">
        <navigator url="/pages/component/rich-text/rich-text-tags">
          <button type="primary">rich-text渲染单个HTML标签示例</button>
        </navigator>
      </view>
      <view class="uni-btn-v">
        <navigator url="/pages/component/rich-text/rich-text-complex">
          <button type="primary">rich-text渲染复杂HTML示例</button>
        </navigator>
      </view>
      <view class="uni-title">
        <button type="default" @click="changeText">修改文本内容</button>
      </view>
      <view class="text-box" id="rich-text-parent" @click="richTextParentClick">
        <rich-text id="richtext" style="border: 1px; border-style: solid; border-color: red;" :nodes="text"></rich-text>
        <view>
          <text>rich-text-parent</text>
          <text id='rich-text-str'>{{richTextStr}}</text>
        </view>
      </view>
      <view class="uni-title">
        <text class="uni-subtitle-text">selectable</text>
      </view>
      <view class="text-box2">
        <rich-text style="height: 80px;" :selectable="true"
          :nodes="text"></rich-text>
      </view>
    </view>
  </view>
  <rich-text v-if="autoTest" id="test-rich-text" :nodes="testNodes" :selectable="true" @itemclick="itemClickForTest" style="position: fixed;width: 100px;height: 100px;"></rich-text>
</template>



<style>
  .text-box {
    padding: 20px 0;
    background-color: white;
  }

  .text-box2 {
    top: 20px;
    background-color: white;
  }

</style>

# 参见

# 富文本显示的可选方案

rich-text组件是一个比较重的组件,需要注意适用场景。

  • rich-text组件适合cms系统编排的、大量使用html能力的富文本文章显示
  • rich-text不支持video组件,如果涉及video,需拆分文本内容,在video前后各放置一个rich-text组件

其他替代方案:

  • 简单的、不同风格文字排布,应该仅使用text组件,必要时也可以使用text组件嵌套text组件
  • 简单的图文混拍,用image组件+text组件拼接可以实现的,没必要使用rich-text组件
  • 自行解析node节点,动态拼接text、image、video等原生组件,也是一种方案,类似小程序领域的mp-html插件。可自行在插件市场搜索是否有这类插件
  • 原生markdown渲染:官方提供了markdown解析,动态拼接原生组件的方案,在uni-ai x开源项目中可以体验

# 调整历史

在4.7版以前,Android是原生实现rich-text,但与web规范拉齐度较低;iOS使用的是web-view;鸿蒙使用的是系统的rich-text,但该rich-text也是基于web-view实现且有细节问题。

从uni-app x4.7+,3个App平台统一使用web-view实现。鸿蒙平台直接替换了之前的实现,而Android平台则新增了mode属性配置,默认是web-view实现,但也可以通过mode=native继续使用之前的原生方式。

# Bug & Tips

  • App-Android 平台且 mode=native 时,HTML String 类型的<img/>不支持自定义宽高,默认以 rich-text 组件宽度为基准等比缩放;节点列表类型的<img />支持自定义宽高。