文本和图标组件
# 文本和图标组件
前言
在 uni-app
中,组件是视图层的基本组成单元,也是一个独立且可复用的功能模块封装。简单来说,组件就类似网页中的标签元素,但 uni-app
对常用的视图和交互进行了进一步的封装,使得跨平台开发更加便捷。
# 一、文本组件(text)
# 1.1 基本介绍
text
组件用于包裹文本内容,并提供了一些额外的属性,用于控制文本的选择、空格显示、HTML 实体解析等。
# 1.2 常用属性
属性名 | 类型 | 默认值 | 说明 | 平台差异说明 |
---|---|---|---|---|
selectable | Boolean | false | 文本是否可被选择(即长按是否能出现复制菜单) | -- |
user-select | Boolean | false | 文本是否可选,功能同上 | 微信小程序支持 |
space | String | -- | 显示连续空格的处理方式 | 钉钉小程序不支持 |
decode | Boolean | false | 是否将 HTML 实体进行解码 | 百度、钉钉小程序不支持 |
space 属性详解
space
属性用于控制连续空格的显示格式,可根据值来决定空格大小。常见取值说明:
值 | 说明 |
---|---|
ensp | 中文字符空格的一半大小 |
emsp | 中文字符空格的标准大小 |
nbsp | 根据字体设置的空格大小 |
例如,当 space
为 ensp
时,在文本中连续输入的空格会显示成半个汉字的宽度。
# 1.3 效果展示
下面演示了在不同情况下配置 text
组件的表现,示例仅供参考,实际使用可根据项目需求自行设置 selectable
、decode
等属性。
提示
selectable
在不同平台的兼容情况略有差异,若在某平台不生效,可检查平台文档或使用相应兼容属性(如微信小程序的user-select
)。- 使用
decode
可以让形如 等 HTML 实体在文本中被真实解析显示出来。
# 二、图标组件(icon)
在移动应用或 Web 开发中,图标是 UI 设计中非常重要的一部分。uni-app
提供了内置的 icon
组件,使用默认图标非常方便。同时,项目中也常需要自定义图标,可通过“字体图标”(iconfont)等方式来实现。
# 2.1 使用默认图标
icon
组件支持多种 type
来显示系统内置的图标,常用的如“success”、“info”、“search”等。以下为它的常用属性说明:
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
type | String | -- | 指定 icon 的类型(如 success , info , search 等) |
size | Number | 23 | icon 的大小,单位是 px |
color | Color | -- | icon 的颜色,类似于 CSS 中的 color 属性 |
由于不同平台的图标库支持的类型不尽相同,所以实际可用的
type
值也会有平台差异。
# 2.1.1 不同平台可用的 type 值
平台 | type 有效值 |
---|---|
App、H5、微信、QQ 小程序 | success, success_no_circle, info, warn, waiting, cancel, download, search, clear |
支付宝小程序 | info, warn, waiting, cancel, download, search, clear, success, success_no_circle, loading |
百度小程序 | success, info, warn, waiting, success_no_circle, clear, search, personal, setting, top, close, cancel, download, checkboxSelected, radioSelected, radioUnselect |
# 2.1.2 效果演示
下图演示了在不同平台下,通过传入不同 type
来展示 icon
组件的效果(仅供参考,不同平台或版本实际显示可能会略有差异):
提示
如果某些平台下的 type
无效或显示为空白,可能是该平台暂未支持对应的图标类型。可以更换其他 type 或使用字体图标来解决兼容性问题。
# 2.2 引入自定义图标(字体图标)
uni-app 默认内置图标数量有限,为了满足更多样化的需求,自定义图标就非常重要。常见做法是使用“字体图标”方案(如阿里 Iconfont),相较于图片图标,它具有矢量可缩放、样式可控等优点。
# 2.2.1 字体图标的使用方式
- 引入字体文件:可以是网络字体(需带
https
)、本地字体(小程序端需转换为 base64 或使用自动转码)等。 - 在 CSS 中声明:通过
@font-face
语法指定font-family
。 - 在 HTML 中引用:用
<text>
或<i>
等标签,并应用对应的 CSS 类名来显示图标。 - 控制样式:使用普通 CSS 来控制图标的大小、颜色等。
小程序限制
- 小程序不支持在 CSS 中直接使用本地文件路径的字体文件,需要转换为 base64 或放到网络服务器上以
https
路径引用。 - 如果自动转换不成功,可能需要手动将字体文件转换为 base64。 :::
# 2.2.2 演示:从 Iconfont 引入字体图标
- 前往 iconfont.cn (opens new window) 选择并下载所需图标集。
- 解压后通常得到如下文件结构(包含
.css
、.woff
或.ttf
等字体文件,以及示例demo_index.html
):
1. 将字体文件与 CSS 引入项目。在 uni-app
项目中,可在 static
目录或自建 assets
目录存放这些文件,并引用或转换为 base64。
2. 使用示例:打开下载文件的 demo_index.html
查看哪些类名对应哪些图标,例如 .icon-xxx
。在 uni-app
中使用时,需要去掉开头的 “.
”,只使用类名(或直接复制参考样式到你的 CSS/less/scss 中)。
自定义图标的颜色和大小
- 通过修改
font-size
,color
等 CSS 属性可灵活控制字体图标的外观。 - 可使用媒体查询或其他响应式设计手段,为不同屏幕大小设置不同的图标尺寸。
# 三、常见问题及总结
- 在浏览器端可显示,而小程序端不显示
- 可能是小程序端不支持本地引用方式,需使用 https 网络字体 或 base64 字体文件;
- 检查控制台报错信息,如“无法加载字体”或“路径非法”,则需修改引用路径或转换为 base64。
- 字体文件超过 40kb
uni-app
默认自动转 base64 的限制为 40kb 以下,如超过会导致无法自动转码;- 解决方案:自行压缩字体文件(在 iconfont 网站里只勾选必要图标),或手动将字体转换为 base64,再引用。
- 在小程序端需要选择自定义路径
App
/H5
平台可直接引用本地字体路径,而小程序端通常需将字体放在网络地址(带 https)或转为 base64。
- 平台自带 icon 的 type 不够用
- 建议直接使用字体图标来丰富项目的图标库,统一管理更便捷。
- onLoad / onReady 阶段使用图标不显示
- 检查
CSS
是否正确引入;确保@font-face
已加载完毕(通常不会有明显延迟,但一些平台或网络状况特殊时需要注意)。
- 检查
提示
- **文本组件(text)**在
uni-app
中主要用于展示文字,还可控制文字是否可被选择、是否解析 HTML 实体、以及空格的处理方式,帮助我们更好地排版和布局。 - **图标组件(icon)**则为我们带来了系统内置图标的便捷使用方式,但由于平台差异,内置图标类型有限;对于更丰富的图标需求,自定义字体图标(iconfont)是主流方案,可以灵活地调整图标外观并兼容多平台。
- 在实际开发中,需要根据目标平台(App、H5、小程序)的特性来选择合适的引用方式(本地、网络或 base64),并注意文件体积限制、https 协议以及路径问题。如遇到显示异常或报错情况,大多数是路径引用或平台兼容方面的原因。
- 如果遇到无法显示或报错,建议查看小程序/浏览器控制台日志,确认是否有“资源加载失败”的提示,并结合文档或社区资源进行排查。