仓颉 ArkUI ImageSpan 组件详解:在 Text 文本中嵌入行内图片的创建、属性配置与事件处理
文档知识库教程OpenHarmony【免费下载链接】CangjieCorpus本仓库为仓颉编程语言语料库聚焦 仓颉编程语言 核心知识体系整合官方开发指南、API 文档、典型代码示例及语法规范等多维度资源经结构化处理与专业标注构建为支持 RAG检索增强生成技术 的高质量知识基座适配智能编码助手、学习辅助工具等应用开发需求。 欢迎开发者基于本语料库构建仓颉语言智能应用推动鸿蒙开发生态智能化升级项目地址https://gitcode.com/Cangjie/CangjieCorpus点击查看免费下载导读ImageSpan是仓颉 ArkUI 声明式 UI 框架中作为Text组件子组件使用的行内图片组件用于在文本流中嵌入图片实现图文混排效果。本文基于开源仓库 cj-text-input-imagespan.md 展开系统讲解 ImageSpan 的组件创建、三种核心属性颜色滤镜、缩放类型、对齐方式与两种加载事件并结合 cj-common-types.md、cj-image-video-image.md 等仓库文档给出类型级细节。读完本文你将能够独立编写图文混排的 Text 界面并正确配置图片的缩放、对齐、滤镜与加载失败兜底逻辑。ImageSpan 组件定位与使用前提ImageSpan作为 Text 组件的子组件用于显示行内图片。根据 cj-text-input-text.md 中的说明Text组件可以包含 Span 与ImageSpan两类子组件因此它承担的是文本流中的图片占位职责——与普通Image组件独立渲染不同ImageSpan必须嵌套在Text组件内部使用且不允许再包含任何子组件。导入模块使用前需要导入 ArkUI 声明式开发包import kit.ArkUI.*同时ImageSpan在 cj-common-types.md 中属于SystemCapability.ArkUI.ArkUI.Full系统能力起始版本为22使用时需确认运行环境满足该系统能力与版本要求。创建 ImageSpan 组件ImageSpan提供两种初始化方式分别对应字符串/资源引用与位图对象两种图片数据源。init(?ResourceStr)以资源或路径创建public init(value: ?ResourceStr)功能创建 ImageSpan 组件value为图片的数据源支持本地图片和网络图片。参数名类型必填默认值说明value?ResourceStr是-图片的数据源支持本地图片和网络图片。ResourceStr是 cj-common-types.md 中定义的字符串类型接口用于描述字符串入参可以使用的类型并通过extend String : ResourceStr {}将String扩展为其子类。因此实际传参时既可以直接传入字符串形式的图片路径也可以通过资源引用形式传入例如示例中的r(app.media.startIcon)。init(?PixelMap)以位图对象创建public init(value: ?PixelMap)功能创建 ImageSpan 组件value同样支持本地图片和网络图片的数据源。参数名类型必填默认值说明value?PixelMap是-图片的数据源支持本地图片和网络图片。PixelMap定义于 cj-apis-image.md是图像像素类用于读取或写入图像数据以及获取图像信息系统能力为SystemCapability.Multimedia.Image.Core。文档同时提示在调用 PixelMap 的方法前需要先通过createPixelMap构建实例PixelMap 序列化大小最大 128MB按宽 × 高 × 每像素占用字节数计算超过会送显失败。当需要把运行期生成的位图如相机拍摄、Canvas 绘制、解码得到的图片插入文本时可优先选用此构造方式。通用属性与通用事件ImageSpan支持三类通用属性与一种通用事件继承自 ArkUI 通用能力体系通用属性支持尺寸设置、背景设置、边框设置。这意味着可以像普通组件一样通过.width()、.height()、.backgroundColor()、.border()等链式调用控制图片的显示尺寸与外观。通用事件仅支持点击事件。与 Span 组件因无尺寸信息导致点击事件 target 属性无效不同ImageSpan具备明确的尺寸信息可正常响应点击交互适合作为文本内可点击的图片入口。组件属性详解func colorFilter(?ColorFilter)颜色滤镜public func colorFilter(filter: ?ColorFilter): This功能设置图像的颜色滤镜效果。参数名类型必填默认值说明filter?ColorFilter是-颜色滤镜效果初始值ColorFilter([])。ColorFilter定义于 cj-image-video-image.md本质是一个4×5 的颜色滤镜矩阵通过构造方法public init(value: ?ArrayFloat32)传入 20 个浮点数4 行 × 5 列构建时初始值为[]。矩阵作用于图像像素的 RGBA 通道可实现色调偏移、通道交换、透明度调整等效果。示例 2 中给出了两个典型矩阵blueColor对 R、G、B 通道分别乘以 0.38、0.81、0.43产生蓝色系色调colorFilter对通道进行重排与交换如 R 通道叠加 B 分量形成色彩置换效果。func objectFit(?ImageFit)缩放类型public func objectFit(value: ?ImageFit): This功能设置图片的缩放类型。参数名类型必填默认值说明value?ImageFit是-图片的缩放类型初始值ImageFit.Cover。ImageFit枚举定义于 cj-common-types.md共 6 个取值全部支持/!相等性比较operator func 、operator func !枚举值显示行为Fill不保持宽高比进行缩放图片被拉伸填满整个显示边界Contain保持宽高比缩小或放大使图片完全显示在显示边界内Cover保持宽高比缩小或放大使图片两边都大于或等于显示边界默认值Auto默认保持原图比例不变None图片不进行任何缩放保持原始尺寸显示ScaleDown图片按比例缩小但不会放大保持宽高比实际使用时建议与.width()、.height()配合Contain适合完整展示整张图Cover适合撑满区域并裁剪ScaleDown适合大图缩小、小图原样的保真场景。func verticalAlign(?ImageSpanAlignment)行内对齐方式public func verticalAlign(value: ?ImageSpanAlignment): This功能设置图片基于行高的对齐方式。参数名类型必填默认值说明value?ImageSpanAlignment是-图片基于文本的对齐方式初始值ImageSpanAlignment.Bottom。ImageSpanAlignment枚举定义于 cj-common-types.md共 4 个取值枚举值对齐行为Top图片上边沿与行上边沿对齐Center图片中间与行中间对齐Bottom图片下边沿与行下边沿对齐默认值Baseline图片下边沿与文本 BaseLine 对齐其中Baseline用于让图片与文字基线对齐是图文排版中最常用的选项之一Top/Center则适合行高较大、需要居中的场景。该枚举同样实现EquatableImageSpanAlignment支持相等性比较。组件事件详解func onComplete(?ImageCompleteCallback)加载完成回调public func onComplete(callback: ?ImageCompleteCallback): This功能图片数据加载成功和解码成功时均触发该事件。参数名类型必填默认值说明callback?ImageCompleteCallback是-回调函数图片数据加载成功和解码成功时触发。参数成功加载的图片尺寸。初始值{ _ }。ImageCompleteCallback定义于 cj-image-video-image.md类型为public type ImageCompleteCallback (ImageLoadResult) - Unit回调入参ImageLoadResult见 cj-image-video-image.md包含以下字段可用于获取实际渲染结果字段类型说明width / heightFloat64图片的宽、高pxcomponentWidth / componentHeightFloat64组件的宽、高pxcontentWidth / contentHeightFloat64图片实际绘制的宽、高px仅在 loadingStatus 返回 1 时有效contentOffsetX / contentOffsetYFloat64实际绘制内容相对组件自身的 x/y 轴偏移px仅在 loadingStatus 返回 1 时有效loadingStatusInt32图片加载成功的状态func onError(?ImageErrorCallback)加载异常回调public func onError(callback: ?ImageErrorCallback): This功能图片加载异常时触发该事件。参数名类型必填默认值说明callback?ImageErrorCallback是-回调函数图片加载出现异常时触发。参数图片加载异常信息。初始值{ _ }。ImageErrorCallback定义于 cj-image-video-image.md类型为public type ImageErrorCallback (ImageError) - Unit回调入参ImageError见 cj-image-video-image.md包含三个字段componentWidth、componentHeight组件宽高px与message错误信息可在回调中记录错误日志或执行降级展示。完整示例代码示例 1对齐方式与缩放效果该示例通过verticalAlign、objectFit属性展示了 ImageSpan 的对齐方式以及缩放效果将四张图片与带删除线的 Span 文本混合排布直观对比Contain/Fill/Auto缩放与Center/Top/Baseline/Bottom对齐的差异package ohos_app_cangjie_entry import kit.ArkUI.* import ohos.arkui.state_macro_manage.* import ohos.i18n.* import ohos.resource_manager.* import ohos.resource.__GenerateResource__ Entry Component class EntryView { func build() { Column { Flex(direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center) { Text() { //以设定大小和排布方式加载图片资源 ImageSpan(r(app.media.startIcon)) .width(150.px) .height(250.px) .objectFit(ImageFit.Contain) .verticalAlign(ImageSpanAlignment.Center) //对图片进行文本修饰 Span(This is the Span and ImageSpan component) .decoration(decorationType: TextDecorationType.LineThrough, color: Color.Red).fontSize(25) ImageSpan(r(app.media.startIcon)) .width(150.px) .height(50.px) .objectFit(ImageFit.Contain) .verticalAlign(ImageSpanAlignment.Top) Span(I am Underline-span2) .decoration(decorationType: TextDecorationType.LineThrough, color: Color.Red).fontSize(25) ImageSpan(r(app.media.startIcon)) .width(150.px) .height(250.px) .objectFit(ImageFit.Fill) .verticalAlign(ImageSpanAlignment.Baseline) Span(I am Underline-span3) .decoration(decorationType: TextDecorationType.LineThrough, color: Color.Red).fontSize(25) ImageSpan(r(app.media.startIcon)) .width(150.px) .height(50.px) .objectFit(ImageFit.Auto) .verticalAlign(ImageSpanAlignment.Bottom) Span(I am Underline-span4) .decoration(decorationType: TextDecorationType.LineThrough, color: Color.Red).fontSize(25) }.textAlign(TextAlign.Center) } } .height(720) .width(360) .padding(left:0, right: 0, top: 0) } }代码要点说明图片资源通过r(app.media.startIcon)引用需配合import ohos.resource.__GenerateResource__使用.width()/.height()使用.px单位显式指定图片显示区域同一行内ImageSpan与Span按声明顺序依次排布decoration(TextDecorationType.LineThrough, Color.Red)为相邻文本添加红色删除线便于观察对齐基准线.textAlign(TextAlign.Center)控制整段文本居中。示例 2颜色滤镜效果该示例通过colorFilter实现给图像设置颜色滤镜效果并利用onClick在两种滤镜之间动态切换package ohos_app_cangjie_entry import kit.ArkUI.* import ohos.arkui.state_macro_manage.* import ohos.i18n.* import ohos.resource_manager.* import ohos.resource.__GenerateResource__ Entry Component class EntryView { let blueColor ColorFilter([0.38, 0.0, 0.0, 0.0, 0.0, 0.0, 0.81, 0.0, 0.0, 0.0, 0.0, 0.0, 0.43, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]) let colorFilter ColorFilter([1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0]) State var DrawingColorFilterFirst: ColorFilter blueColor State var DrawingColorFilterSecond: ColorFilter colorFilter func build() { Column(space: 5){ Text { ImageSpan(r(app.media.startIcon)) .width(100) .height(100) .colorFilter(this.DrawingColorFilterFirst) .onClick({ evt this.DrawingColorFilterFirst colorFilter }) } Text { ImageSpan(r(app.media.startIcon)) .width(110) .height(110) .margin(15) .colorFilter(this.DrawingColorFilterSecond) .onClick({ evt this.DrawingColorFilterSecond blueColor }) } } } }代码要点说明ColorFilter构造入参为 20 个Float32组成的 4×5 矩阵按行填充 RGBA 通道系数使用State修饰的ColorFilter状态变量绑定滤镜点击图片后在blueColor与colorFilter两套矩阵间切换体现状态驱动的滤镜实时刷新两个Text各自独立包含一个可点击的ImageSpan验证了 ImageSpan 的通用点击事件能力。实战要点与注意事项必须嵌套于 Text 内ImageSpan是Text的子组件不可脱离Text独立存在也不支持自身子组件图文混排时与Span按声明顺序混用即可。图片数据源选择静态资源/网络路径使用init(?ResourceStr)字符串或r()资源引用运行期位图使用init(?PixelMap)注意 PixelMap 需先经createPixelMap创建且序列化大小上限为 128MB宽 × 高 × 每像素字节数。缩放与对齐的配合objectFit默认CoververticalAlign默认Bottom。需要完整展示图片用Contain撑满区域用Cover/Fill保持原比例用Auto与文字基线对齐推荐Baseline。滤镜矩阵维度ColorFilter必须是 4×520 元素的Float32数组通道系数按 R、G、B、A 顺序排列示例 2 的矩阵可直接复用或改造。加载状态兜底建议同时注册onComplete与onError前者可通过ImageLoadResult获取实际绘制尺寸与loadingStatus后者可通过ImageError.message记录失败原因并做降级处理。版本与能力约束ImageSpan相关 API 起始版本均为 22系统能力为SystemCapability.ArkUI.ArkUI.FullPixelMap数据源则依赖SystemCapability.Multimedia.Image.Core部署前需确认运行环境满足对应版本与系统能力要求。总结ImageSpan是仓颉 ArkUI 实现文本行内图文混排的核心组件通过init(?ResourceStr)/init(?PixelMap)接入资源或位图数据源借助objectFit控制缩放、verticalAlign控制对齐、colorFilter实现滤镜并通过onComplete/onError感知加载结果。结合 cj-common-types.md、cj-image-video-image.md 与 cj-apis-image.md 中的类型定义开发者可精准掌握每个属性的取值范围与底层数据结构快速落地聊天表情、行内图标、富文本插图等场景。赞分享文档知识库教程OpenHarmony【免费下载链接】CangjieCorpus本仓库为仓颉编程语言语料库聚焦 仓颉编程语言 核心知识体系整合官方开发指南、API 文档、典型代码示例及语法规范等多维度资源经结构化处理与专业标注构建为支持 RAG检索增强生成技术 的高质量知识基座适配智能编码助手、学习辅助工具等应用开发需求。 欢迎开发者基于本语料库构建仓颉语言智能应用推动鸿蒙开发生态智能化升级项目地址https://gitcode.com/Cangjie/CangjieCorpus点击查看免费下载相关推荐CangjieCorpus仓颉 ArkUI TextPicker 文本选择器组件全解——创建、属性配置与 onChange 事件实战CangjieCorpus仓颉 ArkUI TextPicker 文本选择器组件全解——创建、属性配置与 onChange 事件实战 本文基于 Cangjie文档知识库教程OpenHarmony仓颉 ArkUI Button 按钮组件创建方式、ButtonOptions 配置与常用属性详解仓颉 ArkUI Button 按钮组件创建方式、ButtonOptions 配置与常用属性详解 本文基于仓颉Cangjie语言在 OpenHarmony文档知识库教程OpenHarmony仓颉 ArkUI PatternLock 图案密码锁组件详解创建、属性配置与密码验证实战仓颉 ArkUI PatternLock 图案密码锁组件详解创建、属性配置与密码验证实战 PatternLock 是仓颉语言 ArkUI方舟 UI 框架提文档知识库教程OpenHarmony上一篇big-AGI 深度集成指南Gemini Deep Research Agent 自主研究任务的完整实战手册下一篇offlineinsiderenrollWindows Insider计划离线退出工具使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

CKEditor 4 表格插件:caption 与 thead 子元素顺序的手动测试规范与源码原理

CKEditor 4 表格插件:caption 与 thead 子元素顺序的手动测试规范与源码原理

前端UI组件 【免费下载链接】ckeditor4 The best enterprise-grade WYSIWYG editor. Fully customizable with countless features and plugins. 项目地址: https://gitcode.com/gh_mirrors/ck/ckeditor4 点击查看 免费下载 导读 CKEditor 4 的表格插件&#xff0…

2026/10/16 5:58:45 阅读更多 →
继续教育必备:十大AI论文网站实用测评

继续教育必备:十大AI论文网站实用测评

被导师丢过来一张清单,上面写着“继续教育阶段先别急着写,把这十个论文网站用熟再说”,我一开始还觉得有点小题大做。直到自己离开校园网环境、白天上班晚上写论文,才发现找文献这件事,难度直接从“简单模式”跳到了“…

2026/10/16 5:58:45 阅读更多 →
Ruined Draven 炫彩资源包全解析:Chroma ID 清单、包结构与使用指南(lol-skins)

Ruined Draven 炫彩资源包全解析:Chroma ID 清单、包结构与使用指南(lol-skins)

【免费下载链接】lol-skins Comprehensive collection of League of Legends skins available for custom use. 项目地址: https://gitcode.com/gh_mirrors/lo/lol-skins 点击查看 免费下载 本文以 lol-skins 仓库中 Ruined Draven 炫彩目录 的官方清单为主体&…

2026/10/16 5:58:45 阅读更多 →

最新新闻

Claude Skills全自动写X短帖:设计与实现教程

Claude Skills全自动写X短帖:设计与实现教程

先说结论:这套“Claude Skills 全自动写社交平台X短帖”的方案,我已经在个人号上稳定跑了几个月,从选题、写草稿、人工确认到发布,基本把“每天打开应用憋文案”这个环节彻底砍掉了。标题里说的“搓了个Skill”,不是拿…

2026/10/17 11:11:17 阅读更多 →
基于YOLOv8的双目测距实现与工程优化实战

基于YOLOv8的双目测距实现与工程优化实战

双目测距这几年在自动驾驶、安防监控和机器人避障里用得越来越多,尤其是和YOLOv8这类检测模型结合以后,可以直接给检测框绑定距离信息,省掉了过去“先检测、再单独测距”的割裂流程。我做的这个模拟项目X,就是一套基于YOLOv8的双目…

2026/10/17 11:11:17 阅读更多 →
Scrum团队如何用敏捷建模破解‘不建模’与‘过度建模’困局

Scrum团队如何用敏捷建模破解‘不建模’与‘过度建模’困局

敏捷圈子里有个很讽刺的现象:越是强调拥抱变化的团队,越容易把建模当成一件只能在项目启动时做的事;越是把迭代跑得飞快的团队,越容易在需求澄清时靠嘴硬撑。我这些年服务过好几个采用Scrum的团队,见过 Sprint 计划会上…

2026/10/17 11:11:17 阅读更多 →
MapReduce父子关系挖掘:从海量数据到家族树

MapReduce父子关系挖掘:从海量数据到家族树

1. 从一个“看起来简单”的需求说起父子关系挖掘这件事,乍一听像是道送分题。不就是从一堆数据里找出谁是谁的爹吗?我最初接手这个需求的时候也是这么想的,结果真正动手才发现,坑远比想象中多。数据量一旦上到千万级甚至亿级&…

2026/10/17 11:11:17 阅读更多 →
PyCharm 集成 Claude Code 插件:安装、配置与使用指南

PyCharm 集成 Claude Code 插件:安装、配置与使用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 11:11:17 阅读更多 →
C#仓库管理系统完整源码解析:从架构到部署实战

C#仓库管理系统完整源码解析:从架构到部署实战

简介:这是一套基于C#与.NET开发的仓库管理系统完整源代码,适用于高校毕业设计、课程设计及.NET初学者进阶练习。系统覆盖销售管理、库存管理、统计报表、日常管理、系统设置等核心业务模块,并加入换班管理、单据查询、销售分析等实用功能&…

2026/10/17 11:10:17 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →