Очень часто разработчики забывают про печатную версию сайта, поэтому можно встретить такой результат на бумаге:
Доступно три метода подключения CSS-стилей.
Специальный CSS-файл:
Правило @media print:
Третий метод – отдельная страница или шаблон, свёрстанные чисто под печать (без @media print
), например так сделана печать писем в Яндекс.Почте. Такой метод существенно облегчает отладку.
Лист в формате А4 имеет размер 210x297 мм, его можно указать:
В пикселях размеры лучше не указывать т.к. их количество зависит от заданного параметра DPI:
- при dpi=75, А4 имеет 877×620 px
- при dpi=150, А4 имеет 1754×1240 px
- при dpi=300, А4 имеет 3508×2480 px
В целях экономии бумаги лучше использовать минимальные поля – 10 мм по краям и 20 мм слева для возможности брушеровки.
Поля по ГОСТ Р 6.30-2003 (оформление документов):
По ГОСТ 7.32-2017 (научные работы, рефераты):
Тени и другие эффекты дизайна лучше убрать, также следует установить черный цвет шрифта.
Если на сайте размер шрифтов указан в пикселях, то при печати размер будет больше чем на экране. Поэтому нужно выставить новые значения:
Т.к. на бумаге элементы навигации, баннеры, шапка, подвал, и другие элементы не несут какой либо пользы, то лучше их скрыть или оставить в них только самое важное.
Другой вариант скрытия не нужного контента – в HTML-коде, добавить к скрываемым элементам класс noprint
.
Не стоить забывать о <div class="wrapper">...</div>
, обычно для сайтов с фиксированным размером ему задана ширина, отступы и центрирование, поэтому при печати возможна обрезка контента с правого края, такие стили стоит обнулить.
По умолчанию браузеры не печатают background у элементов, но его можно пустить на печать принудительно c помощью свойства -webkit-print-color-adjust: exact;
и нового color-adjust: exact;
.
@media print{
* {
-webkit-print-color-adjust: exact !important;
color-adjust: exact !important;
}
}
Уточнение: свойство не будет работать если цвет фона и шрифта слабоконтрастные.
В CSS доступно управление переносами, соответственно для списков и таблиц нужно запретить переносы:
Если требуется принудительно сделать перенос после элемента:
Печать ссылок бесполезна т.к. будет не известно, куда они ведут. Можно добавить приписку URL рядом с анкором (исключая якорные ссылки).
Пример вставки URL:
Будет очень удобно если на печатаной странице будет QR-код с ссылкой на сайт. Сгенерировать код можно с помощью сервиса «Google QR Codes» и вставить его с помощью JQuery.
$(function(){
$(window).bind('beforeprint', function(){
if($("#print-qr").length == 0) {
$('body').append(
'<style>@media screen {#print-qr{display: none;}}</style>' +
'<p id="print-qr"><img src="https://chart.googleapis.com/chart?cht=qr&chs=200x200&choe=UTF-8&chld=H&chl=' + window.location.href + '"></p>'
);
}
});
});
Еще один метод вставки QR-кода через CSS, но он требует подставки URL текущей страницы через PHP.
В JS, печать запускается методом window.print()
. Возможны следующие варианты:
Запуск печати по клику на ссылку:
<a href="#" class="action-print">Распечатать</a>
<script>
$(function($){
$(".action-print").click(function(){
window.print();
return false;
});
});
</script>
Следующий вариант – пользователь переходит на следующую страницу, где сразу начинается печать, после пользователь возвращается на исходную.
И последний вариант – печать происходит в отдельной вкладке браузера, после печати она автоматически закрывается.