![]() |
|
Модераторы: Illuminaty |
![]()
|
|
| aLEXperimentator |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 18.2.2013 Репутация: нет Всего: нет |
Здравствуйте, уважаемые форумчане!
Надеюсь что на этот раз подраздел форума выбран правильно - вёрстка. Хотелось бы задать вопрос о печати веб-страницы. Известно, что за последнее время офисным стандартом фактически стали листы размера A4. Именно они получили наибольшее распространение, именно на таких листах, скорее всего будет распечатана та или иная интернет-страница, ежели вы сядете где-нибудь её печатать. Однако для веб-страниц само понятие "разделения на какие-то ещё другие страницы"отсутствует. Да, существуют div-ы, но это всё-таки не страницы. Поэтому неприятно видеть, как при попытке распечатать с интернета какой-нибудь интересующий материал на бумажный носитель, дабы показать кому-то - фотографии разделяются на две части. Голова оказывается на первой странице, ноги на второй. Начинают появляться "висячие строки", пустые страницы в начале или в конце. Уродуется композиция страницы, её оформление... А можно ли сверстать страницу так, чтобы принтер при печати автоматически разбивал её на правильные a4-блоки? Чтобы веб-страница из принтера выползала на страницах a4 в правильно разбитом виде? В том, как задумал дизайнер, а не как захотелось принтеру? Я делал это через указания стилей для блоков div, которые играли роль отдельных страниц. Но начинались трудности - у IE в настройках по умолчанию при печати сидят отступы 19 мм со всех сторон, и размер блока div надо теперь считать как разность "лист a4 - 2*19 мм", у Сафари к примеру числа были другие. Можно конечно вставить JavaScript, который определит, что за браузер, и по нему подберёт размер div-блока так, чтобы он аккурат садился на а4-лист. Но это вообще-то долго... Может есть какая команда в вёрстке типа style div { width : a4.width ; height : a4.height } /style style div { width : 100% a4 ; height : 100% height } /style Уважаемые форумчане, никто не встречался ни с чем таким? |
|||
|
||||
| s1lver |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 580 Регистрация: 14.12.2007 Где: Россия Репутация: нет Всего: нет |
Нет. -------------------- Я собрался жить вечно - пока все идет нормально! |
|||
|
||||
| AVA12 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 4.5.2008 Репутация: 1 Всего: 4 |
Никакой принтер не может печатать на весь лист, поля обязательно будут, и лучше сразу учесть их при верстке версии для печати. Поля шириной 20 мм - вполне нормальное решение. Разбивать динамический контент на страницы вручную, да еще и подгонять размеры скриптом - идея совершенно не вдохновляющая. Лучше задать стили для печатной версии (правило @media print, стили page-break-*, размеры в миллиметрах/пунктах).
|
|||
|
||||
| aLEXperimentator |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 18.2.2013 Репутация: нет Всего: нет |
Ну вот к примеру как я делал, если надо было проверить на сервере - с каким браузером имею дело (C#) :
А потом на сервере сформировать все div-ы "первого уровня" нужной ширины и/или высоты, или класса для нужного стиля. То же самое самое в принципе можно сделать на JavaScript в самом браузере, проверив ну скажем navigator.appName. А потом пробежаться каким-нибудь:
Или сразу получить нужный массив div-ов:
И потом бегать по элементам divs и выставлять им или явные свойства, или имя класса стилей... Это нетрудно. Тонкость в другом. Мало того что у каждого браузера по умолчанию стоят разные отступы - у IE одни значения, у Мозилл другие, у Сафари третьи. Мало того, что браузеры придуриваются - так последние версии IE в navigator.appName возвращают не IE, а Netscape, и то же самое делает Мозилла - так что приходится повозиться чтобы понять - с кем реально имеешь дело. Так ещё и к тому же компах пользователей могут стоять НЕСТАНДАРТНЫЕ установки - кто-то может сделал отступы не 19 мм а скажем 25 или 10. И поэтому получается так, что страница, выверенная для печати под один браузер - криво вылезает при печати на другом. У него другие отступы, блок div оказался короче, ну короче ну и короче, ну и ладно - размести его и оставь свободное место - так нет же!!! Браузер (или драйвер принтера - кто там их разберёт) начинает печатать на ту же страницу "голову" от следующего div-а, а продолжение идёт на следующую страницу, и так они сдвигаются всё дальше и дальше... Жалко что в языке html, насколько я понял, нет никакой опции чтобы браузер при печати разместил указанные "куски страниц" на указанного формата "куски бумаги", и не пытался бы запихать ещё и кусок другого блока в остаток листа, "зная" что весь блок в этот остаток "не поместится" и его лучше было бы начать с листа нового... В некоторых случаях это бы упростило как вёрстку с сайта, так и печать... Это сообщение отредактировал(а) aLEXperimentator - 21.9.2014, 18:53 |
||||||
|
|||||||
| BaNru |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 20.9.2014 Репутация: 1 Всего: 1 |
Предлагаю почитать спецификацию и поискать ответ там
http://www.w3.org/TR/css-print/ http://www.w3.org/TR/CSS21/page.html http://www.w3.org/TR/css3-page/ Также предлагаю, как и выше уже говорили, воспользоваться специальными стилями для печати media="print" (предпочтительнее)
или @media print
Что касается отступов - ответ есть также по ссылкам выше или вкратце тут Всё это, к сожалению, слабо поддерживается. Я не пробовал отрабатывать JS перед печатью. Для современных браузеров можно попробовать использовать CSS3 CALC, хотя думаю это будет нереально всё просчитать на нём. Всё (шрифты, картинки, отступы) надо будет указывать в MM (ну или как у тебя в CM, но это менее удобно). Размер листа мы знаем. Строчки, думаю, тоже можно высчитать примерно (до +/- 1, или предположим 5%) Высоту картинки тоже можно высчитать исходя из ширины страницы. Так как PAGE работает у всех кроме FF, то надо узнать отступы у него и все остальным назначить такие же. Разумеется, если пользователь изменит на свои, то вся схема рухнет. Ко всему этому добавляем перестраховку после картинки 10%. Ну и применяем для разбивки то, что работает у всех page-break-after:always; Если же на странице оооочень много картинок, а точнее это галерея, то можно подумать и о том, чтобы все картинкам назначить always и не мучиться. Вариант решения на JS предлагают на stackoverflow.com |
||||
|
|||||
| aLEXperimentator |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 18.2.2013 Репутация: нет Всего: нет |
"Чьорт побьери!" (с) (фильм "Бриллиантовая рука" )
Это скорее всего именно то что нужно. Спасибо, BaNru! Свойство page-break-after это вообще почти что гениально! Маленькой ложкой дёгтя выступает то, что судя по приведённой Вами ссылке данное свойство поддерживается только новыми версиями браузеров, не всеми версиями Сафари, не понимает его и браузеры под Андроид, как не поймёт и MacOS. Но по-любому лучше что-то, чем ничего. Пользователей маков на самом деле не так уж и много, да и маки рано или поздно доберутся до такого стандарта, когда это станет стандартом. Также я не думаю, что кто-то начнёт выпускать документ на принтер с телефона Господа - можно я нажму кнопочку "решено" после того как "обкатаю" в принтере? В пределах недели надеюсь дать ответ. |
|||
|
||||
| BaNru |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 20.9.2014 Репутация: 1 Всего: 1 |
Сафари первой версии вообще не существует в природе уже много лет На Маках используют сафари, так что скорее всего там есть поддержка. Под iOS скорее подразумеваются Айфоны и айпады, там наверное другой браузер. Т.е. Нет поддержки айфонов и андройдов. Хотя для андройдов куча браузеров и возможно есть в некоторых поддержка. Остальные настольные браузеры поддерживают page-break-after:always; Так что считайте, что на компах работать будет у всех. http://htmlbook.ru/css/page-break-after Вы точно смотрели эту ссылку? ![]()
Этому стандарту уже много-много лет, как минимум с 2003 года, если не раньше. До сих пор не добрались и в будущем не надейтесь. Это сообщение отредактировал(а) BaNru - 27.9.2014, 17:22 |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Вёрстка веб-сайтов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |