Разрывы страниц

В устройствах с постраничной разбивкой неплохо было бы уметь влиять на размещение разрывов страниц. Управлять разрывами страниц можно спомощью свойств page-break-before и page-break-after, которые имеют один и тот же набор значений. Если задать значение по умолчанию, auto, то перед элементом или после него не будет обязательного разрыва страницы. Совсем как при обычном выводе на печать. Значение always размещает разрыв страницы перед (или за) оформляемым элементом. Предположим, ситуация такова, что заголовок документа – это элемент h1, а заголовками разделов являются элементы h2. Требуется поместить разрыв страницы прямо перед началом каждого раздела документа и после заголовка документа:

h1 {page-break-after: always;}
h2 {page-break-before: always;}

Если заголовок документа должен быть центрирован, то, конечно, надо добавить соответствующие правила. Но их здесь нет, и поэтому получается довольно простое визуальное представление каждой страницы. Принцип работы значений left и right такой же, как и у always, за исключением того, что они более подробно определяют тип страницы, на которой может быть продолжен вывод на печать:

h2 {page-break-before: left;}

В соответствии с этим правилом каждому элементу h2 будет предшествовать достаточное количество разрывов страниц, чтобы распечатка h2 начиналась сверху левой страницы, т.


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

Значение avoid подобно always, оно приказывает агенту пользователя сделать все возможное, чтобы избежать размещения разрыва страницы как перед, так и после элемента. Чтобы расширить предыдущий пример, предположим, что заголовками некоторых являются элементы h3. Эти заголовки нельзя отрывать от текста, следующего за ними, поэтому необходимо избежать разрыва страницы после h3 везде, где возможно его появление:

h3 {page-break-after: avoid;}

Однако заметьте, что значение названо avoid, а не never.


Абсолютно гарантировать, что разрыв страницы не будет вставлен перед данным элементом или после него, нельзя. Например:

img {height: 9.5in; width: 8in; page-break-before: avoid;}
h4 {page-break-after: avoid;}
h4 + img {height: 10.5in;}

Далее предположим, что h4 располагается между двумя изображениями и его вычисляемая высота составляет полдюйма. Каждое изображение придется распечатывать на отдельной странице, но h4 может располагаться только в двух местах: внизу страницы с первым элементом или на странице после него. Если он помещается после первого изображения, за ним должен следовать разрыв страницы, поскольку для второго изображения места на этой странице не остается. С другой стороны, если h4 размещается на новой странице, следующей за первым изображением, здесь не остается места для второго изображения.

Итак, после h4 возникнет разрыв страницы. И в любом случае минимум одному изображению, если не обоим, будет предшествовать разрыв страницы. Это все, что может сделать агент пользователя исходя из сложившей ситуации. Очевидно, что подобные ситуации редки, но они возможны, например, в том случае, когда документ содержит только таблицы с заголовками.


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

Аналогичные проблемы могут возникать в случае применения другого свойства для определения разрыва страниц – page-break-inside. Набор его возможных значений более ограничен, чем у родственных ему свойств. Для свойства page-break-inside у вас практически всего один вариант значения, кроме применяемого по умолчанию: можно потребовать, чтобы агент пользователя пытался избегать (avoid) размещения разрывов страниц в элементе. Если некую последовательность сносок нельзя разрывать на две страницы, то объявление может быть таким:

div.aside {page-break-inside: avoid;}

И это тоже скорее рекомендация, чем абсолютное правило. Если сноска оказывается длиннее страницы, то очевидно, что агент пользователя не сможет ничем помочь и вставит разрыв страницы в элемент.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела CSS на эту тему:
Воспроизведение речи
Выбор типов страниц
Звуковое воспроизведение заголовков таблиц
Звуковое сопровождение
Изменение высоты

Вернуться в раздел: CSS / 14. Неэкранные устройства