.modal-title 默认不换行是因 bootstrap 5+ 设了 white-space: nowrap;强制换行需同时设 white-space: normal !important、min-width: 0、overflow-wrap: break-word 和 word-break: break-word。
模态框标题(.modal-title)默认不换行,哪怕容器很窄,文字也会溢出或被截断——这不是 bug,是 bootstrap 5+ 明确设了 white-space: nowrap。
为什么 .modal-title 死活不换行
Bootstrap 5 的 .modal-title 类自带 white-space: nowrap,且权重高,单纯加 text-wrap 或 text-break 完全无效。它还会继承父级 .modal-header 的 flex 布局行为,若没设 min-width: 0,换行更不可能触发。
-
text-wrap只作用于white-space: normal元素,对nowrap无感 -
text-break底层靠overflow-wrap: break-word,但前提是容器允许换行(即white-space不是nowrap) - 在
.modal-header这种 flex 容器里,子项(.modal-title)默认min-width: auto,会阻止内容收缩换行
强制换行的最小有效写法
不用全局覆盖,只针对需要换行的标题加一个自定义类即可:
<h4 class="modal-title title-wrap">这是一个超长的模态框标题,必须在小屏下折成两行</h4>
对应 CSS:
.title-wrap {
white-space: normal !important;
overflow-wrap: break-word;
word-break: break-word;
min-width: 0;
}
-
white-space: normal !important:干掉 Bootstrap 的nowrap,这是前提 -
min-width: 0:解决 Flex 场景下“宁可溢出也不换行”的问题 -
overflow-wrap: break-word:对 URL、邮箱等长不可分字符串友好 -
word-break: break-word:补足overflow-wrap在某些浏览器(如旧版 Safari)中的兼容性缺口
用 JavaScript 动态控制换行时机
如果只希望在屏幕宽度 ≤ 576px(xs)时才启用换行,避免中大屏标题被意外拆开,可以结合媒体查询:
@media (max-width: 576px) {
.modal-title.wrap-on-xs {
white-space: normal !important;
overflow-wrap: break-word;
word-break: break-word;
min-width: 0;
}
}
- 避免在桌面端破坏标题排版节奏
- 比 JS 切换 class 更轻量,无渲染延迟
- 注意:不要用
text-wrap替代,它没有响应式变体,加了也白加
别踩 data-bs-toggle="modal" 和换行的组合坑
如果你是用 data 属性触发 Modal(比如 data-bs-toggle="modal" data-bs-target="#myModal"),标题换行样式仍需手动加到 HTML 中——Modal 初始化过程不会自动注入换行逻辑,也不会读取任何“智能换行”配置。
- JS 初始化方式(
new bootstrap.Modal(...))同样不干预标题样式 - 别指望
modal('show')调用时顺带处理换行,它只管显示/隐藏逻辑 - 如果标题是动态插入(如通过
.innerHTML注入),记得同步加上title-wrap类,否则新内容还是nowrap
真正容易被忽略的是 min-width: 0 —— 它不出现在任何 Bootstrap 文档的换行示例里,但在现代 Flex 布局中,缺了它,white-space: normal 就像没写一样。











