Как показывать только определенные части с помощью CSS для печати?
У меня есть страница с большим количеством данных, таблиц и контента.
Я хочу сделать версию для печати, в которой будет отображаться только очень мало избранных вещей.
Вместо того, чтобы писать другую страницу только для печати, я читал о функции CSS для "@media print".
Во-первых, какие браузеры поддерживают его? Поскольку это внутренняя функция, это нормально, если поддерживают только последние браузеры.
Я думал о том, чтобы пометить несколько элементов DOM классом "printable" и в основном применить "display: none" ко всему, кроме тех, что относятся к классу "printable".
Это выполнимо?
Как мне это достичь?
EDIT:
Это то, что у меня есть до сих пор:
<style type="text/css">
@media print {
* {display:none;}
.printable, .printable > * {display:block;}
}
</style>
Но он скрывает все. Как я могу сделать эти "печатные" элементы видимыми?
EDIT:
Попытка теперь отрицательного подхода
<style type="text/css">
@media print {
body *:not(.printable *) {display:none;}
}
</style>
Это выглядит хорошо в теории, однако это не сработает. Может быть, "не" не поддерживает расширенный CSS...
Ответы
Ответ 1
Запустите здесь. Но в основном то, что вы думаете, это правильный подход.
Спасибо, теперь мой вопрос на самом деле становление: как применить CSS к класс И ВСЕ ЕГО ОСОБЕННОСТИ ЭЛЕМЕНТЫ? Чтобы я мог применить "display: block" - все, что находится в "печатные" зоны.
Если элемент установлен в display:none;
, все его дети также будут скрыты. Но в любом случае. Если вы хотите, чтобы стиль применялся ко всем дочерним объектам, вы делаете следующее:
.printable * {
display: block;
}
Это применило бы стиль ко всем дочерним элементам "печатаемой" зоны.
Ответ 2
Простой способ:
<style>
.print-only{
display: none;
}
@media print {
.no-print {
display: none;
}
.print-only{
display: block;
}
}
</style>
Ответ 3
Я попал сюда, потому что мне было любопытно напечатать диаграмму, сгенерированную chart.js. Я хотел просто напечатать диаграмму прямо со страницы (с помощью кнопки, которая делает "window.print") без всего остального содержимого страницы.
Итак, я подошел ближе, используя метод из ответа здесь: Почему я не могу переопределить свойство отображения, примененное через звездочку? ,
Вы должны применить звездочку к элементу body, а не только к нему. Итак, используя пример CSS, который ОП (Натан) добавил к вопросу, я изменил его на следующее:
<style type="text/css">
@media print {
body * {display:none;}
.printable, .printable > * {
display: block !important;
}
}
</style>
Затем добавьте этот "печатный" класс к самой диаграмме, как в
<canvas id="myChart" class="printable" width="400" height="400"></canvas>
Который удалил все элементы страницы на печатном выходе, кроме диаграммы, когда нажата кнопка "печать" (через это):
<script>
myChart.render();
document.getElementById("printChart").addEventListener("click",function(){
window.print();
});
</script>
Так что, возможно, это поможет всем, кто попадает в этот вопрос через Google.
Ответ 4
Почти все браузеры поддерживают его. Возможно, было бы полезно использовать атрибут media
в теге link
.
Использование display: none;
в некоторых ваших правилах будет подходящим способом обработки вашей ситуации.
Ответ 5
Я предлагаю скрыть элемент, который вы не будете печатать:
HTML
<h1 class="no-print" >Welcome Just Screen</h1>
<div> I want print this section :)</div>
<div class="no-print">It display only on screen</div>
CSS
@media print {
.no-print {
display: none;
}
}
Ответ 6
Если вы хотите отображать некоторые ссылки и т.д. В браузере, вы не хотите их печатать. Кроме того, у вас есть логотипы и фирменные бланки, которые должны быть только на распечатанной странице Кажется, это работает нормально:
Пример:
CSS:
@media print {
.noPrint {
display:none;
}
}
@media screen {
.onlyPrint {
display: none;
}
}
HTML:
<div class="noPrint" id="this_is_not_printed" >
<a href=links.html>
</div>
<div class="onlyPrint" id="this_is_only_seen_on_printer" >
<img scr=logo.png >
<img scr=letterhead.png >
</div>