Muszę zasymulować papier A4 w Internecie i pozwolić na wydrukowanie tej strony, tak jak jest wyświetlana w przeglądarce (konkretnie Chrome). Ustawiam rozmiar elementu na 21 cm x 29,7 cm, ale kiedy wysyłam do wydruku (lub podgląd wydruku), przycina moją stronę.
Zobacz ten przykład na żywo !
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>
Myślę, że coś zapominam. Ale co by to było?
- Chrome : strona przycinająca, podwójna strona ( to po prostu to, czego potrzebuję do działania )
- Firefox : działa idealnie.
- IE10 : wierzcie lub nie, jest idealny!
- Opera : bardzo błędna w podglądzie wydruku
css
printing
print-preview
David Rodrigues
źródło
źródło
Odpowiedzi:
Spojrzałem na to trochę więcej i wydaje się, że rzeczywistym problemem jest przypisywanie
initial
stronywidth
doprint
reguły medialnej. Wydaje się, że w Chromewidth: initial
na.page
wynikach elementów w skalowanie zawartości strony, jeśli wartość nie jest określona długość specyficzne dlawidth
na każdy z elementów nadrzędnych (width: initial
w tym przypadku postanawiawidth: auto
... ale faktycznie każda wartość mniejsza niż rozmiar określonego zgodnie z@page
regułą powoduje ten sam problem).Więc nie tylko treść jest teraz zbyt długa dla strony (o około
2cm
), ale także dopełnienie strony będzie nieco większe niż początkowe2cm
i tak dalej (wydaje się, że renderuje zawartośćwidth: auto
do szerokości,~196mm
a następnie skaluje całą zawartość do szerokości210mm
~, ale dziwnie dokładnie ten sam współczynnik skalowania jest stosowany do zawartości o dowolnej szerokości mniejszej niż210mm
).Aby rozwiązać ten problem, możesz po prostu w
print
regule nośnika przypisać szerokość i wysokość papieru A4 dohtml, body
lub bezpośrednio do.page
iw tym przypadku uniknąćinitial
słowa kluczowego.PRÓBNY
Wygląda na to, że zachowuje wszystko tak, jak jest w oryginalnym CSS i rozwiązuje problem w Chrome (testowany w różnych wersjach Chrome pod Windows, OS X i Ubuntu).
źródło
256mm
(a tym samym237mm
ostatecznie).subpage
elementu?256mm
jest lekko zaokrąglona w dół papieru A4 wysokości bez wyściółki Strona:297mm - 2*20mm
... może257mm
byłoby nieco bardziej oczywiste ;-) A w moim poprzednim przykładzie237mm
stanowiły~2cm
„zbyt długo” treści ... ale tylko powierzchownie rozwiązane problem. Zobacz moją zaktualizowaną odpowiedź powyżej, aby znaleźć rzeczywiste rozwiązanie.CSS
HTML
PRÓBNY
źródło
<page>
nie jest prawidłową niestandardową nazwą elementu HTMLbox-shadow: 0;
nie działa (przynajmniej w Chrome), powinno byćbox-shadow: none;
. Dwie deklaracje marginesów można również połączyć wmargin: 0 auto 0.5cm;
.https://github.com/cognitom/paper-css wydaje się spełniać wszystkie moje potrzeby.
Papier CSS dla szczęśliwego drukowania
źródło