Изменение потока документов на разрыве страницы для заполнения пробела

При печати (или, вообще говоря, отображения документа на постраничном носителе) возможно переплавление элементов документа, так что когда какой-либо элемент (например, изображение) смещается на следующую страницу, потому что он не помещается в свободное место на фактическая страница, элементы, следующие за ней, будут перемещены в оставшееся пространство фактической страницы?

Я пытаюсь добиться эффекта, аналогичного (или так же) LaTeX Floats, но используя только CSS.

Чтобы проиллюстрировать это, скажем, у нас есть такая ситуация:

Page 1  | Paragraph A (...)   |
        | Paragraph B (...)   |
        |  _________________  |
        | | Top of image A  | |
        |_|_________________|_|

         ---- page break -----
         _____________________
Page 2  | | Rest of image A | |
        | |_________________| |
        |                     |
        | Paragraph C (...)   |
        | Paragraph D (...)   |
        |         ...         |
        |_____________________|

Используя некоторый базовый CSS (см. этот вопрос), нет проблем с этим:

Page 1  | Paragraph A (...)   |
        | Paragraph B (...)   |
        |                     |
        |                     |
        |_____________________|

         ---- page break -----
         _____________________
Page 2  |  _________________  |
        | | Image A (whole) | |
        | |                 | |
        | |_________________| |
        |                     |
        | Paragraph C (...)   |
        | Paragraph D (...)   |
        |         ...         |
        |_____________________|

Но мне действительно нужно что-то вроде этого:

Page 1  | Paragraph A (...)   |
        | Paragraph B (...)   |
        | Paragraph C (...)   |
        | Paragraph D (...)   |
        |_____________________|

         ---- page break -----
         _____________________
Page 2  |  _________________  |
        | | Image A (whole) | |
        | |                 | |
        | |_________________| |
        |         ...         |
        |_____________________|

Итак, в основном, я просто хочу заполнить все оставшееся пространство, оставшееся на фактической странице, с элементами, следующими за image A (конечно, только если они вписываются в него).

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

Я уже искал это в

  • CSS3 Paged Media,
  • Области CSS3 и
  • CSS3 Сгенерированный контент для печатных изданий

и ничего не нашел, но у меня все еще есть шанс, что я просто что-то пропустил (или вообще не понял), поэтому после двух дней Googling я предполагаю, что настало время спросить здесь: -)

<ч/" > EDIT:, чтобы еще раз пояснить: мне не нужно, чтобы решение поддерживалось в любом браузере сейчас, мне нужно знать, есть ли стандарт или спецификация что позволяет это (и если да, то как).

Ответы

Ответ 1

Это полный удар в темноте, но он может по крайней мере установить вас в правильном направлении...

Объединив селектор (n) псевдоэлемента, float/float-modifier и, возможно, родительские селектора CSS4 могут предоставить какое-то решение.

Вот несколько примеров поведения:

/* CSS3 GCPM */
#image-a::page(2) {
  page-break-before: auto;
  float: top next-page;
  margin-bottom: -320px; /* Assuming the image height is 320px */
}

/* CSS4 Parent Selector */
$#image-a ::page(2) {
  page-break-before: auto;
  float: top next-page;
  margin-bottom: -320px; /* Assuming the image height is 320px */
}

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

  • Обнаружение на второй странице обнаружено
  • Свойство page-break-before заставляет свойство float применяться ко всем элементам (или родительский селектор выполняет это задание)
  • Свойства float и margin переносят элемент из потока документов и позволяют другому содержимому принимать его в пространстве

Я знаю, что это реальный стрейч и не сработает, но, возможно, это вызовет линию мысли, позволяющую вам придумать более прочное решение:)