CSS - Как посчитать общее количество страниц?

Я пытаюсь показать количество страниц в файле PDF.

Поэтому в шапке я поставил этот CSS:

.page-number:after { 
  counter-increment: pages; 
  content: counter(page) " of " counter(pages); 
 }

Html:

<span class="page-number">Page </span>

Но это возвращает меня Page 1 of 1... Page 2 of 2, Первый счетчик работает нормально, но итог неверен. Как я могу решить это?

4 ответа

Нет никакого способа получить итоговую сумму с помощью счетчиков CSS, поэтому я могу думать только о том, как получить требуемый результат, - это дублировать HTML (что может быть не большой проблемой, если контент генерируется динамически). Выведите HTML один раз, чтобы получить общее количество страниц, затем снова, чтобы получить текущую страницу.

#pageCounter {
  counter-reset: pageTotal;
}
#pageCounter span {
  counter-increment: pageTotal; 
}
#pageNumbers {
  counter-reset: currentPage;
}
#pageNumbers div:before { 
  counter-increment: currentPage; 
  content: "Page " counter(currentPage) " of "; 
}
#pageNumbers div:after { 
  content: counter(pageTotal); 
}
<div id="pageCounter">
  <span></span>
  <span></span>
  <span></span>
  <span></span>
</div>
<div id="pageNumbers">
  <div class="page-number"></div>
  <div class="page-number"></div>
  <div class="page-number"></div>
  <div class="page-number"></div>
</div>

Это возможно для браузера EdgeChromium. Я использую ul и li только для этого.

Я сделал:

      <ul>

<div class="footer_wrapper page_001">
    <footer><li class="page"></li></foooter>
</div>

<div class="footer_wrapper page_002">
    <footer><li class="page"></li></foooter>
</div>

<div class="footer_wrapper page_003">
    <footer><li class="page"></li></foooter>
</div>

<footerfix>
    <la class="page"></la>
<footerfix>

</ul>

с CSS

      @page {
size: A4;
margin: 0;
padding: 0;
}

footerfix 
{
    width: 210mm;
    height: 40mm;
    bottom: 0;
    z-index: 100;
}

html, body {
    width: 210mm;
    height: 297mm;
    margin: 0;
    padding: 0;
}

.footer_wrapper {
    position: fixed;
    width: 210mm;
    height: 297mm;
    margin: 0;
    padding: 0;
    left: 0mm;
    background-color: transparent;
}

footer {
    width: 210mm;
    height: 297mm;
    margin: 0;
    padding: 0;
    position: relative;
    white-space: nowrap;
    text-align: center;
    z-index: 3000;
    page-break-after: always;
    background-color: transparent;

.page_001 {
    top: 0mm;
    z-index: 3001;
}

.page_002 {
    top: 297mm;
    z-index: 3002;
}

.page_003 {
    top: calc(2*297mm);
    z-index: 3003;
}

ul {
    list-style-type: none;
    padding: 0;
    margin: 0;
    counter-reset: seite seiten;
}

li::before {
    counter-increment: seite seiten;
    content: "page "counter(seite) " / ";
}

la::after {
    content: counter(seiten);
}

.page {
    background-color: white; /*otherwise page numbers on top of each other*/
}

Мне удалось сделать это с помощью JavaScript

      <script type="text/javascript">
    window.addEventListener('load', function()
    {
        let
            doc = document,
            total = doc.querySelectorAll('.YOURPAGESELECTOR').length,
            style = doc.createElement('STYLE');

        style.innerText = `.YOURPAGESELECTOR::after {content: counter(page) "/${total}";}`;

        doc.body.appendChild(style);
    });
</script>

.page{
counter-reset: page;
}
.page .page-number{
  display:block;
  }
.page .page-number:after{
counter-increment: page;
content:counter(page);
}
.page:after{
    display: block;
    content: "Number of pages: " counter(page);
}
<div class="page">
<span class="page-number">Page </span>
<span class="page-number">Page </span>
<span class="page-number">Page </span>
<span class="page-number">Page </span>
</div>

Другие вопросы по тегам