繁体   English   中英

如何在打印 web 页面时隐藏元素?

[英]How do I hide an element when printing a web page?

我的网页上有一个打印网页的链接。 但是,该链接在打印输出本身中也可见。

当我点击打印链接时,是否有 javascript 或 HTML 代码会隐藏链接按钮?

例子:

 "Good Evening"
 Print (click Here To Print)

我想在打印文本“晚上好”时隐藏此“打印”label。 “打印”label 不应显示在打印输出本身上。

在您的样式表中添加:

@media print
{    
    .no-print, .no-print *
    {
        display: none !important;
    }
}

然后在您不想出现在打印版本中的 HTML 中添加class='no-print' (或将 no-print 类添加到现有的 class 语句),例如您的按钮。

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

@media print{
   .noprint{
       display:none;
   }
}

这是 HTML

<div class="noprint">
    element that need to be hidden when printing
</div>

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>

您可以将链接放在 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 { .no-print { visibility: hidden; } }
 <div class="no-print"> Nope </div> <div> Yup </div>

最好的办法是创建页面的“仅打印”版本。

哦,等等……这已经不是 1999 年了。 使用带有“display: none”的打印 CSS。

diodus 接受的答案对我们所有人都不起作用。 我仍然无法隐藏我的 Print this 按钮,以免出现在纸上。

Clint Pachl 通过添加调用 css 文件的小调整

      media="screen, print" 

而不仅仅是

      media="screen"

正在解决这个问题。 所以为了清楚起见,因为在评论中看到 Clint Pachl 隐藏了额外的帮助并不容易。 用户应在具有所需格式的 css 文件中包含“,print”。

     <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 ,我建议处理onbeforeprintonafterprint事件。 https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeprint

正如 Elias Hasle 所说,javascript 会覆盖!importent 所以,我扩展了他的回答。 该代码使用类no-print标识所有元素,在打印前将其隐藏,并在打印后恢复原始样式。

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 save side
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM