Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как сделать стили для печати

Короткий ответ

Правила внутри @media print действуют только при печати. Спрячьте всё, что на бумаге не нужно:

<style>
  @media print {
    nav, .no-print { display: none; }
    body { color: black; background: white; }
  }
</style>
 
<nav>Menu: Home · Blog</nav>
<h2>Pancake recipe</h2>
<p>Mix flour, eggs and milk.</p>
<button class="no-print" onclick="print()">Print</button>

Нажмите «Print» и посмотрите предпросмотр: меню и кнопки в нём нет.

Адреса ссылок

На бумаге по ссылке не щёлкнешь. Выведите её адрес после текста:

@media print {
  a[href^="http"]::after { content: " (" attr(href) ")"; font-size: 0.9em; }
}

Разрывы страниц

Свойство break-before: page начинает элемент с новой страницы, а break-inside: avoid не даёт разрезать блок — картинку с подписью или строку таблицы — между двумя листами:

@media print {
  h2 { break-before: page; }
  figure, tr { break-inside: avoid; }
}

Частая ошибка

Сайт с тёмной темой или цветным фоном печатают как есть. Большинство браузеров по умолчанию не печатают фоны, и светлый текст остаётся на белой бумаге почти невидимым. Задайте для печати тёмный цвет текста явно, как в первом примере.

Функции из этого ответа

  • @media — Применяет правила только при заданных условиях — ширине окна, теме системы и других.
  • display — Определяет, как элемент ведёт себя в потоке и как раскладывает содержимое.
  • content — Содержимое псевдоэлементов `::before` и `::after`.
  • href — Адрес, на который ведёт ссылка `<a>` или указывает `<link>`.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.