【发布时间】:2010-09-26 04:48:24
【问题描述】:
我的网页上有一个链接可以打印该网页。但是,该链接在打印输出本身中也可见。
是否有 javascript 或 HTML 代码会在我单击打印链接时隐藏链接按钮?
例子:
"Good Evening"
Print (click Here To Print)
我想在打印文本“晚安”时隐藏此“打印”标签。 “打印”标签不应显示在打印输出本身上。
【问题讨论】:
我的网页上有一个链接可以打印该网页。但是,该链接在打印输出本身中也可见。
是否有 javascript 或 HTML 代码会在我单击打印链接时隐藏链接按钮?
例子:
"Good Evening"
Print (click Here To Print)
我想在打印文本“晚安”时隐藏此“打印”标签。 “打印”标签不应显示在打印输出本身上。
【问题讨论】:
您可以将链接放在 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 的 head 部分执行此操作,并使用 media 属性指定第二个样式表。
【讨论】:
最佳做法是使用专门用于打印的样式表,并将其media 属性设置为print。
在其中,显示/隐藏要打印在纸上的元素。
<link rel="stylesheet" type="text/css" href="print.css" media="print" />
【讨论】:
在您的样式表中添加:
@media print
{
.no-print, .no-print *
{
display: none !important;
}
}
然后在您的 HTML 中添加您不想出现在打印版本中的 class='no-print'(或将 no-print 类添加到现有的类语句中),例如您的按钮。
【讨论】:
@media 打印和@media 屏幕。在打印部分,您可以放置样式以进行打印。在丝网部分中,您可以放置用于丝网印刷的样式。您甚至可以为不同的分辨率设置多个屏幕部分。基本上,如果您只是添加此答案中给出的内容,它将不起作用。相信我我已经试过了。那么这是如何获得 69 票的呢?
@media print { .no-print, .no-print * { display: none !important; } }
<link rel="stylesheet" href="all.css" media="screen, print" type="text/css">
@media screen,但这里不是这种情况:默认情况下,所有元素都会显示,并且通过定义隐藏元素的仅打印样式完全足以使其仍然出现在屏幕上。
最好的办法是创建页面的“仅打印”版本。
哦,等等……这已经不是 1999 年了。使用带有“display: none”的打印 CSS。
【讨论】:
CSS 文件
@media print
{
#pager,
form,
.no-print
{
display: none !important;
height: 0;
}
.no-print, .no-print *{
display: none !important;
height: 0;
}
}
HTML 标题
<link href="/theme/css/ui/ui.print.css?version=x.x.x" media="print" rel="stylesheet" type="text/css" >
元素
<div class="no-print"></div>
【讨论】:
Bootstrap 3 调用了 its own class for this:
hidden-print
它是这样定义的:
@media print {
.hidden-print {
display: none !important;
}
}
您不必自己定义。
在 Bootstrap 4 和 Bootstrap5 中,这已更改为:
.d-print-none
【讨论】:
这是一个简单的解决方案 把这个 CSS
@media print{
.noprint{
display:none;
}
}
这里是 HTML
<div class="noprint">
element that need to be hidden when printing
</div>
【讨论】:
@media print {
.no-print {
visibility: hidden;
}
}
<div class="no-print">
Nope
</div>
<div>
Yup
</div>
【讨论】:
diodus 接受的答案对我们中的某些人(如果不是所有人)都不起作用。 我仍然无法隐藏我的“打印此按钮”,以免打印到纸上。
Clint Pachl 对添加调用css文件的小调整
media="screen, print"
不只是
media="screen"
正在解决这个问题。所以为了清楚起见,因为不容易看到 Clint Pachl 在 cmets 中隐藏了额外的帮助。 用户应在 css 文件中包含所需格式的“,print”。
<link rel="stylesheet" href="my_cssfile.css" media="screen, print"type="text/css">
而不是默认媒体 =“屏幕”。
<link rel="stylesheet" href="my_cssfile.css" media="screen" type="text/css">
我认为这可以为每个人解决这个问题。
【讨论】:
如果您的 Javascript 会干扰单个元素的样式属性,从而覆盖 !important,我建议处理事件 onbeforeprint 和 onafterprint。 https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeprint
【讨论】:
正如 Elias Hasle 所说,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
});
【讨论】: