Вопрос или проблема
Я создаю небольшую веб-страницу, которая также имеет функцию печати. У меня возникли проблемы с разрывами страниц и полями. Если я устанавливаю поля в @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 можно использовать следующее подход:
- Настройка
@page
с полями — устанавливаем поля для печатной версии, это обеспечит удобочитаемость содержимого. - Фоновое изображение через
<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
обеспечивает то, что изображение заполняет контейнер, сохраняя свои пропорции, что делает его визуально привлекательным.
Заключение
Используя предложенные настройки, вы сможете добиться идеального результата при печати вашей веб-страницы. Это обеспечит читабельность текста и в то же время сохранит полноценный фон, что делает ваш документ более эстетически привлекательным.