Реалізація друку сторінок сайту (Print CSS)

Проблема: екран і друк — різні світи

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Реалізація друку сторінок сайту (Print CSS)
Простий
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1250
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1000

Проблема: екран і друк — різні світи

Сторінка виглядає чудово на моніторі, але при виведенні на друк перетворюється на кашу з обрізаних банерів, sticky-хедера, дрібного тексту та нечитабельних посилань. 70% користувачів стикаються з цією проблемою. Print CSS у 2 рази скорочує час на підготовку документів до друку та зменшує витрату паперу на 30%. Ми вирішуємо це завдання за допомогою грамотно налаштованого print CSS — окремого набору правил і мінімального JavaScript. Наш досвід: понад 50 успішних проєктів, гарантія результату.

Чому print CSS — окрема дисципліна?

Екранні стилі не підходять для паперу. Різні роздільні здатності, колірні моделі (RGB vs CMYK), шрифти (sans-serif vs serif), необхідність приховувати інтерактивні елементи. Дослідження Nielsen Norman Group показують, що 70% користувачів скаржаться на проблеми при друку з браузера. Print CSS вимагає розуміння механіки розривів сторінок, заголовків таблиць, що повторюються, колонтитулів та коректної обробки фонів. Ми розбирали складні випадки: від фінансових звітів з десятками таблиць до промо-сторінок із брендованими кольорами.

Як налаштувати print CSS для складних таблиць?

Ось покрокова інструкція з налаштування друку для сайту з таблицями та мультимедіа:

  1. Приховати непотрібні елементи інтерфейсу: header, footer, nav, sidebar, банери, cookie-повідомлення, чат-віджети.
  2. Налаштувати типографіку для паперу: serif-шрифт, розмір 12pt, міжрядковий інтервал 1.5, відображення URL посилань.
  3. Керувати розривами сторінок: примусовий розрив перед розділами, уникати розривів всередині таблиць і списків.
  4. Налаштувати таблиці: повторювати заголовок на кожній сторінці, заборонити розрив рядків, стилізувати межі та фони.
  5. Додати колонтитули та нумерацію сторінок через CSS @page.
  6. Протестувати в браузерах та на фізичному принтері.

Базова структура та скидання стилів

Насамперед ховаємо все, що не потрібно на папері: header, footer, nav, sidebar, банери, cookie-повідомлення, чат-віджети. Контент розтягуємо на 100% ширини, прибираємо тіні та скруглення.

@media print { header, footer, nav, aside, .sidebar, .cookie-banner, .chat-widget, .share-buttons, .advertisement, .back-to-top, [data-noprint], .no-print { display: none !important; } .container, .wrapper, main, article { width: 100% !important; max-width: 100% !important; margin: 0 !important; padding: 0 !important; float: none !important; } * { box-shadow: none !important; text-shadow: none !important; border-radius: 0 !important; } } 

Типографіка для паперу

Для друку використовуємо serif-шрифти (Georgia, Times New Roman) з базовим розміром 12pt. Збільшуємо заголовки, налаштовуємо міжрядковий інтервал, додаємо orphans і widows для контролю рядків, що залишилися. Посилання доповнюємо відображенням URL. Для детального розуміння дивіться документацію Media queries.

@media print { body { font-family: Georgia, 'Times New Roman', serif; font-size: 12pt; line-height: 1.5; color: #000; background: #fff; } h1 { font-size: 24pt; margin-bottom: 12pt; } h2 { font-size: 18pt; margin-bottom: 8pt; } h3 { font-size: 14pt; margin-bottom: 6pt; } p, li { font-size: 12pt; orphans: 3; widows: 3; } a[href]:after { content: ' (' attr(href) ')'; font-size: 10pt; color: #555; } a[href^='#']:after, a[href^='javascript:']:after { content: ''; } img { max-width: 100% !important; page-break-inside: avoid; } } 

Керування розривами сторінок та @page

Налаштовуємо примусові розриви перед розділами, уникаємо розривів всередині таблиць і списків, контролюємо відступи @page та додаємо колонтитули.

@media print { h1, h2, h3, h4, h5, h6 { page-break-after: avoid; break-after: avoid; } .no-break, table, figure, blockquote { page-break-inside: avoid; break-inside: avoid; } .page-break-before, section.chapter { page-break-before: always; break-before: page; } .page-break-after { page-break-after: always; break-after: page; } } @page { size: A4 portrait; margin: 2cm 2.5cm 2cm 2.5cm; } @page :first { margin-top: 3cm; } @page :left { margin-left: 3cm; } @page :right { margin-right: 3cm; } @page { @top-right { content: 'ТОВ «Компанія» — конфіденційно'; font-size: 9pt; color: #999; } @bottom-center { content: 'Стор. ' counter(page) ' з ' counter(pages); font-size: 9pt; } } 

Таблиці: заголовки на кожній сторінці та стилізація

Щоб великі таблиці не перетворювалися на кашу, повторюємо шапку на кожному аркуші, забороняємо розрив рядків та налаштовуємо принтер-френдлі кольори.

@media print { thead { display: table-header-group; } tfoot { display: table-footer-group; } tr { page-break-inside: avoid; } table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #999; padding: 4pt 6pt; text-align: left; } th { background: #eee !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; } } 

Фонові кольори та JavaScript: кнопка друку та події

Для брендованих блоків використовуємо print-color-adjust: exact. Логотипи — через ::before із зображенням, а не через background-image. Додаємо JS для кнопки друку вибраної області та обробники beforeprint/afterprint для розкриття акордеонів і форсування lazy-завантаження.

function printPage(selector?: string) { if (selector) { const content = document.querySelector(selector); if (!content) return; const printWindow = window.open('', '_blank'); if (!printWindow) return; printWindow.document.write(` <!DOCTYPE html> <html> <head> <title>${document.title}</title> <link rel="stylesheet" href="/css/app.css"> </head> <body class="print-only"> ${content.innerHTML} </body> </html> `); printWindow.document.close(); printWindow.focus(); printWindow.onload = () => { printWindow.print(); printWindow.close(); }; return; } window.print(); } document.querySelectorAll('[data-print-btn]').forEach(btn => { const selector = btn.getAttribute('data-print-target'); btn.addEventListener('click', () => printPage(selector ?? undefined)); }); window.addEventListener('beforeprint', () => { document.querySelectorAll('.accordion-content[hidden]').forEach(el => { el.removeAttribute('hidden'); el.setAttribute('data-was-hidden', 'true'); }); document.querySelectorAll('img[loading="lazy"]').forEach(img => { const image = img as HTMLImageElement; if (image.dataset.src) image.src = image.dataset.src; }); }); window.addEventListener('afterprint', () => { document.querySelectorAll('[data-was-hidden]').forEach(el => { el.setAttribute('hidden', ''); el.removeAttribute('data-was-hidden'); }); }); 

Типові проблеми друку та їх вирішення

Проблема Вирішення
Елементи інтерфейсу (меню, банери) виводяться на папір Приховати через display: none у print media query
Посилання відображаються як звичайний текст Додати a[href]:after { content: ' (' attr(href) ')'; }
Таблиці розриваються посередині рядка Встановити tr { page-break-inside: avoid; } та thead { display: table-header-group; }
Фонові кольори/зображення не друкуються Використовувати print-color-adjust: exact та логотипи через img або ::before
Занадто дрібний шрифт Встановити font-size: 12pt для body, не менше 10pt для дрібних елементів
Пуста перша сторінка через margin-top на body Використовувати @page :first { margin-top: ...; } замість margin на body

Для кожної проблеми ми підбираємо індивідуальне рішення. Наприклад, якщо фонові кольори не друкуються, використовуємо print-color-adjust: exact та перевіряємо налаштування принтера. Якщо таблиці розриваються, додаємо page-break-inside: avoid на рядки. Обробка таких нюансів потребує досвіду — наш інженер допомагає уникнути 90% типових помилок.

Що входить у роботу

  • Аудит поточних стилів та виявлення елементів, що заважають друку
  • Розробка print CSS: скидання, типографіка, розриви, таблиці, фони
  • Налаштування колонтитулів, нумерації сторінок та розміру паперу
  • JavaScript: кнопка друку (вся сторінка або вибрана область) та обробники before/after print
  • Тестування в Chrome, Firefox, Edge, Safari; перевірка на реальному принтері за потреби
  • Інтеграція у ваш проєкт (WordPress, Laravel, React та ін.)
  • Документація та коментарі в коді

Орієнтовні терміни

Етап Орієнтовний термін
Базове налаштування print.css (лендінг/блог) від 2 годин
Складна сторінка (таблиці, умовна видимість, брендовані кольори) від 1 дня
Повний аудит та доопрацювання існуючого проєкту від 4 годин

Вартість розраховується індивідуально залежно від обсягу та складності. Отримайте консультацію — ми оцінимо ваш проєкт і запропонуємо оптимальне рішення.

Чек-лист перед здачею

  • [ ] Навігація, банери, віджети приховані
  • [ ] URL посилань відображаються (крім якорів та javascript:)
  • [ ] Таблиці не розриваються посередині рядка
  • [ ] Зображення не виходять за поля сторінки
  • [ ] Немає пустих перших сторінок
  • [ ] Шрифт читабельний (не менше 10pt)
  • [ ] Колонтитули та нумерація сторінок працюють
  • [ ] Фонові кольори брендованих блоків коректно друкуються

Зв'яжіться з нами, щоб обговорити ваш проєкт. Замовте реалізацію print CSS — отримайте ідеальний друк без зайвого клопоту. Гарантія результату.