Insgesamt hat mir keine dieser Antworten wirklich gefallen. Wenn Sie eine Klasse (sagen wir printableArea) und haben, dass als ein unmittelbares Kind von Körper, dann können Sie so etwas wie dieses in Ihrem Druck-CSS tun:
body > *:not(.printableArea) {
display: none;
}
//Not needed if already showing
body > .printableArea {
display: block;
}
Für diejenigen, die printableArea an anderer Stelle suchen, müssen Sie sicherstellen, dass die Eltern von printableArea angezeigt werden:
body > *:not(.parentDiv),
.parentDiv > *:not(.printableArea) {
display: none;
}
//Not needed if already showing
body > .printableArea {
display: block;
}
Die Verwendung der Sichtbarkeit kann zu einer Vielzahl von Abstandsproblemen und leeren Seiten führen. Das liegt daran, dass die Sichtbarkeit den Platz des Elements beibehält, es nur verbirgt, während die Anzeige es entfernt und anderen Elementen erlaubt, seinen Platz einzunehmen.
Der Grund, warum diese Lösung funktioniert, ist, dass Sie nicht alle Elemente greifen, sondern nur die unmittelbaren Kinder von body und sie ausblenden. Die anderen Lösungen unten mit display css, verstecken alle Elemente, die Auswirkungen alles innerhalb von printableArea Inhalt.
Ich würde kein Javascript vorschlagen, da Sie eine Druckschaltfläche benötigen, auf die der Benutzer klickt, und die Standard-Druckschaltflächen des Browsers hätten nicht die gleiche Wirkung. Wenn Sie das wirklich tun müssen, würde ich die HTML von body speichern, alle unerwünschten Elemente entfernen, drucken und dann die HTML wieder einfügen. Wie bereits erwähnt, würde ich dies jedoch vermeiden, wenn Sie können und verwenden Sie eine CSS-Option wie oben.
HINWEIS: Sie können beliebige CSS in das Druck-CSS einfügen, indem Sie Inline-Stile verwenden:
<style type="text/css">
@media print {
//styles here
}
</style>
Oder, wie ich es normalerweise mache, ein Link-Tag:
<link rel="stylesheet" type="text/css" media="print" href="print.css" />
2 Stimmen
stackoverflow.com/questions/2255291/ dieser Link funktioniert perfekt