Как скрыть элемент при печати веб-страницы?
У меня есть ссылка на мою веб-страницу, чтобы распечатать веб-страницу. Однако ссылка также видна в самой распечатке.
Есть ли JavaScript или HTML-код, который скрывал бы кнопку ссылки, когда я нажимал ссылку для печати?
Пример:
"Good Evening"
Print (click Here To Print)
Я хочу скрыть эту метку "Печать", когда она печатает текст "Добрый вечер". Этикетка "Печать" не должна отображаться на самой распечатке.
11 ответов
В вашей таблице стилей добавьте:
@media print
{
.no-print, .no-print *
{
display: none !important;
}
}
Затем добавьте class='no-print'
(или добавьте класс no-print в существующий оператор класса) в своем HTML-коде, который вы не хотите отображать в печатной версии, например в кнопке.
Bootstrap 3 имеет свой собственный класс для этого:
hidden-print
Это определяется так:
@media print {
.hidden-print {
display: none !important;
}
}
Вы не должны определять это самостоятельно.
В Bootstrap 4 это изменилось на:
.d-print-none
Лучше всего использовать таблицу стилей специально для печати и установить ее media
приписывать print
,
В нем покажите / скройте элементы, которые вы хотите напечатать на бумаге.
<link rel="stylesheet" type="text/css" href="print.css" media="print" />
Вот простое решение поставить этот CSS
<style>
@media print{
.noprint{
display:none;
}
}
а вот и HTML
<div class="noprint">
element that need to be hide when printing
</div>
<div class="noprint">
element that need to be hide when printing
</div>
CSS FILE
@media print
{
#pager,
form,
.no-print
{
display: none !important;
height: 0;
}
.no-print, .no-print *{
display: none !important;
height: 0;
}
}
HTML HEADER
<link href="/theme/css/ui/ui.print.css?version=x.x.x" media="print" rel="stylesheet" type="text/css" >
ЭЛЕМЕНТ
<div class="no-print"></div>
Вы можете поместить ссылку в элемент div, а затем использовать JavaScript в теге привязки, чтобы скрыть элемент div при нажатии. Пример (не тестировался, может потребоваться настроить, но вы поняли):
<div id="printOption">
<a href="javascript:void();"
onclick="document.getElementById('printOption').style.visibility = 'hidden';
document.print();
return true;">
Print
</a>
</div>
Недостатком является то, что после нажатия кнопка исчезает, и они теряют эту опцию на странице (хотя всегда есть Ctrl+P).
Лучшим решением было бы создать таблицу стилей печати и в ней указать скрытый статус printOption
ID (или как вы это называете). Вы можете сделать это в разделе заголовка HTML и указать вторую таблицу стилей с атрибутом media.
@media print {
.no-print {
visibility: hidden;
}
}
<div class="no-print">
Nope
</div>
<div>
Yup
</div>
Лучше всего создать версию страницы, предназначенную только для печати.
Ой, подождите... это уже не 1999 год. Используйте печатный CSS с "display: none".
Если у вас есть Javascript, который вмешивается в свойство стиля отдельных элементов, переопределяя !important
Предлагаю справиться с событиями onbeforeprint
а также onafterprint
, https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeprint
Принятый ответ от diodus не работает для некоторых, если не для всех нас. Я все еще не мог скрыть свою кнопку "Печатать эту кнопку" от выхода на бумагу.
Небольшая корректировка Клинтом Пахлом вызова файла CSS путем добавления
media="screen, print"
и не только
media="screen"
решает эту проблему. Так что для наглядности и потому, что Клинту Пахлю непросто увидеть скрытую дополнительную помощь в комментариях. Пользователь должен включить ",print" в css файл с желаемым форматированием.
<link rel="stylesheet" href="my_cssfile.css" media="screen, print"type="text/css">
и не только по умолчанию media = "screen".
<link rel="stylesheet" href="my_cssfile.css" media="screen" type="text/css">
Это, я думаю, решает эту проблему для всех.
Как сказал Элиас Хасле, JavaScript может переопределить
!important
. Итак, я расширил его ответ теоретической реализацией.
Этот код идентифицирует все элементы с классом
no-print
, скрывает их с помощью CSS перед печатью и восстанавливает исходный стиль после печати:
var noPrintElements = [];
window.addEventListener("beforeprint", function(event) {
var hideMe = document.getElementsByClassName("no-print");
noPrintElements = [];
Array.prototype.forEach.call(hideMe, function(item, index) {
noPrintElements.push({"element": item, "display": item.style.display });
item.style.display = 'none'; // hide the element
});
});
window.addEventListener("afterprint", function(event) {
Array.prototype.forEach.call(noPrintElements, function(item, index) {
item.element.style.display = item.display; // restore the element
});
noPrintElements = []; // just to be on the safe side
});