Javascript如何实现页面打印_如何控制打印样式?
发布时间 - 2026-01-01 00:00:00 点击率:次window.print()触发打印并配合@media print样式控制输出效果,需隐藏无关元素、强制分页、适配黑白打印、启用背景色打印,调试推荐PDF预览与媒体模拟。
JavaScript 实现页面打印,核心是调用 window.print(),但真正控制“打出来长什么样”,靠的是 CSS 的 @media print 规则。不写专门的打印样式,浏览器会按屏幕样式直接输出,常出现页眉页脚混乱、内容被截断、无关元素(如按钮、广告)也被印出等问题。
用 window.print() 触发打印
这是最基础的一步,只需一行代码:
window.print();
它会打开系统打印对话框(含预览),用户确认后执行打印。注意:该方法必须由用户手势(如点击)触发,不能在页面加载或异步回调中自动调用,否则现代浏览器会静默拦截。
用 @media print 定义打印专属样式
在 CSS 中写针对打印设备的规则,只在打印时生效,不影响屏幕显示:
- 隐藏不需要打印的元素:
@media print { .no-print, .header-nav, #ad-banner { display: none !important; } } - 强制分页(避免表格/卡片跨页断裂):
@media print { .invoice-item { page-break-inside: avoid; } }
(也可用break-inside: avoid,后者是新标准,兼容性稍差) - 调整字体大小和颜色以适配黑白打印机:
@media print { body { font-size: 12pt; color: #000; } a { color: #000; text-decoration: none; } } - 确保背景色和图片可打印(默认多数浏览器禁用):
@media print { * { -webkit-print-color-adjust: exact; print-color-adjust: exact; } }
这行能强制打印背景色和图片(需配合background: #fff或background-image显式设置)
打印前临时修改 DOM(进阶控制)
若需更灵活控制(比如只打印某个区域、动态加水印),可在调用 print() 前操作 DOM:
- 仅打印指定容器:
先document.body.innerHTML = document.getElementById('print-section').innerHTML;,再print();但注意会丢失样式和脚本——更稳妥做法是用一个隐藏的注入内容和样式,再对 iframe 调用print() - 添加打印时间/页码等动态信息:
在@media print中用伪元素 +content配合counter()实现页码;时间戳建议在打印前用 JS 插入到 DOM 中(如打印时间:2025-),并在
06-15@media print中设为可见
调试打印效果的小技巧
Chrome / Edge 支持“另存为 PDF”作为打印输出,这是最方便的调试方式:
- 打开开发者工具 → 切换到「Rendering」面板 → 勾选 “Emulate CSS media type” → 选择 “print” → 页面即刻呈现打印样式预览
- Ctrl+P(Cmd+P)打开打印预览,勾选“保存为 PDF”,反复生成查看分页、留白、字体是否正常
- 避免使用 Flex/Grid 复杂布局做打印主体——部分老打印机驱动对它们支持不佳,优先用块级流式布局 + 显式宽高
# css
# javascript
# java
# html
# js
# 伪元素
# 浏览器
# edge
# 打印机
# 工具
# pdf
# win
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
三星网站视频制作教程下载,三星w23网页如何全屏?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
如何快速生成凡客建站的专业级图册?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
如何快速搭建高效WAP手机网站吸引移动用户?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
昵图网官方站入口 昵图网素材图库官网入口
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
jQuery 常见小例汇总
利用vue写todolist单页应用
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
Laravel如何与Inertia.js和Vue/React构建现代单页应用
Laravel如何使用withoutEvents方法临时禁用模型事件
javascript读取文本节点方法小结
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
如何快速搭建FTP站点实现文件共享?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
高端云建站费用究竟需要多少预算?
IOS倒计时设置UIButton标题title的抖动问题
大型企业网站制作流程,做网站需要注册公司吗?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
javascript中闭包概念与用法深入理解
北京专业网站制作设计师招聘,北京白云观官方网站?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
如何快速搭建个人网站并优化SEO?
Swift中switch语句区间和元组模式匹配
高防服务器如何保障网站安全无虞?
中国移动官方网站首页入口 中国移动官网网页登录
如何在阿里云高效完成企业建站全流程?
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
bootstrap日历插件datetimepicker使用方法
JS去除重复并统计数量的实现方法
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
如何彻底卸载建站之星软件?
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
如何用腾讯建站主机快速创建免费网站?
如何在橙子建站中快速调整背景颜色?
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
Laravel如何实现用户注册和登录?(Auth脚手架指南)
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
JavaScript中的标签模板是什么_它如何扩展字符串功能
如何用IIS7快速搭建并优化网站站点?
如何在IIS7中新建站点?详细步骤解析


06-15