CSS-макет печати с фиксированными верхним и нижним колонтитулами, а также с содержимым, которое переносится из левого столбца в правый перед переходом на следующую страницу - PullRequest
2 голосов
/ 04 апреля 2019

Я пытаюсь собрать некоторые HTML и CSS, что при печати документа в Chrome:

  • Отображение фиксированного верхнего и нижнего колонтитула на каждой странице
  • Показать 2 столбца информации. В идеале эти столбцы будут перемещаться слева направо, прежде чем перейти на следующую страницу.

Я попытался адаптировать это хорошее руководство , в котором используются фиксированные верхние и нижние колонтитулы с проставками в thead и tfoot. Ниже приведен мой фрагмент кода, близкий к тому, что я хочу (нажмите кнопку ПЕЧАТЬ МЕНЯ, чтобы увидеть макет печати):

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

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

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

.page-header {
  position: fixed;
  top: 0mm;
  width: 100%;
  border-bottom: 1px solid rgb(22, 7, 7); /* for demo */
}

.two-column {
  column-count: 2;
}

h2 {
  margin: 0
}

table {
  width: 100%
}

.content {
  width: 100%;
  height: 75px;
  border: 1px solid blue;
  break-inside: avoid;
  display: flex;
  align-items: center;
  justify-content: center;
}


@page {
  margin: 20mm;
  size: 'A4';
  
}

@media print {
   thead {display: table-header-group;} 
   tfoot {display: table-footer-group;}
   
   button {display: none;}
   
   body {margin: 0;}
}
<html>
<head>
</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
</div>

        <table>
         <thead>
            <tr>
              <td>
                <div class="page-header-space"></div>
              </td>
            </tr>
         </thead>

          <tbody>
            <tr>
              <td>
                 <div class='two-column'>
                  <div class='content'>1</div>
                  <div class='content'>2</div>
                  <div class='content'>3</div>
                  <div class='content'>4</div>
                  <div class='content'>5</div>
                  <div class='content'>6</div>
                  <div class='content'>7</div>
                  <div class='content'>8</div>
                  <div class='content'>9</div>
                  <div class='content'>10</div>
                  <div class='content'>11</div>
                  <div class='content'>12</div>
                  <div class='content'>13</div>
                  <div class='content'>14</div>
                  <div class='content'>15</div>
                  <div class='content'>16</div>
                  <div class='content'>17</div>
                  <div class='content'>18</div>
                  <div class='content'>19</div>
                  <div class='content'>20</div>
                  <div class='content'>21</div>
                  <div class='content'>22</div>
                  <div class='content'>23</div>
                  <div class='content'>24</div>
                  <div class='content'>25</div>
                  <div class='content'>26</div>
                  <div class='content'>27</div>
                  <div class='content'>28</div>
                  <div class='content'>29</div>
                  <div class='content'>30</div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  
                 </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>

Проблема заключается в том, что когда в предварительном просмотре печати разрывается первый столбец, в верхней части второго столбца появляется дополнительное пространство размером 100 пикселей. Я подозреваю, что это потому, что thead как-то «повторяется» на разрыве столбца, а также на разрыве страницы:

enter image description here

Есть ли способ избежать этого?

Меня также волнует только достижение этого в последнем браузере Chrome.

Спасибо.

1 Ответ

0 голосов
/ 04 апреля 2019

Cut " page-footer " div и вставьте его в последнюю часть тела и создайте новый div для секции таблицы, как показано ниже

<html>
<head>
</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>
        <table>
         <thead>
            <tr>
              <td>
                <div class="page-header-space"></div>
              </td>
            </tr>
         </thead>

          <tbody>
            <tr>
              <td>
                 <div class='two-column'>
                  <div class='content'>1</div>
                  <div class='content'>2</div>
                  <div class='content'>3</div>
                  <div class='content'>4</div>
                  <div class='content'>5</div>
                  <div class='content'>6</div>
                  <div class='content'>7</div>
                  <div class='content'>8</div>
                  <div class='content'>9</div>
                  <div class='content'>10</div>
                  <div class='content'>11</div>
                  <div class='content'>12</div>
                  <div class='content'>13</div>
                  <div class='content'>14</div>
                  <div class='content'>15</div>
                  <div class='content'>16</div>
                  <div class='content'>17</div>
                  <div class='content'>18</div>
                  <div class='content'>19</div>
                  <div class='content'>20</div>
                  <div class='content'>21</div>
                  <div class='content'>22</div>
                  <div class='content'>23</div>
                  <div class='content'>24</div>
                  <div class='content'>25</div>
                  <div class='content'>26</div>
                  <div class='content'>27</div>
                  <div class='content'>28</div>
                  <div class='content'>29</div>
                  <div class='content'>30</div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>
                  <div class='content'></div>

                 </div>
              </td>
             </tr>
          </tbody>

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

  </div>

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


</body>          
</html>
...