Веб-разработка

индекс
236,88

Подготовка веб-страниц для печати средствами CSS

Привет Хабрахабр! В своей первой статье, я хочу продолжить обсуждение темы о которой уже говорили«Подготовка веб-страниц для печати средствами CSS»



Статью написал vastvision , я только публикую.

Определение размера страницы



С точки зрения печати, для CSS, веб страница состоит из двух блоков: Область страницы (page area) и область полей (margin area).

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

области страницы


CSS 2.1 позволяет задать только размер области полей. Делается это так:

@page {margin:0.5in;}

Важно помнить, что при подготовке страницы для вывода на печать, все размеры должны быть указаны в дюймах (in), пунктах (pt), пиках (pc) или сантиметрах/миллиметрах(cm/mm)


Так же полезным может быть применения свойства page вместе с псевдоклассами: left,: right.

В данном примере, у первой и второй страницы отступы от условного разворота книги будут равны 5ти сантиметрам:

@page: left {margin-left:3cm; margin-right:5cm;}
@page: right {margin-left:5cm; margin-right:3cm;}




Разрывы!


Для управления разрывами выводимых на печать страниц существуют специальные свойства: page-break-before и page-break-after, которые могут иметь значения: auto, always, avoid, left, right, inherit.

С этими свойствами всё довольно просто, вот пример:

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

h1 {page-break-after: always;}


Значения left и right позволяют уточнить это правило:

Мы хотим что бы перед каждым заголовком h3 правой (от условного разворота книги) страницы был разрыв:

h3 {page-break-before: right;}


А вот значение avoid запрещает вставлять разрывы между элементами.

Нельзя вставлять разрывы между заголовком h6 и следующим за ним текстом:

h6 {page-break-after: avoid;}



widows и orphans


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

widows demo

На рисунке видно как две строки абзаца p переносятся на следующую страницу документа. В данном случае значение widows равно 2 (по умолчанию).

p {widows: 2;}


Но если бы значение widows было бы 3 или более, то весь абзац был бы перемещён на новую странцу.


Эффект применения orphans аналогичен, но с противоположной стороны, он задаёт минимальное количество строк элемента, которые могут оставаться в нижней части страницы без разрыва страницы.


Например если бы в предыдущем примере значение orphans было бы равно 6, то 5 строчек абзаца перенеслись бы на следующую страницу.


Это первая статья vastvision . Не ругайте его сильно.

+90
31 августа 2008, 20:24
214

комментарии (37)

+3
ish #
Очень полезно, в избранное. Жду продолжения. Плюсик вам и vastvision в карму :)
+4
rumkin #
Не windows, а widows! Не путайте читателей!
+4
vastvision #
Сорри! Щас… поправим
+1
rumkin #
И спасибо за статью!
0
AndrewStephanoff #
спасибо за статью
–1
MOVe #
колличество = количество
+1
bkonst #
Сразу надо отметить, что гарантированно запретить разрыв страницы c помощью 'page-break-*: avoid' не получится — окончательное решение в этом случае за браузером.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
0
nicothin #
честно говоря, не думал, что узнаю из статьи чтото новое. очент приятно, что ошибся.
0
AlterEG0 #
Спасибо, хороший способ. В избранное.
0
maxk #
Как раз занимался данной темой. Спасибо огромное. В избранное, однозначно ;-)
0
t1myrkq #
Позновательная статья
А как обстоят дела с кроссбраузерностью?
+2
ognevsky #
Спасибо за статью, конечно. Добавил, конечно, в избранное.
Но, ей Богу, хватит через строчку повторять, что «это моя первая статья на Хабр» — уже глаз режет. Хотите об этом поговорить — напишите в конце поста, мелким шрифтом. Мне, как читателю статьи, глубоко похуй, какая по счету на Хабре эта статья. Если она интересная — я ее проплюсую, если нет — сделаю что-нибудь другое. Спасибо за внимание, статья действительно интересная.
0
Sannis #
И вправду. Тем более, почему бы не набраться опыта, раз ушли в минус? А если не набрались, то можно почитать об этом.
+1
ognevsky #
а кто ушел в минус?
+1
Sannis #
Имхо, если отдавать себе отчёт за все действия, то можно было бы и обойтись без ухода в минус по первому времени. Да, сейчас статья в плюсе, но разве не было бы лучше, если бы все минусы, которые были в начале, были плюсами? ;)

P.S. В минус уходил топика.
+1
artyfarty #
Эм, а нельзя ли осветить аспект кроссбраузерности? Помнится, у старой оперы и ие6 файрфокса совершенно разные понятия о сантиметрах.
0
Novikov #
Поставил плюсы обоим. Надеюсь, не зря ;-)
0
ivvi #
Рисунок №1 немного не соответствует тому, что написано в тексте.
Как называется та часть листа, на которой написано «лист бумаги»?
В статье идёт речь о двух блоках, я же на рисунке вижу три блока.
0
ivvi #
Зачем нужен восклицательный знак после заголовка «Разрывы»? :-)
+1
vovanbo #
Может быть для того, чтобы вспомнить о том, что с ноября ни одного не было?… Впрочем, это версия. :)
0
eatart #
отлично.
последнее время столько хорошего материала и по media css и конкретно по печати, что ничего не остается делать, как грамотно оформить версии для печати на своих сайтах
0
sin_avatar #
У вас неверное эскейпирование (из одного обратного слэша получается два):

Поздравляем!

Вы еще раз доказали закон Мерфи:
«Если существуют два способа сделать что-либо, причем один из которых ведет к катастрофе, то кто-нибудь изберет именно этот способ»
А вот что случилось:

MySQL server has gone away

The query was: SELECT user_id, email, send_reports FROM users WHERE email='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
0
Stac #
Расскажите еще про page-break-inside. С помощью него (со значением avoid) можно, например, запретить разрыв элемента IMG или других.

Работает это правда только в новых браузерах, но иногда может пригодиться.
0
iBear #
Это полезная статья, жаль ее не было, когда мне впервые пришлось столкнуться с вопросом корректной печати :)

Кстати, в рамках этой статьи можно так же написать о аппаратной зависимости таблиц стилей, т.е. рассмотреть использование правил @import, @media
0
RuslanDenisenko #
Да только недавно задавался этим, спасибо! Я не знал что есть ткая штука как @page!
0
foxweb #
Объясните мне, как взрослый здравомыслящий человек мог написать «коЛЛичество»? :)
0
Vasylko #
все мы люди и нам свойственно ошибаться, без исключений!
0
Glook #
А есть у кого какие мысли о том как выводить фоновое изображение на печать? Для Internet Explorer я использую трюк: отобразить элемент с фоновым рисунком как list-item + отобразить фон как list-style-image, но в «нормальных „ браузерах это не работает…
0
chiaroscuro #
Интересно, интересно…

Неужели о XSL-FO все забыли?
0
fatal #
Prince XML всем заинтересовавшимся в помощь.
Утилита преобразует HTML/XML документ, оформленный с помощью CSS в PDF.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.