인쇄 페이지용 미디어 쿼리로, 인쇄 시 변경되는 부분을 명시
@media print { }
페이지에서 숨겨야 하는 부분은 display를 통해 제어
@media print {
header, footer, .no-print { display:none }
}
해당 엘리먼트의 이전 페이지 넘김을 지정
page-break-before: [auto, inherit, always, avoid, left, right]
- auto: 자동
- inherit: 부모 값 상속
- always: 해당 엘리먼트의 앞 페이지 넘김
- avoid: 해당 엘리먼트의 앞 페이지 넘김을 금지
- left: 엘리먼트 앞에서 분리된 페이지가 왼쪽 면에 위치
- right: 엘리먼트 앞에서 분리된 페이지가 오른쪽 면에 위치
해당 엘리먼트의 다음 페이지 넘김을 지정
page-break-after: [auto, inherit, always, avoid, left, right]
해당 엘리먼트의 내부 페이지 넘김을 지정
page-break-after: [auto, inherit, avoid]
인쇄 시, background속성(background-image, background-color)를 강제로 보이게 지정
@media print {
* {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
}
@page {
size: auto;
size: portrait;
size: landscape;
size: 6in;
size: 4in 6in;
size: A4;
size: B5;
size: letter;
size: A4 portrait;
}
@page {margin:0}
이 문제는 개인적으로 IE에서 애를 먹었던 문제.
근본적인 해결 방안이 아니라 꼼수일 수 있음. 🤣
HTML
<ul class="list__page">
<li class="page">
<img class="content" src="/content-image.jpg" alt="content">
<img class="watermark" src="/watermark-image.svg" alt="content">
<!--watermark가 svg인 경우는, 불투명한 로고를 워터마크 이미지로 사용해야 하는데
png파일은 IE에서 인쇄시 보이지 않는 경우가 있었음. ㅜㅜ -->
</li>
</ul>
CSS
@page {
size:210mm 297mm; /*A4*/
margin:0mm
}
@media print{
html, body {
margin:0;
padding:0;
page-break-after: avoid;
page-break-before: avoid
}
.body, .page {margin-top:-1px} /*서브픽셀 해결1*/
.page:first-child {
page-break-before: auto;
page-break-inside: avoid
}
.page {
overflow:hidden;
position:relative;
width:210mm;
height:297mm; /*서브픽셀 해결1 사용시*/
height:calc(297mm - 1px); /*서브픽셀 해결2 - IE는 미지원*/
page-break-before: always
}
.page > .content { /*img를 .page안에 꽉차게 */
position:absolute;
top:0;
left:0;
right:0;
width:100%;
height:100%
}
.page > .watermark {
position:absolute;
top:45%;
left:25%;
width:50%;
height:10%;
z-index:50
}
}
.print{zoom:98%}
요 편법으로 해결해보기로.;;Memo
감사합니다