bootstrap 5 默认不支持打印隐藏类,d-none 在打印时也生效,d-print-none 因 cdn 未启用 print styles 而缺失;可靠做法是自定义 .no-print 类并用 @media print { .no-print { display: none !important; } } 确保覆盖 bootstrap 的兜底规则。

Bootstrap 5 没有内置的打印隐藏类可用,必须手写 @media print 规则,且几乎 always 要加 !important。
为什么 d-none 和 d-print-none 不可靠?
d-none 在所有媒介(包括打印)下都生效,它等价于 @media all { display: none !important; } —— 打印时你想保留的内容可能被误杀。d-print-none 理论上只在打印时隐藏,但它依赖 Sass 变量 $enable-print-styles: true,而 CDN 引入的 Bootstrap 5 CSS 默认不编译该部分,所以实际加载后这个类根本不存在。
常见错误现象:写了 class="d-print-none",DevTools 里也看到类名,但打印预览中元素照常显示——不是你代码写错了,是 CSS 根本没生成。
- 检查你的 Bootstrap 构建方式:Sass 编译?CDN?是否启用了 print utilities
- 用 Chrome DevTools → “Computed” 面板,看目标元素在
print媒介下的display最终值 - 别猜,直接查:搜索页面源码里有没有
@media print .d-print-none这段规则
怎么写才真正生效的 @media print 规则?
最简、最稳的做法是定义自己的类(比如 .no-print),并在 @media print 中强制隐藏:
@media print {
.no-print {
display: none !important;
}
}
关键点不是“写没写”,而是“有没有压过 Bootstrap 的兜底规则”。Bootstrap 5 的打印样式里有一条 body * { visibility: hidden; },它会让所有子元素默认不可见;如果你的规则没 !important,或者选择器不够具体,就会被这条覆盖。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- 把这段 CSS 放在你自己的样式表末尾,确保加载顺序在 Bootstrap 之后
- 避免只用
.no-print { display: none; }—— 少了!important就大概率失效 - 不要用 ID 选择器(如
#header),改用语义化 class(如.app-header),便于复用和维护
敏感信息在表格或卡片里怎么精准隐藏?
别对整个 <table> 或 <code><div class="card"> 加 <code>.no-print —— 往往只需要藏一列(如“身份证号”)、一行(如“操作”列)、或某个 <span></span>(如“内部编号”)。
示例:隐藏表格中第 3 列(索引从 1 开始):
@media print {
table tr td:nth-child(3),
table tr th:nth-child(3) {
display: none !important;
}
}
注意:如果表格用了 Bootstrap 的 .table 类,且设置了 border-collapse: collapse,直接隐藏某列可能导致边框错位。此时建议给该列单元格加 class(如 class="no-print-col"),再针对性隐藏,更可控。
- 对卡片内某段文字隐藏:给对应
<p></p>或<span></span>加.no-print,别动整个.card-body - 隐藏按钮但保留其功能逻辑?JS 事件绑定不受影响,
display: none只影响渲染 - 如果用了
position: sticky或fixed的页眉/页脚,它们在打印中行为不稳定,建议单独处理
调试时最容易被忽略的三件事
Chrome 的打印预览 ≠ 实际 PDF 输出,也不等于真实打印机行为。很多“看起来没问题”的样式,在导出 PDF 时会暴露问题。
- 用
Ctrl+Shift+P(Win)或Cmd+Shift+P(Mac)打开命令菜单,输入 “Rendering”,勾选 “Emulate CSS media type: print” —— 这才是实时验证的关键 - 检查是否有多份
@media print块(比如第三方库、插件自带的),后加载的会覆盖前面的规则 - 内联样式优先级高于 class,如果元素有
style="display: block !important",你的.no-print就完全无效
真正起作用的从来不是“用了哪个类”,而是最终计算出的 display 值是否为 none,以及它是否在 print 媒介下生效。其他都是干扰项。










