惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
Spread Privacy
Spread Privacy
T
Threatpost
C
Cisco Blogs
P
Palo Alto Networks Blog
AI
AI
Cyberwarzone
Cyberwarzone
NISL@THU
NISL@THU
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
T
Tor Project blog
Latest news
Latest news
AWS News Blog
AWS News Blog
D
Docker
S
SegmentFault 最新的问题
博客园 - 聂微东
WordPress大学
WordPress大学
Vercel News
Vercel News
S
Securelist
爱范儿
爱范儿
J
Java Code Geeks
Know Your Adversary
Know Your Adversary
S
Schneier on Security
Hugging Face - Blog
Hugging Face - Blog
F
Fortinet All Blogs
Last Week in AI
Last Week in AI
D
DataBreaches.Net
宝玉的分享
宝玉的分享
D
Darknet – Hacking Tools, Hacker News & Cyber Security
MongoDB | Blog
MongoDB | Blog
Engineering at Meta
Engineering at Meta
K
Kaspersky official blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
量子位
博客园_首页
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
Google Online Security Blog
Google Online Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
腾讯CDC
T
Threat Research - Cisco Blogs
雷峰网
雷峰网
有赞技术团队
有赞技术团队
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy International News Feed
S
Security Affairs

克洛洛日记

一年回本计划 | 克洛洛日记 股票期权的Theta | 克洛洛日记 股票期权的Gamma | 克洛洛日记 股票期权的Delta | 克洛洛日记 KDJ指标 | 克洛洛日记 布林线 | 克洛洛日记 MACD指标 | 克洛洛日记 RSI指标 | 克洛洛日记 时间协议 | 克洛洛日记 聊聊Spring的stereotype注解 | 克洛洛日记 免费申请 JetBrains 全产品 License | 克洛洛日记 Aloha 一个Hexo主题 | 克洛洛日记 泰国之旅 [三] | 克洛洛日记 泰国之旅 [二] | 克洛洛日记 泰国之旅 [一] | 克洛洛日记 Nginx使用SSL证书配置https | 克洛洛日记 i18next | 克洛洛日记 错误排查:非ROOT用户使用密钥进行ssh登录提示输入密码 | 克洛洛日记 使用Github、Travis-CI和Coding.net自动部署博客[三] | 克洛洛日记 使用EditorConfig | 克洛洛日记 使用Github、Travis-CI和Coding.net自动部署博客[二] | 克洛洛日记 寓食记 | 克洛洛日记 使用Github、Travis-CI和Coding.net自动部署博客[一] | 克洛洛日记 书单 | 克洛洛日记 WebJars使用示例 | 克洛洛日记 WebJars介绍 | 克洛洛日记 Maven打jar包内容出错 | 克洛洛日记 数据分布式模型 | 克洛洛日记 Wicket的HelloWorld | 克洛洛日记 Java运行时内存结构 | 克洛洛日记 前端优化法则 | 克洛洛日记
JavaScript执行window.print()打印内容为空白 | 克洛洛日记
海拉鲁球果 <hyrul · 2016-10-08 · via 克洛洛日记

· JavaScript / HTML / CSS

今天写代码的时候,需要用到打印页面的功能,按理说只要很简单的一段js代码就可以了:

window.print();

但是很奇怪,怎么执行,要打印的页面内容都是空白!

于是一步一步分析,终于找到了罪魁祸首的代码片段:

@media print {
    body * {
        visibility: hidden;
    }
}

这段 CSS 的作用就是当媒体类型为 print 的时候,body 里面所有元素都采用样式 “visibility: hidden;”,所以解决这个问题是 把 “visibility: hidden;” 去掉就可以了。

但是这里有两点可以说:

  1. 写代码的时候,一个模块的功能不能影响到全局,这是谨慎也是需要第一位考虑的做法;
  2. CSS 的 Media Type

Media Type

Media Type 种类

Media Type 直译过来就是媒体类型,这是CSS2引入的属性,可以通过 @media 等方式给不同的媒体类型定义不同的CSS样式规则。上面讲到的,我在打印页面的时候,所处的媒体类型就是 print,一般我们在浏览网页的时候,媒体类型是 screen,W3C给出的媒体类型有以下十种(注意,名字是大小写敏感的):

  1. all 适用于所有设备。
  2. braille 用于盲文触觉反馈设备。
  3. embossed 用于分页盲文打印机。
  4. handheld 用于手持设备(通常是指有限带宽的小屏设备)。
  5. print 用于分页材料和打印预览模式下在屏幕上查看的文档。
  6. projection 用于投影机。
  7. screen 主要用于彩色计算机屏幕。
  8. speech 用于语音合成设备。
  9. tty 适用于使用固定间距字符网格(如电传打字机,终端,或具有有限显示能力的便携式设备)的媒体。在“tty”类型中不应该使用像素单元。
  10. tv 用于电视类设备(分辨率低,彩色,有限可滚动屏幕,有声音的)。

Media Type 引入方式

Media Type 有多种引入方式。

  1. @media方式引入
@media print{
  body * {
    visibility: hidden;
  }
}
这种方式在 CSS 文件中 和 style 标签里都可以使用。

2. @import方式引入

@import url("css/print.css") print;
和上一种一样,这种方式在 CSS 文件中 和 style 标签里都可以使用。

3. link方法引入

<link rel="stylesheet" type="text/css" href="../css/print.css" media="print" />
  1. xml方式引入
<?xml-stylesheet rel="stylesheet" media="screen" href="css/style.css">