Мне нужно смоделировать бумагу формата А4 в Интернете и разрешить распечатывать эту страницу так, как она отображается в браузере (в частности, Chrome). Я установил размер элемента на 21 см х 29,7 см, но когда я отправляю на печать (или предварительный просмотр), он обрезает мою страницу.
Смотрите этот живой пример !
body {
margin: 0;
padding: 0;
background-color: #FAFAFA;
font: 12pt "Tahoma";
}
* {
box-sizing: border-box;
-moz-box-sizing: border-box;
}
.page {
width: 21cm;
min-height: 29.7cm;
padding: 2cm;
margin: 1cm auto;
border: 1px #D3D3D3 solid;
border-radius: 5px;
background: white;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
}
.subpage {
padding: 1cm;
border: 5px red solid;
height: 256mm;
outline: 2cm #FFEAEA solid;
}
@page {
size: A4;
margin: 0;
}
@media print {
.page {
margin: 0;
border: initial;
border-radius: initial;
width: initial;
min-height: initial;
box-shadow: initial;
background: initial;
page-break-after: always;
}
}
<div class="book">
<div class="page">
<div class="subpage">Page 1/2</div>
</div>
<div class="page">
<div class="subpage">Page 2/2</div>
</div>
</div>
Я думаю, что забыл что-то. Но что бы это было?
- Chrome : страница обрезки, двойная страница ( это то, что мне нужно, чтобы она работала )
- Firefox : работает отлично.
- IE10 : верьте или нет, но это прекрасно!
- Opera : очень глючит при предварительном просмотре
css
printing
print-preview
Дэвид Родригес
источник
источник
Ответы:
Я посмотрел на это немного больше, и реальная проблема, кажется, связана с назначением
initial
страницы вwidth
соответствии сprint
правилом медиа. Похоже , что в Chromewidth: initial
на.page
результатах элементов в масштабировании содержимого страницы , если значение длины конкретной не определенно дляwidth
на любом из родительских элементов (width: initial
в данном случае решает доwidth: auto
... но на самом деле любого значения меньше размера , определенного в соответствии с@page
правилом вызывает ту же проблему).Таким образом, не только содержимое теперь слишком длинное для страницы (примерно
2cm
), но и отступы страницы будут немного больше, чем исходные2cm
и т. Д. (Кажется, что содержимое отображаетсяwidth: auto
в ширину,~196mm
а затем масштабируется все содержимое до ширины210mm
~, но, как ни странно, точно такой же коэффициент масштабирования применяется к содержимому с любой шириной, меньшей, чем210mm
).Чтобы устранить эту проблему, вы можете просто в
print
правиле мультимедиа назначить ширину и высоту бумаги формата А4html, body
или напрямую,.page
и в этом случае избегайтеinitial
ключевого слова.DEMO
Похоже, что все остальное остается таким же, как в исходном CSS, и устраняет проблему в Chrome (протестировано в разных версиях Chrome под Windows, OS X и Ubuntu).
источник
256mm
(и, таким образом237mm
, в конечном итоге) для.subpage
элемента?256mm
слегка округлен до высоты бумаги формата А4 без отступов:297mm - 2*20mm
... возможно,257mm
это было бы немного более очевидно ;-) И в моем предыдущем примере237mm
учитывалось~2cm
"слишком длинное" содержимое ... но только поверхностно решенное эта проблема. См. Мой обновленный ответ выше для фактического решения.CSS
HTML
DEMO
источник
<page>
недопустимое имя пользовательского элемента HTMLbox-shadow: 0;
не работает (по крайней мере, в Chrome), так и должно бытьbox-shadow: none;
. Две декларации полей также могут быть объединены вmargin: 0 auto 0.5cm;
.https://github.com/cognitom/paper-css, кажется, решает все мои потребности.
Бумага CSS для счастливой печати
источник