break-before와 break-after는 엘레멘트 앞뒤에서 무조건 분할하도록 하는 속성이다. 가변 길이 문서에서 가장 유용한 것은 break-inside: avoid-page;이다. 엘레멘트가 너무 길어서 도중에 페이지 분할이 일어날 경우, 그렇게 두지 않고 페이지를 분할해서 다음 페이지 맨 위로 보낸다. 웹페이지의 주요 단락을 구성하는 엘레멘트마다 해당 속성을 설정해주면 출력물의 페이지 분할을 고려하지 않아도 별다른 문제가 생기지 않는다.
참고사항
page-break-before, vs break-before? → 전자가 후자로 교체되었다.
@mediaprint {
/* 프린트되지 않도록 하는 클래스 */ .no-print {
display: none;
}
}
@media screen 사용하듯이, @media print를 사용해 출력에만 영향을 주는 스타일을 @media print 아래로 설정한다.
관심 영역만 출력하기: 상위 요소를 배제
@mediaprint {
.container {
width: 1024px;
margin: 0auto;
}
/* (예시) container보다 상위 엘레멘트는 출력에 영향을 주지 않도록 속성을 재설정해준다. */html,body {
width: auto;
height: auto;
margin: 0;
padding: 0;
background-color: transparent;
border: none;
box-shadow: none;
}
}
.container 내부만 출력한다고 했을 때, 좌우 margin을 auto로 준다. 그러면 외부 엘레멘트가 존재해도 문서가 가운데로 오게 된다. 외부 엘레멘트에도 크기(width, height)나 여백(margin, padding) 등이 설정됐을 경우, 프린트 할 때는 출력되지 않도록 재설정해준다.
당연한 말이지만 만약 상위 요소에 따로 지정된 스타일이 없다면 위처럼 재설정하지 않아도 된다.
결론
출판물과는 다르게 웹페이지는 세로 길이가 가변적이기 때문에 각각의 엘레멘트의 길이에 따라 동적으로 페이지를 분할해주는 break-inside 속성을 유용하게 사용할 수 있다. 컨텐츠가 확정된 경우 페이지 분할을 더 엄격하게 관리하려면 break-before/break-after 속성을 사용하면 된다.
페이지 비율을 설정하기 위해 @media print 내에서 width를 설정해주고, 또 관심 영역만 출력되도록 상위 엘레멘트들의 CSS를 설정해주면 프린트 친화적인 반응형 웹페이지를 디자인했다고 할 수 있겠다.