Реализация печати страниц сайта (Print CSS)

Когда страница отлично выглядит на экране, но при печати превращается в хаос из обрезанных элементов и мелкого текста, это раздражает пользователей и вредит вашему бренду. Мы разрабатываем стили для печати (Print CSS), которые делают распечатку аккуратной и читаемой. Наша команда реализует проект под ключ — от аудита до внедрения и последующей поддержки, обеспечивая стабильный результат.

Разработка и обслуживание любых видов сайтов:

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

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

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

Проблема: экран и печать — разные миры

Страница выглядит отлично на мониторе, но при выводе на печать превращается в кашу из обрезанных баннеров, 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 — получите идеальную печать без лишних хлопот. Гарантия результата.

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

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060