You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现mat-expansion-panel中过长XML消息自动换行不溢出

mat-expansion-panel内XML长文本自动换行方案

问题根源

样式不生效的核心原因:

  • 换行相关CSS仅添加在外层.panel容器上,但<pre>标签自带浏览器默认样式white-space: pre,默认不自动折行,外层样式优先级低于标签默认样式,无法继承生效
  • 仅设置white-space无法处理无空格的连续长文本(如XML长属性值、无分隔的标签内容),这类内容会直接撑破容器边界
  • Angular Material expansion panel的内部内容区.mat-expansion-panel-body自带默认内边距和布局规则,容易导致子元素宽度计算溢出

实现步骤

  1. 模板代码不需要调整,保留<pre>标签即可(该标签可以完美保留vkbeautify格式化后的XML缩进、换行结构,比<p>标签更适合展示代码类内容)
<mat-expansion-panel class="panel">
  <pre>{{pretty(message.content)}}</pre>
</mat-expansion-panel>
  1. 替换原有样式代码,重点给内部<pre>标签和Material面板内容区设置正确的换行规则:
.panel {
  max-height: 80vh;
  width: 1000px;
  overflow: auto;
}

/* 核心:pre标签换行规则 */
.panel pre {
  /* 保留预格式化的缩进、换行,同时允许内容超出宽度时自动折行 */
  white-space: pre-wrap;
  /* 兼容多浏览器的pre-wrap属性 */
  white-space: -moz-pre-wrap;
  white-space: -o-pre-wrap;
  /* 强制连续无分隔长字符串在容器边界处断行,避免撑破容器 */
  word-wrap: break-word;
  word-break: break-all;
  /* 固定pre宽度不超过父容器,内边距计算入宽度内 */
  width: 100%;
  box-sizing: border-box;
  padding: 16px;
  margin: 0;
  /* 隐藏横向溢出,不需要横向滚动条 */
  overflow-x: hidden;
}

/* 覆盖Material组件默认内容区样式,避免宽度溢出 */
.panel .mat-expansion-panel-body {
  overflow-x: hidden;
  padding: 0;
}
  1. 原有的TS格式化方法不需要改动,vkbeautify生成的XML缩进、换行结构会被完整保留,长内容会自动向下排布,不会超出面板边界。

效果说明

  • 格式化后的XML缩进、换行结构完全保留,和原pre展示效果一致
  • 超长文本、无空格的长属性值会自动在面板边界处折行,不会出现横向溢出
  • 内容高度超过80vh时,面板会自动出现纵向滚动条,不破坏页面布局

内容的提问来源于stack exchange,提问作者podehi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 22:54:25