Поиск

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

В следующих разделах описана модель форматирования страницы, используемая в CSS2. Для указания агенту пользователя места, где он может или должен осуществить разрыв страницы, и страницы (левой или правой), на которой он должен продолжить вывод содержимого, используется пять различных свойств. Каждый разрыв страницы прерывает отображение содержимого в текущем страничном блоке и инициирует вывод оставшейся части дерева документа в новом страничном блоке.

Разрывы до и после элементов: 'page-break-before', 'page-break-after', 'page-break-inside'
'page-break-before'

Значение: auto | always | avoid | left | right | наследуемое
Начальное значение: auto
Область применения: элементы структурного уровня
Наследование: нет
Процентное задание: N/A
Устройства: визуального форматирования, с постраничной разбивкой

'page-break-after'

Значение: auto | always | avoid | left | right | наследуемое
Начальное значение: auto
Область применения: элементы структурного уровня
Наследование: нет
Процентное задание: N/A
Устройства: визуального форматирования, с постраничной разбивкой

'page-break-inside'< br>

Значение: avoid | auto | наследуемое
Начальное значение: auto
Область применения: элементы структурного уровня
Наследование: да
Процентное задание: N/A
Устройства: визуального форматирования, с постраничной разбивкой

Значения данных свойств имеют следующий смысл:

auto

Не инициирует и не запрещает разрыва страницы до (после или внутри) генерируемого блока.

always

Всегда инициирует разрыв страницы до (после) генерируемого блока.

avoid

Отменяет разрыв страницы до (после или внутри) генерируемого блока.

left

Инициирует один или два разрыва страниц до (после) генерируемого блока, так что следующая страница форматируется как левая страница.

right

Инициирует один или два разрыва страниц до (после) генерируемого блока, так что следующая страница форматируется как правая страница.

Потенциально возможное местоположение разрыва страницы определяется свойством 'page-break-inside' родительского элемента, свойством 'page-break-after' предшествующего элемента и свойством 'page-break-before' последующего элемента. Если значения этих свойств отличны от 'auto', то значения 'always', 'left' и 'right' превосходят по приоритету значение 'avoid'. В разделе о допустимых разрывах страниц указаны четкие правила, позволяющие инициировать или запрещать разрывы страниц с помощью этих свойств.

Использование именованных страниц: 'page'
'page'

Значение: <идентификатор> | auto
Начальное значение: auto
Область применения: элементы структурного уровня
Наследование: да
Процентное задание: N/A
Устройства: визуального форматирования, с постраничной разбивкой

Свойство 'page' может использоваться для определения конкретного типа страницы, на которой будет отображен элемент.

В этом примере все таблицы будут помещены по правую сторону страницы (называемой "rotated"), имеющей альбомную ориентацию:

@page rotated {size: landscape}
TABLE {page: rotated; page-break-before: right}

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

В следующем примере две таблицы отображаются на страницах с альбомной ориентацией (естественно, на одной и той же странице, если они обе умещаются на ней), тип страницы "narrow" не используется вообще, несмотря на то, что он установлен для элемента DIV.

Правила

@page narrow {size: 9cm 18cm}
@page rotated {size: landscape}
DIV {page: narrow}
TABLE {page: rotated}

используются в документе

<DIV>
<TABLE>...</TABLE>
<TABLE>...</TABLE>
</DIV>
Разрывы страниц внутри элементов: 'orphans', 'widows'
'orphans'

Значение: <целое> | наследуемое
Начальное значение: 2
Область применения: элементы структурного уровня
Наследование: да
Процентное задание: N/A
Устройства: визуального форматирования, с постраничной разбивкой

'widows'

Значение: <целое> | наследуемое
Начальное значение: 2
Область применения: элементы структурного уровня
Наследование: да
Процентное задание: N/A
Устройства: визуального форматирования, с постраничной разбивкой

Свойство 'orphans' определяет минимальное количество строк абзаца, которые должны быть оставлены в нижней части страницы. Свойство 'widows' определяет минимальное количество строк абзаца, которые должны быть оставлены в верхней части страницы. Примеры использования данных свойств для управления разрывами страниц приводятся ниже.

Подробную информацию о форматировании абзацев можно получить в разделе о линейных блоках.

Допустимые разрывы страниц

В нормальном потоке разрыв страницы может находиться в следующих местах:

  1. В пространстве, отведенном для вертикальных полей между структурными блоками. Если разрыв страницы осуществляется в этом месте, то вычисляемые значения соответствующих свойств 'margin-top' и 'margin-bottom' устанавливаются равными '0'.
  2. Между линейными блоками внутри блока структурного уровня.

Разрывы рассматриваемого типа удовлетворяют следующим правилам:

  • Правило А: Разрыв (1) разрешен, только если значения свойств 'page-break-after' и 'page-break-before' всех элементов, порождающих блоки, встречающиеся в месте разрыва, допускают его осуществление, что имеет место тогда, когда по крайней мере одно из них имеет значение 'always', 'left' или 'right', или все они одновременно имеют значение 'auto'.
  • Правило Б: Тем не менее, если все эти свойства имеют значение 'auto', а свойство 'page-break-inside' ближайшего общего для всех названных элементов предка имеет значение 'avoid', то разрыв страницы в этом месте запрещается.
  • Правило В: Разрыв страницы (2) разрешен, только если количество линейных блоков между разрывом и началом заключительного структурного блока равно значению свойства 'orphans' или превышает его, а количество линейных блоков между разрывом и концом блока равно значению свойства 'widows' или превышает его.
  • Правило Г: Более того, разрыв страницы (2) разрешен, только если свойство 'page-break-inside' имеет значение 'auto'.

Если приведенные выше правила не позволяют вставить достаточное количество разрывов, то во избежание выхода содержимого за пределы страничного блока правила Б и Г не учитываются, что позволяет создать дополнительные разрывы.

Если и после этого не удается достигнуть достаточного количества разрывов, то для поиска дополнительных точек разрыва не учитываются правила А и В.

Разрывы страницы не могут осуществляться в абсолютно позиционируемых блоках.

Принудительные разрывы страниц

Разрыв страницы должен осуществляться (1), если хотя бы одно из всех свойств 'page-break-after' и 'page-break-before' элементов, порождающих блоки, встречающиеся в месте разрыва, принимает значение 'always', 'left' или 'right'.

Разрыв страницы также должен осуществляться (1), если значения свойства 'page' линейных блоков, находящихся непосредственно до и после разрыва, различны.

"Наилучшие" разрывы страниц

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

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

Предположим, что таблица стилей содержит свойства 'orphans: 4' и 'widows: 2', а в нижней части текущей страницы доступно 20 строк (линейных блоков):

  • если последний абзац текущей страницы содержит не более 20 строк, то он должен остаться на текущей странице;
  • если абзац содержит 21 или 22 строки, а вторая часть абзаца не должна нарушать ограничения, устанавливаемого свойством 'widows', то в силу этого его вторая часть должна состоять из двух строк;
  • если в абзаце более 23 строк, то первая его часть должна состоять из 20 строк, а вторая часть должна включать все остальные строки.

Теперь предположим, что значение свойства 'orphans' равно '10', значение свойства 'widows' равно '20', а в нижней части текущей страницы доступно 8 строк:

  • если абзац в конце текущей страницы содержит не более 8 строк, то он должен остаться на текущей странице;
  • если абзац содержит более 9 строк, то его нельзя делить (т.к. при этом будет нарушено ограничение, устанавливаемое свойством 'orphans'). Поэтому его следует переместить на следующую страницу в виде блока.