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

413 css printing

我的网页上有一个链接来打印网页.但是,链接在打印输出中也是可见的.

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

例:

 "Good Evening"
 Print (click Here To Print)
Run Code Online (Sandbox Code Playgroud)

我想在打印文本"晚安"时隐藏这个"打印"标签."打印"标签不应显示在打印输出本身上.

Dio*_*ane 708

在样式表中添加:

@media print
{    
    .no-print, .no-print *
    {
        display: none !important;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后class='no-print'在HTML中添加(或将no-print类添加到现有的类语句中),不希望在打印版本中显示,例如按钮.

  • 这个答案并不完整.你必须有两个媒体部分.`@media` print和`@media`屏幕.在打印部分,您可以放置​​样式进行打印.在屏幕屏幕部分,您可以将样式放置在丝网印刷中.您甚至可以为不同的分辨率设置多个屏幕部分.基本上,如果您只是添加此答案中给出的内容,它将无法正常工作.相信我,我试过了.那么这是如何获得69票的呢? (16认同)
  • 我确实试图在里面隐藏一个带有几个子元素的<div>.问题是有些元素在印刷时仍然可见.解决方法是使用这个css:`@media print {.no-print,.no-print*{display:none!important; } (6认同)
  • 根据指定的媒体,这可能有效,也可能无效.例如,要在一个样式表中组合屏幕和打印样式,然后在该样式表中使用媒体查询,正如此答案所示,您必须同时指定"屏幕"和"打印"媒体类型:`<link rel ="stylesheet"href ="all.css"media ="screen,print"type ="text/css">` (6认同)
  • 实际上,如果您只使用给定的代码,它确实有效.我刚试过firefox.所以,至少在现代浏览器中,这是解决方案. (5认同)
  • @ Codeguy007:我不明白你的观点.如果你想定义仅限屏幕的样式,你只需要`@media screen`,但这不是这里的情况:默认情况下显示所有元素,并通过定义隐藏元素的仅打印样式完全足以使它成为现实仍然出现在屏幕上. (5认同)
  • @Chiccodoro 当我们不这样做时,我们在某些浏览器上遇到了问题。也许规范说你不应该定义“@media screen”,但是一旦我们添加了“@media print”,页面就会在某些浏览器中停止正常工作。 (2认同)

And*_*ech 167

最佳做法是使用专门用于打印的样式表,并将其media属性设置为print.

在其中,显示/隐藏要在纸张上打印的元素.

<link rel="stylesheet" type="text/css" href="print.css" media="print" />
Run Code Online (Sandbox Code Playgroud)

  • 在这里你也应该有css不显示其他包装内容,将font-family更改为更好的值,删除宽度以允许完全使用页面.如果将主样式表设置为media ="screen",则可以将打印样式表视为新的playgound. (9认同)
  • 绝对.使用这种方法,您可以只删除"单击此处获取可打印版本"或添加"此页面适合打印机"或类似内容.正如Steve Perks所说,良好的做法是删除所有不受欢迎的内容,如导航,广告等.仅包括页面的主要内容. (2认同)

Bij*_*jan 161

引导3有自己的类此呼吁:

hidden-print
Run Code Online (Sandbox Code Playgroud)

它的定义如下:

@media print {
  .hidden-print {
    display: none !important;
  }
}
Run Code Online (Sandbox Code Playgroud)

您不必自己定义它.


Bootstrap 4中,这已改为:

.d-print-none
Run Code Online (Sandbox Code Playgroud)


Nes*_*ori 36

这是一个简单的解决方案

<style>
@media print{
   .noprint{
       display:none;
   }
}
Run Code Online (Sandbox Code Playgroud)

这是HTML

<div class="noprint">
    element that need to be hidden when printing
</div>
<div class="noprint">
    element that need to be hidden when printing
</div>
Run Code Online (Sandbox Code Playgroud)

  • 一个类是比这里的id更好的选择,原因很简单,如果你使用id,那么你只能将这个规则应用于每页一个.课程允许您在需要的地方应用它. (3认同)
  • 我应该将其标记为已批准的答案。 (2认同)

use*_*549 12

CSS文件

@media print
{
    #pager,
    form,
    .no-print
    {
        display: none !important;
        height: 0;
    }


    .no-print, .no-print *{
        display: none !important;
        height: 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

HTML HEADER

<link href="/theme/css/ui/ui.print.css?version=x.x.x" media="print" rel="stylesheet" type="text/css" >
Run Code Online (Sandbox Code Playgroud)

元件

<div class="no-print"></div>
Run Code Online (Sandbox Code Playgroud)


Jus*_*ott 10

您可以将链接放在div中,然后在锚标记上使用JavaScript以在单击时隐藏div.示例(未经测试,可能需要调整,但您明白了):

<div id="printOption">
    <a href="javascript:void();" 
       onclick="document.getElementById('printOption').style.visibility = 'hidden'; 
       document.print(); 
       return true;">
       Print
    </a>
</div>
Run Code Online (Sandbox Code Playgroud)

缺点是,一旦点击,按钮就会消失,并且它们会在页面上丢失该选项(但总是有Ctrl + P).

更好的解决方案是创建一个打印样式表,并在该样式表中指定printOptionID 的隐藏状态(或者您称之为的任何内容).您可以在HTML的head部分执行此操作,并指定具有media属性的第二个样式表.


小智 6

最好的办法是创建页面的"仅打印"版本.

哦,等等......这不再是1999了.使用带有"display:none"的打印CSS.

  • @annakata:用户已经可以在浏览器上使用"打印预览"获取.作为奖励,这实际上是它的用途. (8认同)

Mik*_*das 5

@media print {
  .no-print {
    visibility: hidden;
  }
}
Run Code Online (Sandbox Code Playgroud)
<div class="no-print">
  Nope
</div>

<div>
  Yup
</div>
Run Code Online (Sandbox Code Playgroud)


小智 5

diodus 接受的答案对我们中的一些人(如果不是所有人)来说不起作用。我仍然无法隐藏“打印此”按钮,以免出现在纸上。

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

      media="screen, print" 
Run Code Online (Sandbox Code Playgroud)

不仅仅是

      media="screen"
Run Code Online (Sandbox Code Playgroud)

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

     <link rel="stylesheet" href="my_cssfile.css" media="screen, print"type="text/css">
Run Code Online (Sandbox Code Playgroud)

而不仅仅是默认的 media =“screen”。

    <link rel="stylesheet" href="my_cssfile.css" media="screen" type="text/css">
Run Code Online (Sandbox Code Playgroud)

我认为这可以为每个人解决这个问题。


Eli*_*sle 5

如果您的 Javascript 会干扰各个元素的样式属性,从而覆盖!important,我建议处理事件onbeforeprintonafterprinthttps://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeprint