A4 용지 크기를 설정하는 CSS
웹에서 A4 용지를 시뮬레이션해야 하며이 페이지가 브라우저 (Chrome, 특히)에 표시 될 때 인쇄 할 수 있습니다. 요소 크기를 21cm x 29.7cm로 설정했지만 인쇄 (또는 인쇄 미리보기)로 보내면 페이지가 잘립니다.
이 라이브 예를 참조하십시오 !
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>
뭔가 잊어 버린 것 같아요. 그러나 그것은 무엇입니까?
- 크롬 : 클리핑 페이지, 이중 페이지 ( 작동하는 데 필요한 것입니다 )
- Firefox : 완벽하게 작동합니다.
- IE10 : 믿거 나 말거나 완벽합니다!
- Opera : 인쇄 미리보기에서 매우 버그가 있음
I looked into this a bit more and the actual problem seems to be with assigning initial
to page width
under the print
media rule. It seems like in Chrome width: initial
on the .page
element results in scaling of the page content if no specific length value is defined for width
on any of the parent elements (width: initial
in this case resolves to width: auto
... but actually any value smaller than the size defined under the @page
rule causes the same issue).
So not only the content is now too long for the page (by about 2cm
), but also the page padding will be slightly more than the initial 2cm
and so on (it seems to render the contents under width: auto
to the width of ~196mm
and then scale the whole content up to the width of 210mm
~ but strangely exactly the same scaling factor is applied to contents with any width smaller than 210mm
).
To fix this problem you can simply in the print
media rule assign the A4 paper width and hight to html, body
or directly to .page
and in this case avoid the initial
keyword.
DEMO
@page {
size: A4;
margin: 0;
}
@media print {
html, body {
width: 210mm;
height: 297mm;
}
/* ... the rest of the rules ... */
}
This seems to keep everything else the way it is in your original CSS and fix the problem in Chrome (tested in different versions of Chrome under Windows, OS X and Ubuntu).
CSS
body {
background: rgb(204,204,204);
}
page[size="A4"] {
background: white;
width: 21cm;
height: 29.7cm;
display: block;
margin: 0 auto;
margin-bottom: 0.5cm;
box-shadow: 0 0 0.5cm rgba(0,0,0,0.5);
}
@media print {
body, page[size="A4"] {
margin: 0;
box-shadow: 0;
}
}
HTML
<page size="A4"></page>
<page size="A4"></page>
<page size="A4"></page>
https://github.com/cognitom/paper-css seems to solve all my needs.
Paper CSS for happy printing
Front-end printing solution - previewable and live-reloadable!
참고URL : https://stackoverflow.com/questions/16649943/css-to-set-a4-paper-size
'IT story' 카테고리의 다른 글
캘린더 응용 프로그램에서 되풀이 이벤트를 모델링하는 가장 좋은 방법은 무엇입니까? (0) | 2020.04.28 |
---|---|
XQuery / XPath에 해당하는 JSON이 있습니까? (0) | 2020.04.28 |
JSON 키는 따옴표로 묶어야합니까? (0) | 2020.04.28 |
JavaScript에서 가장 빠른 MD5 구현 (0) | 2020.04.28 |
입력 유형 = "제출"Vs 버튼 태그는 서로 호환됩니까? (0) | 2020.04.28 |