Skip to content

修复: Web 端手机查看 AI 回复撑宽页面 + 图片无法显示#200

Merged
riba2534 merged 1 commit intoriba2534:mainfrom
lx3133584:fix/mobile-chat-width-and-image-display
Mar 18, 2026
Merged

修复: Web 端手机查看 AI 回复撑宽页面 + 图片无法显示#200
riba2534 merged 1 commit intoriba2534:mainfrom
lx3133584:fix/mobile-chat-width-and-image-display

Conversation

@lx3133584
Copy link

问题描述

Web 端在手机上查看 AI 回复时存在两个问题:

  1. 页面被撑宽:AI 回复中的 Markdown 表格使用了 w-maxwidth: max-content)+ whitespace-nowrap,在手机窄屏上表格内容超出视口宽度,导致整个页面可水平滚动。
  2. 图片无法显示:AI 回复中如果包含 HTML <img> 标签,由于缺少 rehype-raw 插件,react-markdown 默认将 HTML 标签当作纯文本显示而非渲染为实际图片。同时 rehype-sanitizeimg 属性白名单依赖全局 * 属性的隐式继承,不够稳健。

修复方案

web/src/components/chat/MarkdownRenderer.tsx

手机端表格宽度

  • 移除表格的 w-max 样式,保留 min-w-full 确保表格至少填满容器宽度
  • th/td 单元格的 whitespace-nowrap break-normal 改为 break-words,允许文本在手机端自然换行
  • 表格外层容器的 overflow-x-auto 仍保留,内容确实较宽时仍可水平滚动

图片渲染

  • 在 rehype 管道中新增 rehype-raw 插件(位于 rehype-sanitize 之前),支持解析 Markdown 中嵌入的 HTML 标签
  • 仅在非 streaming 模式下启用(streaming 模式无 sanitize,不应解析不可信 HTML)
  • 显式声明 img 标签允许的属性列表(src/alt/width/height/loading/longDesc/title),不再依赖 defaultSchema 全局属性的隐式继承

web/package.json

  • 新增 rehype-raw@^7.0.0 依赖

## 问题

1. AI 回复中的表格使用 `w-max`(width: max-content)+ `whitespace-nowrap`,
   在手机屏幕上内容超出视口宽度,导致整个页面被撑宽可水平滚动。

2. AI 回复中的 HTML 图片标签(如 `<img src="...">`)无法渲染为实际图片,
   因为缺少 `rehype-raw` 插件,react-markdown 默认将 HTML 标签当纯文本显示。

## 修复方案

### 手机端宽度(MarkdownRenderer.tsx)
- 移除表格的 `w-max` 样式,保留 `min-w-full` 确保表格至少填满容器宽度
- 移除 `th`/`td` 的 `whitespace-nowrap break-normal`,改为 `break-words`
  允许单元格文本在手机端自然换行,避免表格无限撑宽
- 表格外层容器的 `overflow-x-auto` 仍保留,宽表格可水平滚动

### 图片显示(MarkdownRenderer.tsx + package.json)
- 新增 `rehype-raw` 依赖,支持解析 markdown 中嵌入的 HTML 标签
- 将 `rehype-raw` 插入 rehype 管道最前端(sanitize 之前),
  确保 HTML 先被解析、再被 `rehype-sanitize` 安全过滤
- 显式声明 `img` 标签允许的属性列表(src/alt/width/height/loading/title),
  避免依赖 defaultSchema 全局属性的隐式继承

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@lx3133584
Copy link
Author

我是手机端web用户,感觉页面问题还挺多的,想帮忙改一下

@riba2534 riba2534 merged commit ffa3760 into riba2534:main Mar 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants