我正在使用单独的样式表进行打印。是否可以在样式表中设置右边距和左边距,以设置打印边距(即纸张上的边距)。
感谢。
答案 0 :(得分:209)
指定打印时,应使用cm
或mm
作为单位。使用像素将导致浏览器将其转换为类似于屏幕上的内容。使用cm
或mm
可确保纸张尺寸一致。
body
{
margin: 25mm 25mm 25mm 25mm;
}
对于字体大小,请使用pt
作为打印介质。
请注意,在css样式中设置主体上的边距将不调整打印机驱动程序中定义打印机可打印区域的边距,或由浏览器控制的边距(可在在某些浏览器上打印预览)...它只会在可打印区域内的文档上设置边距。
您还应该知道IE7 ++会自动调整大小以使其最适合,即使您使用cm
或mm
也会导致一切错误。要覆盖此行为,用户必须选择“打印预览”,然后将打印尺寸设置为100%
(默认为Shrink To Fit
)。
完全控制打印边距的更好选项是使用@page
指令设置纸张边距,这将影响html body元素外部的纸张边距,通常由浏览器控制。见http://www.w3.org/TR/1998/REC-CSS2-19980512/page.html。
这目前适用于除Safari之外的所有主流浏览器
在Internet Explorer中,边距实际上在此打印的设置中设置为此值,如果您执行预览,则会将其设置为默认值,但用户可以在预览中更改它。
@page
{
size: auto; /* auto is the initial value */
/* this affects the margin in the printer settings */
margin: 25mm 25mm 25mm 25mm;
}
body
{
/* this affects the margin on the content before sending to printer */
margin: 0px;
}
相关答案: Disabling browser print options (headers, footers, margins) from page?
答案 1 :(得分:19)
首先说,我尝试强制所有用户在打印时使用Chrome,因为其他浏览器会创建不同的布局。
this question的答案建议:
@page {
size: 210mm 297mm;
/* Chrome sets own margins, we change these printer settings */
margin: 27mm 16mm 27mm 16mm;
}
然而,我最终使用这个CSS来打印我的所有页面:
@media print
{
@page {
size: A4; /* DIN A4 standard, Europe */
margin:0;
}
html, body {
width: 210mm;
/* height: 297mm; */
height: 282mm;
font-size: 11px;
background: #FFF;
overflow:visible;
}
body {
padding-top:15mm;
}
}
特例:长表
当我需要在多个页面上打印表格时,margin:0
和@page
导致出现边缘:
我可以通过this answer来解决这个问题:
table { page-break-inside:auto }
tr { page-break-inside:avoid; page-break-after:auto }
thead { display:table-header-group }
tfoot { display:table-footer-group }
另外设置@page
的上下边距:
@page {
size: auto;
margin: 20mm 0 10mm 0;
}
body {
margin:0;
padding:0;
}
结果:
我宁愿选择简洁且适用于所有浏览器的解决方案。目前,我希望上面的信息可以帮助一些开发人员遇到类似的问题。
答案 2 :(得分:9)
我个人建议使用与px
不同的度量单位。我不认为像素在印刷方面有很大的相关性;理想情况下你会使用:
我确定还有其他人,可以在这里找到一篇关于print-css的优秀文章:Going to Print,Eric Meyer。
答案 3 :(得分:8)
更新,简单的解决方案
@media print {
body {
display: table;
table-layout: fixed;
padding-top: 2.5cm;
padding-bottom: 2.5cm;
height: auto;
}
}
旧解决方案
为每个页面创建部分,并使用以下代码调整边距,高度和宽度。
如果要打印A4尺寸。
然后是用户
尺寸:8.27英寸和11.69英寸
@page Section1 {
size: 8.27in 11.69in;
margin: .5in .5in .5in .5in;
mso-header-margin: .5in;
mso-footer-margin: .5in;
mso-paper-source: 0;
}
div.Section1 {
page: Section1;
}
然后创建一个包含所有内容的div。
<div class="Section1">
type your content here...
</div>
答案 4 :(得分:1)
我还建议使用pt与cm或mm,因为它更精确。 此外,我无法让@page在Chrome中工作(版本30.0.1599.69 m)它忽略了我为边距设置的任何内容,无论大小。但是,您可以使用它来处理文档的正文边缘,这很奇怪。
答案 5 :(得分:0)
如果您知道目标纸张尺寸,则可以将内容放在具有该特定尺寸的DIV中,并为该DIV添加边距以模拟打印边距。 不幸的是,除了显示打印对话框之外,我不相信你对打印功能有额外的控制。