我公司正在使用print.css进行打印。另外,我们有另一个style.css覆盖任何其他.css文件,包括print.css。出于某种原因,当来自html5样板(位于覆盖文件中)的@media打印查询打开时,IE8和IE9正在打印空白页。当它被注释掉时,没有问题。这是什么问题?我们想从样板文件中留下@media print。
PRINT.CSS
@media print
{
body *
{
visibility:hidden;
}
#basicShell #main,
#basicShell #main *,
.basicShell_container .content,
.basicShell_container .content *,
#mainShell_container .center_columnContent,
#mainShell_container .center_columnContent *
{
visibility:visible;
}
#basicShell #main,
.basicShell_container .content,
#mainShell_container .center_columnContent
{
position:absolute;
left:0;
top:0;
}
}
STYLE.CSS(覆盖所有内容)
@media print {
* { background: transparent !important; color: black !important; text-shadow: none
!important; filter:none !important; -ms-filter: none !important; float: none
!important;} /* Black prints faster: h5bp.com/s */
a, a:visited { text-decoration: underline; }
a[href]:after { content: " (" attr(href) ")"; }
abbr[title]:after { content: " (" attr(title) ")"; }
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /*
Don't show links for images, or javascript/internal links */
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
thead { display: table-header-group; } /* h5bp.com/t */
tr, img { page-break-inside: avoid; }
img { max-width: 100% !important; }
@page { margin: 0.5cm; }
p, h2, h3 { orphans: 3; widows: 3; }
h2, h3 { page-break-after: avoid; }
}
答案 0 :(得分:6)
我遇到了与HTML5 Boilerplate相同的问题。
就我而言,事实证明是这一行:
tr { page-break-inside: avoid; }
导致IE8 / 9中的空白页面。该页面在标签中有大量内容(超过一页的价值),IE决定通过跳过页面并切断内容来处理它。呸。
为了避免弄乱HTML5 Boilerplate,我在自己的样式表中添加了以下内容,并解决了问题:
tr { page-break-inside: auto; }
您的问题可能是由于标记不同,因此请检查设置page-break-inside属性的任何内容。
答案 1 :(得分:1)
print.css中的第一条规则使body
的所有子元素都不可见。意图似乎是将一些元素变为可见,但显然这是失败的,可能是因为标记(未公开)不以预期的方式使用id
和class
属性。
答案 2 :(得分:1)
您必须考虑在您的网站中加载的样式表的优先级。目前,您已在print.css
样式表中声明了这一点:
body * {
visibility:hidden;
}
该规则基本上隐藏了文档中的“所有内容”。您提到styles.css
样式表应该覆盖所有内容,但是样式表在标题中加载的顺序是什么?如果print.css表位于style.css表之后,则第一个的规则将被采用。
您的链接参考中也包含media
类型的情况,我不知道哪个类型具有更好的优先级;链接媒体类型或媒体查询。