JavaScript执行window.print()打印内容为空白
今天写代码的时候,需要用到打印页面的功能,按理说只要很简单的一段js代码就可以了:
1 | window.print(); |
但是很奇怪,怎么执行,要打印的页面内容都是空白!
于是一步一步分析,终于找到了罪魁祸首的代码片段:
1 | @media print { |
这段 CSS 的作用就是当媒体类型为 print 的时候,body 里面所有元素都采用样式 “visibility: hidden;”,所以解决这个问题是
把 “visibility: hidden;” 去掉就可以了。
但是这里有两点可以说:
- 写代码的时候,一个模块的功能不能影响到全局,这是谨慎也是需要第一位考虑的做法;
- CSS 的 Media Type
Media Type
Media Type 种类
Media Type 直译过来就是媒体类型,这是CSS2引入的属性,可以通过 @media 等方式给不同的媒体类型定义不同的CSS样式规则。上面讲到的,我在打印页面的时候,所处的媒体类型就是 print,一般我们在浏览网页的时候,媒体类型是 screen,W3C给出的媒体类型有以下十种(注意,名字是大小写敏感的):
- all
适用于所有设备。 - braille
用于盲文触觉反馈设备。 - embossed
用于分页盲文打印机。 - handheld
用于手持设备(通常是指有限带宽的小屏设备)。 - print
用于分页材料和打印预览模式下在屏幕上查看的文档。 - projection
用于投影机。 - screen
主要用于彩色计算机屏幕。 - speech
用于语音合成设备。 - tty
适用于使用固定间距字符网格(如电传打字机,终端,或具有有限显示能力的便携式设备)的媒体。在“tty”类型中不应该使用像素单元。 - tv
用于电视类设备(分辨率低,彩色,有限可滚动屏幕,有声音的)。
Media Type 引入方式
Media Type 有多种引入方式。
@media方式引入
1
2
3
4
5@media print{
body * {
visibility: hidden;
}
}这种方式在 CSS 文件中 和 style 标签里都可以使用。
@import方式引入
1
@import url("css/print.css") print;
和上一种一样,这种方式在 CSS 文件中 和 style 标签里都可以使用。
link方法引入
1
<link rel="stylesheet" type="text/css" href="../css/print.css" media="print" />
xml方式引入
1