搜尋

首頁  >  問答  >  主體

如何為每一頁列印設定邊距/填充(HTML/CSS)?

我的頁面上有很多內容,但我無法控制它在哪裡中斷。我在每個頁面上使用 position:fixed 作為頁首/頁腳放置了一些內容,但它與文字重疊。我嘗試透過以下兩種方式使用邊距和填充來解決重疊問題。

當我使用@page新增邊距時

@page {
    margin: 2cm;
}

正如它所說,它適用於每個頁面,但我的頁首和頁腳也從邊距中消失了。

所以我嘗試使用 body 標籤來新增邊距

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

它的工作原理是在第一頁上添加 2 公分的上邊距,在最後一頁上添加 2 公分的下邊距。但不在頁面之間。

是否可以設定每頁的邊距/填滿?

P粉937769356P粉937769356401 天前919

全部回覆(1)我來回復

  • P粉996763314

    P粉9967633142023-10-21 16:34:32

    我遇到了完全相同的問題,經過大量搜尋後,我發現了一篇有趣的文章,提供了一個組合解決方案,您可以閱讀這裡

    簡而言之,它結合了兩種方法:

    1. 使用位置:固定技術

    2. 使用thead tbody tfoot

    #如果您只使用第一種方法,您將面臨重疊問題,同樣,如果您只使用第二種方法,頁腳將粘在頁面內容的底部,可能會在最後一頁的開頭結束,但是結合這兩種方法可以解決問題。

    .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>

    在這裡您可以看到一個有效的演示

    為確保此解決方案正常運作,請嘗試按下Print Me! 按鈕進行列印。

    您甚至可能需要在頁腳中添加頁碼,這也是由CSS完成的,您只需要添加以下 CSS:

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

    在某些文章中,它是內容: counter(page) " of " counter(pages);,但是在我的範例中,pages無緣無故一直回傳0,所以我忽略了它,也許你可以實現計數使用CSS var() 計算總頁數。

    鄭重聲明,如果您不想在列印前觀察頁首和頁腳,可以添加以下 CSS:

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

    2020 年更新:

    頁碼似乎不再運作了。

    回覆
    0
  • 取消回覆