本文介绍了设置要打印的每一页的边距/填充(html / css)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

页面上有很多内容,我无法控制它的中断位置。而且我在每个页面上使用 position:fixed 作为页眉/页脚放置了一些内容,但它们与文本重叠。我尝试通过以下两种方式使用边距和填充来解决重叠问题。

I've a lot of contents on page which i don't have control of where it breaks. And I've placed some contents using position:fixed on each page as header/footer but it overlap with text. I tried to solve the overlapping using margin and padding in following two ways.

当我使用@page添加边距时

When i added margin using @page

@page {
    margin: 2cm;
}

它可以在每个页面上显示,但是我的页眉和页脚也被选中了

It works on every page as it says, but my header and footer also taken away from margin.

所以我尝试使用正文标记来增加保证金

So I tried to adding margin using body tag

body {
    margin: 2cm;
    /* padding: 2cm; */
}

通过在首页上添加2cm的上边距和2cm的下边距来工作在最后一页。

it work by adding 2cm top margin on first page and 2cm bottom margin on last page. But not in between pages.

是否可以为每页设置边距/填充?

Is it possible to set margin/padding each page?

推荐答案

我遇到了完全相同的问题,经过大量搜索,我发现了一篇有趣的文章,提供了一种组合解决方案,您可以阅读。

I encountered exactly the same problem and after searching a lot I found an interesting article offering a combinative solution which you can read here.

简而言之,它结合了两种方法:

In short it combines two methods:


  1. 使用位置:固定技术

使用 thead tfoot tfoot

如果仅使用第一种方法,您将面临同样的问题,如果仅使用第二种方法,则页脚将停留在页面内容的底部,可能会以最后一页,但是两种方法的组合可以解决问题。

If you only use the first method you will face the overlapping issue, in the same way If you only use the second method, footer will stick to the bottom of the content of page which might ended in the begging of the last page, but combination of both methods resolves the problem.

.page-header, .page-header-space {
  height: 100px;
}

.page-footer, .page-footer-space {
  height: 50px;

}

.page-footer {
  position: fixed;
  bottom: 0;
  width: 100%;
  border-top: 1px solid black; /* for demo */
  background: yellow; /* for demo */
}

.page-footer:after {
  counter-increment: page;
  content: counter(page)
}

.page-header {
  position: fixed;
  top: 0mm;
  width: 100%;
  border-bottom: 1px solid black; /* for demo */
  background: yellow; /* for demo */
}

.page {
  page-break-after: always;
}

@page {
  margin: 20mm
}

@media print {
   thead {display: table-header-group;}
   tfoot {display: table-footer-group;}

   button {display: none;}

   body {margin: 0;}
}
<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" href="style.css" />
</head>

