Выбор последнего элемента на странице (выгружаемый медиафайл)

Я хочу выбрать последний элемент на печатной странице. Например, учитывая этот HTML (при условии, что напечатанная страница имеет высоту 100 пикселей):

<!-- other content before -->

<div id="TheThing">
  <section id="a">Some content</section>
  <section id="b">Some content</section>
  <section id="c">This will be the last section on the page</section>
  <section id="d">This section will start on the next page</section>
  <section id="e">This is the last section</section>
</div>

<!-- other content after -->

и этот CSS:

#TheThing {
  page-break-before: always;
  page-break-after: always;
}

section {
  height: 30px;
  border-bottom: solid 1px black;
  page-break-inside: avoid;
}

Я хочу иметь возможность выбирать последний элемент на каждой печатной странице, в данном случае #c (а также #e, хотя при необходимости это можно было бы легко исключить с помощью :not(:last-child)) и удалять его границу.

Приблизительный желаемый результат:

Желаемый результат

В настоящее время я использую Prince XML. Я предпочитаю не делать с этим JavaScript.

Является ли это возможным?


person DJL    schedule 06.09.2017    source источник
comment
Вы пытались поместить необходимые правила CSS в медиа-запрос @media print {}. Подробнее см. здесь.   -  person Dimitris Damilos    schedule 06.09.2017
comment
Я не вижу, как здесь поможет медиа-запрос. Можете ли вы расширить?   -  person DJL    schedule 06.09.2017
comment
Я опубликую это как ответ ниже   -  person Dimitris Damilos    schedule 06.09.2017
comment
Основатель и ведущий программист Prince заявил на своем форуме, что это невозможно без JavaScript и двойного запуска документа через Prince. Извините :( princexml.com/forum/topic/3672/   -  person jamespaden    schedule 07.09.2017
comment
Этого ответа я и боялся, и ожидал. Спасибо. Если вы сделаете это полным ответом, я приму его.   -  person DJL    schedule 07.09.2017


Ответы (2)


Основатель и ведущий программист Prince заявил на своем форуме, что это невозможно без JavaScript и двойного запуска документа через Prince. Извините :(

https://www.princexml.com/forum/topic/3672/how-to-select-the-last-tr-element-of-a-page-when-it-breaks

person jamespaden    schedule 09.09.2017

Я не думаю, что это можно контролировать. Основная причина в том, что не существует такого понятия, как «последний на странице», потому что в зависимости от бумаги, на которой вы печатаете, может быть больше элементов, и это происходит после того, как CSS применяется к элементам HTML, и ваш документ не имеет способ доступа к этой информации.

Но, если вы сами знаете на 100%, какой тип бумаги вы будете использовать для печати, скажем, А4, вы можете установить высоту для родительского и дочернего элементов, а затем с помощью простого псевдоселектора :nth-child() вы сможете управлять какой из них выбрать, чтобы применить стиль. Это потому, что вы знаете высоту A4, поэтому вы можете точно предсказать, предполагая, что ни один из них не добавит никаких других параметров на страницу предварительного просмотра (например, масштабирование и т. Д.). Кроме того, вы можете поместить этот CSS внутри @media print, чтобы он применялся только к печатным страницам.

person Dimitris Damilos    schedule 06.09.2017
comment
Что ж, в моем фактическом документе элементы не имеют фиксированного размера, я сделал это только для того, чтобы продемонстрировать вопрос. Так что nth-child не будет работать по этой причине. В любом случае, я не говорю здесь о печати из браузера, я говорю о преобразовании PDF, поэтому ваше утверждение, что это происходит после применения CSS к элементам HTML, и ваш документ не имеет доступа к этой информации . это неверно. Например, CSS в Prince может находить номера страниц элементов, которые появляются позже в документе (target-counter, что браузеры обычно не могут делать. - person DJL; 06.09.2017
comment
Ах я вижу. Ну, это не было ясно из первоначального вопроса. Я постараюсь найти что-нибудь, чтобы помочь вам. Четыре глаза лучше, чем два. - person Dimitris Damilos; 06.09.2017