从浏览器打印时检测背景图像和背景颜色支持



从浏览器打印页面时,它指的是用media="print"声明的print.css样式表。浏览器禁用一些CSS规则,如background-imagebackground-color,某些浏览器可以选择启用它们。

如本答案所述,无法从页面代码中覆盖此行为。

我对此有两个问题:

  • 是否有关于这些打印规则的文档或良好的参考?例如:
    • 哪些 CSS 规则被禁用?
    • Javascript可以在打印前在页面上做一些事情吗?
  • 有没有办法使用 Javascript 检测处于打印模式的浏览器,然后制作一个优雅的降级系统?

浏览器打印页面的方式有点像黑匣子;我无法找到任何明确的参考资料。

所有主流浏览器都有打印选项,以"缩小以适应"网页到纸质页面(默认启用(,以及打印背景图像和颜色(默认禁用(。大多数用户将保留这些默认值,如果他们甚至知道这些选项的存在。我还没有看到浏览器在打印时"禁用"任何其他CSS规则。

Firefox 和 IE 支持 onbeforeprintonafterprint 事件,因此您可以使用 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]-->

相关内容

  • 没有找到相关文章

最新更新