<body>

  <div class="page-header" style="text-align: center">
    I'm The Header
    <br/>
    <button type="button" onClick="window.print()" style="background: pink">
      PRINT ME!
    </button>
  </div>

  <div class="page-footer">
    I'm The Footer, Page #
  </div>

  <table>

    <thead>
      <tr>
        <td>
          <!--place holder for the fixed-position header-->
          <div class="page-header-space"></div>
        </td>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>
          <!--*** CONTENT GOES HERE ***-->
          <div class="page">PAGE 1</div>
          <div class="page">PAGE 2</div>
          <div class="page" style="line-height: 3;">
            PAGE 3 - Long Content
            <br/> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tincidunt metus eu consectetur rutrum. Praesent tempor facilisis dapibus. Aliquam cursus diam ac vehicula pulvinar. Integer lacinia non odio et condimentum. Aenean faucibus cursus
            mi, sed interdum turpis sagittis a. Quisque quis pellentesque mi. Ut erat eros, posuere sed scelerisque ut, pharetra vitae tellus. Suspendisse ligula sapien, laoreet ac hendrerit sit amet, viverra vel mi. Pellentesque faucibus nisl et dolor
            pharetra, vel mattis massa venenatis. Integer congue condimentum nisi, sed tincidunt velit tincidunt non. Nulla sagittis sed lorem pretium aliquam. Praesent consectetur volutpat nibh, quis pulvinar est volutpat id. Cras maximus odio posuere
            suscipit venenatis. Donec rhoncus scelerisque metus, in tempus erat rhoncus sed. Morbi massa sapien, porttitor id urna vel, volutpat blandit velit. Cras sit amet sem eros. Quisque commodo facilisis tristique. Proin pellentesque sodales rutrum.
            Vestibulum purus neque, congue vel dapibus in, venenatis ut felis. Donec et ligula enim. Sed sapien sapien, tincidunt vitae lectus quis, ultricies rhoncus mi. Nunc dapibus nulla tempus nunc interdum, sed facilisis ex pellentesque. Nunc vel
            lorem leo. Cras pharetra sodales metus. Cras lacus ex, consequat at consequat vel, laoreet ac dui. Curabitur aliquam, sapien quis congue feugiat, nisi nisl feugiat diam, sed vehicula velit nulla ac nisl. Aliquam quis nisi euismod massa blandit
            pharetra nec eget nunc. Etiam eros ante, auctor sit amet quam vel, fringilla faucibus leo. Morbi a pulvinar nulla. Praesent sed vulputate nisl. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean commodo
            mollis iaculis. Maecenas consectetur enim vitae mollis venenatis. Ut scelerisque pretium orci id laoreet. In sit amet pharetra diam. Vestibulum in molestie lorem. Nunc gravida, eros non consequat fermentum, ex orci vestibulum orci, non accumsan
            sem velit ac lectus. Vivamus malesuada lacus nec velit dignissim, ac fermentum nulla pretium. Aenean mi nisi, convallis sed tempor in, porttitor eu libero. Praesent et molestie ante. Duis suscipit vitae purus sit amet aliquam. Vestibulum lectus
            justo, lobortis a purus a, dapibus efficitur metus. Suspendisse potenti. Duis dictum ex lorem. Suspendisse nec ligula consectetur magna hendrerit ullamcorper et eget mauris. Etiam vestibulum sodales diam, eget venenatis nunc luctus quis. Ut
            fermentum placerat neque nec elementum. Praesent orci erat, rhoncus vitae est eu, dictum molestie metus. Cras et fermentum elit. Aenean eget augue lacinia, varius ante in, ullamcorper dolor. Cras viverra purus non egestas consectetur. Nulla
            nec dolor ac lectus convallis aliquet sed a metus. Suspendisse eu imperdiet nunc, id pulvinar risus. Maecenas varius sagittis est, vel fermentum risus accumsan at. Vestibulum sollicitudin dui pharetra sapien volutpat, id convallis mi vestibulum.
            Phasellus commodo sit amet lorem quis imperdiet. Proin nec diam sed urna euismod ultricies at sed urna. Quisque ornare, nulla et vehicula ultrices, massa purus vehicula urna, ac sodales lacus leo vitae mi. Sed congue placerat justo at placerat.
            Aenean suscipit fringilla vehicula. Quisque iaculis orci vitae arcu commodo maximus. Maecenas nec nunc rutrum, cursus elit quis, porttitor sapien. Sed ac hendrerit ipsum, lacinia fringilla velit. Donec ultricies feugiat dictum.
          </div>
        </td>
      </tr>
    </tbody>

    <tfoot>
      <tr>
        <td>
          <!--place holder for the fixed-position footer-->
          <div class="page-footer-space"></div>
        </td>
      </tr>
    </tfoot>

  </table>

</body>

</html>

在这里您可以看到有效的。

Here you can see a working demo.

要确保此解决方案正常运行,请尝试按打印我!(Print Me!)按钮进行打印。

To make sure this solution works properly, try to print it by pressing Print Me! button.

您甚至可能需要在页脚中添加,这是由CSS完成的同样,您只需要添加以下CSS:

You might even need to have page number in the footer, it's done by CSS too, you only need to add following CSS:

.page-footer:after {
    counter-increment: page;
    content: counter(page)
}

在某些,它是内容:计数器(页) ( counter(pages); ,但在我的情况下,页面始终无故返回0,所以我忽略了它,也许您可以通过使用CSS var()实现总页数。

In some articles it's content: counter(page) " of " counter(pages);, but in my case pages returns 0 all the time for no reason, so I ignored it, maybe you can achieve the count of total pages by using CSS var().

对于记录,如果您不想在打印之前观察页眉和页脚,则可以添加以下CSS:

For the record if you'd like not to observe the header and footer before printing you can add following CSS:

@media screen {
    .header, .footer {
        display: none;
    }
}

更新2020:

似乎页码不再起作用。

这篇关于设置要打印的每一页的边距/填充(html / css)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-04 02:33
查看更多