从浏览器打印页面时,它指的是用media="print"
声明的print.css
样式表。浏览器禁用一些CSS规则,如background-image
和background-color
,某些浏览器可以选择启用它们。
如本答案所述,无法从页面代码中覆盖此行为。
我对此有两个问题:
- 是否有关于这些打印规则的文档或良好的参考?例如:
- 哪些 CSS 规则被禁用?
- Javascript可以在打印前在页面上做一些事情吗?
- 有没有办法使用 Javascript 检测处于打印模式的浏览器,然后制作一个优雅的降级系统?
浏览器打印页面的方式有点像黑匣子;我无法找到任何明确的参考资料。
所有主流浏览器都有打印选项,以"缩小以适应"网页到纸质页面(默认启用(,以及打印背景图像和颜色(默认禁用(。大多数用户将保留这些默认值,如果他们甚至知道这些选项的存在。我还没有看到浏览器在打印时"禁用"任何其他CSS规则。
Firefox 和 IE 支持 onbeforeprint
和 onafterprint
事件,因此您可以使用 JavaScript 检测何时进行打印,尽管显然这不是跨浏览器解决方案。
所需的大多数调整都可以由CSS处理(在单独的打印样式表中或作为主样式表中的@media print { ... }
块(:
CSS-Discuss Wiki 有一个很好的页面,告诉你可以通过 CSS 控制多少。
我建议看看HTML5样板的打印样式作为一个很好的起点。
如果您有必须打印的背景图像,则可以在页面中包含
<img>
元素,用display: none
隐藏,然后在打印CSS中使用display: block
(或inline
(使它们可见。
如果您需要大量修改页面以进行打印,我建议您提供页面的单独仅打印版本,而不是尝试使用 JavaScript 进行调整。
不确定第一点,但要在打印模式下检测浏览器,您可以执行与屏幕相同的操作。使用 Modernizr 并有条件地为支持的功能添加类,然后创建有针对性的 CSS 规则,例如:
body.whateverfeature .yourrule { }
或者,如果只是您要测试的IE,请使用类似h5bp的内容:
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->