Для начала создадим кнопку, например такую:
1 2 3 4 |
<div class="print-button"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 6 2 18 2 18 9"></polyline><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"></path><rect x="6" y="14" width="12" height="8"></rect></svg> <span>Версия для печати</span> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
.print-button { display: inline-flex; align-items: center; border: 3px solid #BFE2FF; border-radius: 22px; padding: 6px 18px; cursor: pointer; transition: box-shadow 0.3s; box-shadow: 0 2px 6px rgba(0,0,0,0.2), 0 8px 10px rgba(0,0,0,0.2); margin: 20px; } .print-button svg { fill: none; stroke: #337AB7; stroke-width: 2; width: 30px; height: 30px; } .print-button span { color: #337AB7; font-size: 18px; line-height: 1; font-family: Arial, sans-serif; padding-left: 12px; } .print-button:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.2), 0 16px 20px rgba(0,0,0,0.2); } |
Вариант с открытием всплывающего окна
В этом варианте мы создаем новый документ на основе текущего, открываем его в попапе и выдаем на печать.
Для этого смотрим HTML код нашей страницы и определяем элементы, которые нам нужно подать в это окно и далее на печать.
Для данной страницы, это:
- Заголовок с классом
subbanner
- Краткое описание темы с классом
entry-summary
- Полное описание темы с классом
entry-content
- Подвал с копирайтом с ID
footer
Затем вешаем клик на нашу кнопку, по которому передаем эти значения и добавляем статичные данные.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
document.querySelector(".print-button").onclick = function() { let w = window.open('','','left=50,top=50,width=860,height=600,toolbar=0,scrollbars=1,status=0'); // Создаем окно let elem_1 = document.body.querySelectorAll(".subbanner")[0].outerHTML; // Берем заголовок let elem_2 = document.body.querySelectorAll(".entry-summary")[0].outerHTML; // берем краткую часть темы let elem_3 = document.body.querySelectorAll(".entry-content")[0].outerHTML; // берем полную часть темы let elem_4 = document.getElementById("footer").outerHTML; // Берем подвал // Заполняем новый документ, в котором добавляем все необходимые элементы, как статичные (стили, скрипты и т.д.), так и переданные из основного w.document.write('<link href="/css/all-stylesheets.css" rel="stylesheet" type="text/css" />'); w.document.write('<link href="/css/crayon.css" rel="stylesheet" type="text/css" />'); w.document.write(elem_1); w.document.write(elem_2); w.document.write(elem_3); w.document.write(elem_4); w.document.write('<script src="/js/javaup.js"><\/script>'); w.document.write('<script src="/js/javadown.js"><\/script>'); w.document.write('<script src="/js/crayon.min.js"><\/script>'); w.document.write('<link href="/css/awesome.css" rel="stylesheet" type="text/css" />'); w.document.close(); setTimeout(function () { w.print(); }, 500); w.onfocus = function () { setTimeout(function () { w.close(); }, 500); } }; |
А результатом будет это:
Похожим способом можно выдавать на печать несколько разных элементов сайта, например, тарифов, контактов и т.д..
Про это будет позже в другой теме.
Вариант с изменением самого документа
Тут мы будем по клику добавлять к тегу body
класс print
, включая тем самым версию для печати. Выключаться она будет по нажатию на клавишу Esc
Этот вариант хорош тем, что можно изменить документ не только для печати, но и для сохранения.
Как и в первом смотрим HTML код нашей страницы, но определяем элементы, которые нам нужно убрать (шапка, подвал, боковая панель, рекламные блоки и т.д.) или изменить (ширину центрального блока и т.д.).
Код для этой будет такой:
1 2 3 4 5 6 7 8 9 |
document.querySelector(".print-button").onclick = function() { document.body.classList.add("print"); window.print(); }; document.addEventListener('keydown', function(e) { if (e.keyCode === 27) { document.body.classList.remove("print"); } }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
body.print #header, body.print .sidebar-block, body.print .execphpwidget, body.print .post-thumbnail, body.print .title.margin-top-30, body.print .linehover, body.print .comment-respond, body.print .subbanner2, body.print .post-meta, body.print .artlinks { display: none; } body.print .col-lg-8 { width: 100%; } |
А результат:
Если нет необходимости показывать все это на странице, то просто добавляем нужные стили в свое CSS и включаем печать по кнопке.
1 2 3 |
document.querySelector(".print-button").onclick = function() { window.print(); }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@media print { #header, .sidebar-block, .execphpwidget, .post-thumbnail, .title.margin-top-30, .linehover, .comment-respond, .subbanner2, .post-meta, .artlinks { display: none; } .col-lg-8 { width: 100%; } } |
Выглядит так:
По хорошему, в оба варианта стоило добавить изменения для вкладок (чтобы они шли друг под другом), изменить вывод кода (чтобы он был виден полностью) и еще другие мелочи, но я не стал так глубоко углубляться, так как тема является тестовой и для каждого сайта все равно будет уникальной.
Добавить комментарий: