CSS код, который устанавливает отступ для содержимого при печати, но позволяет использовать полноразмерное фоновое изображение

Вопрос или проблема

Я создаю небольшую веб-страницу, которая также имеет функцию печати. У меня возникли проблемы с разрывами страниц и полями. Если я устанавливаю поля в @page margin равным 2 см, документ печатается нормально, но фоновое изображение не заполняет всю страницу. Если я устанавливаю @page margin равным 0 см, фон заполняет всю страницу, но на странице 2 и последующих страницах нет верхнего и нижнего поля.

Возможно ли как-то установить @page margin в 2 см и при этом сделать так, чтобы фоновое изображение заполняло всю страницу?

Вот мой пример кода:

<!DOCTYPE html>
<html lang="da">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Печать фонового изображения</title>
    <style>
        @media print {
            @page {
                size: A4;
                margin: 0;
            }

            body {
                margin: 0;
                padding: 0;
            }

            .print-background {
                position: fixed;
                top: 0;
                left: 0;
                width: 100vw;
                height: 100vh;
                background-image: url('images/background1.png');
                background-size: cover;
                background-repeat: no-repeat;
                background-position: center;
                z-index: -1;
            }

            .content {
                position: relative;
                margin: 2cm;
                background-color: rgba(255, 255, 255, 0.8); /* Полупрозрачный фон для улучшения читаемости текста */
                padding: 1cm;
                border-radius: 5px;
                page-break-inside: avoid;
            }
        }
    </style>
</head>
<body>
    <div class="print-background"></div>
    <div class="content">
        <h1>Содержимое для печати</h1>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
    </div>
    <div class="content">
        <h1>Содержимое для печати на странице 2</h1>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
    </div>
    <div class="content">
        <h1>Содержимое для печати на странице 3</h1>
        <p>Это текст, который будет напечатан с фоном на странице 3.</p>
        <p>Это текст, который будет напечатан с фоном на странице 3.</p>
        <p>Это текст, который будет напечатан с фоном на странице 3.</p>
        <p>Это текст, который будет напечатан с фоном на странице 3.</p>
    </div>
</body>
</html>

Питер 🙂

Установите высоту html и body на 100%, чтобы убедиться, что вся страница покрыта при печати.

Перенесите URL фонового изображения из CSS в тег <img>.

Это должно работать как с полями, так и без них в @page.

<!DOCTYPE html>
<html lang="da">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Печать фонового изображения</title>
    <style>
        @media print {
            @page {
                size: A4;
                margin: 0;
            }

            html,
            body {
                height: 100%;
                margin: 0;
                padding: 0;
            }

            .print-background {
                position: fixed;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
                z-index: -1;
            }
            .print-background img {
                width: 100%;
                height: 100%;
                object-fit: cover;
            }

            .content {
                position: relative;
                margin: 2cm;
                background-color: rgba(255, 255, 255, 0.8);
                padding: 1cm;
                border-radius: 5px;
                page-break-inside: avoid;
            }
        }
    </style>
</head>

<body>
    <div class="print-background">
        <img src="https://cataas.com/cat?width=1920&height=1080" alt="">
    </div>
    <div class="content">
        <h1>Содержимое для печати</h1>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
        <p>Это текст, который будет напечатан с фоном.</p>
    </div>
    <div class="content">
        <h1>Содержимое для печати на странице 2</h1>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
        <p>Это текст, который будет напечатан с фоном на странице 2.</p>
    </div>
    <div class="content">
        <h1>Содержимое для печати на странице 3</h1>
        <p>Это текст, который будет напечатан с фоном на странице 3.</p>
        <p>Это текст, который будет напечатан с фоном на странице 3.</p>
        <p>Это текст, который будет напечатан с фоном на странице 3.</p>
        <p>Это текст, который будет напечатан с фоном на странице 3.</p>
    </div>
</body>

</html>

Ответ или решение

Создание веб-страниц с возможностью печати требует детального внимания к стилям CSS, особенно когда дело доходит до настройки полей и фона. Рассмотрим, как установить поля для содержимого при печати и одновременно обеспечить заполнение страницы фоновым изображением. Давайте разберем вашу проблему и предложим оптимальное решение.

Проблема

Вы установили поля в @page с помощью свойства margin, чтобы обеспечить читаемость текста при печати, однако это приводит к тому, что фоновое изображение не заполняет страницу полностью.

Решение

Для того чтобы задать оттенок печатаемой страницы и при этом сохранить полноценное заполнение фоном, проектов CSS можно использовать следующее подход:

  1. Настройка @page с полями — устанавливаем поля для печатной версии, это обеспечит удобочитаемость содержимого.
  2. Фоновое изображение через <img> элемент — использование img вместо CSS свойства background-image, чтобы изображение всегда заполняло всю страницу.

Пример кода

Вот как может выглядеть ваш HTML-документ с соответствующими стилями:

<!DOCTYPE html>
<html lang="da">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Печать с фоновым изображением</title>
    <style>
        @media print {
            @page {
                size: A4;
                margin: 2cm; /* Поля для печати */
            }

            html, body {
                height: 100%;
                margin: 0;
                padding: 0;
            }

            .print-background {
                position: fixed;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
                z-index: -1;
            }

            .print-background img {
                width: 100%;
                height: 100%;
                object-fit: cover; /* Изображение заполнит пространство */
            }

            .content {
                position: relative;
                background-color: rgba(255, 255, 255, 0.8); /* Полупрозрачный фон для читаемости */
                padding: 1cm;
                border-radius: 5px;
                page-break-inside: avoid; /* Избежание разрывов страниц внутри блока */
            }
        }
    </style>
</head>
<body>
    <div class="print-background">
        <img src="images/background1.png" alt="Фоновое изображение">
    </div>
    <div class="content">
        <h1>Содержимое для печати</h1>
        <p>Это текст, который будет напечатан на фоне.</p>
        <!-- Дополнительное содержимое... -->
    </div>
    <!-- Дополнительные блоки .content для других страниц -->
</body>
</html>

Примечания к коду

  • Стратегия использования img: Перемещение фонового изображения в элемент img помогает гарантировать, что изображение всегда будет занимать 100% доступного пространства, обеспечивая красивый практически полный фон при печати.
  • Управление полями: Указание полей в @page позволяет вам сохранить информацию и облегчить восприятие текста, при этом фон остается на месте за счет фиксированного позиционирования.
  • Использование object-fit: Свойство object-fit: cover обеспечивает то, что изображение заполняет контейнер, сохраняя свои пропорции, что делает его визуально привлекательным.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...