Como ocultar um elemento ao imprimir uma página da web?


440

Eu tenho um link na minha página da Web para imprimir a página. No entanto, o link também é visível na própria impressão.

Existe um código javascript ou HTML que oculte o botão de link quando eu clicar no link de impressão?

Exemplo:

 "Good Evening"
 Print (click Here To Print)

Quero ocultar esta etiqueta "Imprimir" quando imprimir o texto "Boa noite". A etiqueta "Imprimir" não deve aparecer na própria impressão.

Respostas:


743

Na sua folha de estilo, adicione:

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

Em seguida, adicione class='no-print'(ou adicione a classe sem impressão a uma instrução de classe existente) ao seu HTML que você não deseja que apareça na versão impressa, como seu botão.


17
Esta resposta não está completa. Você precisa ter duas seções de mídia. @mediaimpressão e @mediatela. Na seção de impressão, você coloca seus estilos para impressão. Na seção de tela da tela, você coloca seus estilos para a impressão da tela. Você pode até ter várias seções da tela para diferentes resoluções. Basicamente, se você apenas adicionar o que é dado nesta resposta, ele não funcionará. Acredite, eu tentei. Então, como isso conseguiu 69 votos positivos?
Codeguy007

6
na verdade, funciona se você apenas usar o código que é dado. Eu apenas tentei no Firefox. portanto, pelo menos nos navegadores modernos, essa é a solução.
Luschn

8
Eu tentei esconder um <div> com vários subelementos dentro. O problema era que alguns elementos ainda estavam visíveis na impressão. A solução foi usar este css:@media print { .no-print, .no-print * { display: none !important; } }
Philipp

6
Isso pode ou não funcionar, dependendo da mídia especificada. Por exemplo, para combinar os dois estilos de tela e impressão de uma folha de estilo, em seguida, usar consultas de mídia dentro desse estilo, como esta resposta sugere, você deve especificar "tela" ambos e "imprimir" tipos de mídia:<link rel="stylesheet" href="all.css" media="screen, print" type="text/css">
Clint Pachl

5
@ Codeguy007: Eu não entendo o seu ponto. Você só precisa @media screendefinir um estilo somente para a tela, mas este não é o caso aqui: Por padrão, todos os elementos são exibidos e definindo um estilo somente para impressão que oculta o elemento é perfeitamente suficiente para que ele ainda apareça na tela. .
chiccodoro


168

A melhor prática é usar uma folha de estilos especificamente para impressão e definir seu mediaatributo como print.

Nele, mostre / oculte os elementos que você deseja imprimir em papel.

<link rel="stylesheet" type="text/css" href="print.css" media="print" />

9
Aqui você também deve ter css para não exibir outro conteúdo do invólucro, alterar a família de fontes para um valor melhor, remover larguras para permitir o uso completo da página. Se você definir sua folha de estilo principal como media = "screen", poderá tratar sua folha de estilo de impressão como uma nova playgound.
Steve Perks

2
Absolutamente. E com essa abordagem, você pode simplesmente remover "Clique aqui para versão imprimível" ou adicionar "Esta página é adequada para impressão" ou semelhante. A boa prática é, como Steve Perks disse, remover todo o conteúdo não-necessário, como navegação, anúncios e afins. Inclua apenas o conteúdo principal da página.
Arve Systad 03/09/09

39

Aqui está uma solução simples colocar esse CSS

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

e aqui está o 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>

3
Uma classe seria uma escolha melhor do que um ID aqui, pelo simples motivo de que se você usar um ID, poderá aplicar esta regra apenas a uma coisa por página. Uma classe permitiria que você a aplicasse sempre que necessário.
Nick F

12

ARQUIVO CSS

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


    .no-print, .no-print *{
        display: none !important;
        height: 0;
    }
}

HEADER HTML

<link href="/theme/css/ui/ui.print.css?version=x.x.x" media="print" rel="stylesheet" type="text/css" >

ELEMENTO

<div class="no-print"></div>

10

Você pode colocar o link em uma div e, em seguida, usar o JavaScript na tag anchor para ocultar a div quando clicada. Exemplo (não testado, pode ser necessário ajustar, mas você entendeu):

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

A desvantagem é que, uma vez clicado, o botão desaparece e eles perdem a opção na página (sempre há Ctrl + P).

A melhor solução seria criar uma folha de estilo de impressão e, dentro dessa folha de estilo, especificar o status oculto do printOptionID (ou o que você chamar). Você pode fazer isso na seção principal do HTML e especificar uma segunda folha de estilo com um atributo de mídia.


6

A melhor coisa a fazer é criar uma versão "somente impressão" da página.

Oh, espere ... isso não é mais 1999. Use um CSS de impressão com "display: none".


1
ainda há algum valor nas versões imprimíveis porque exibe claramente ao usuário o que ele obterá quando imprimir, o que poderá ser abusado com técnicas CSS
annakata

1
Além disso, você pode incluir conteúdo adicional em uma versão impressa, como referências de link, rodapés etc. Nos próximos dias, muito disso será possível também através do css.
Steve Perks

8
@annakata: O usuário já pode obtê-lo usando "Visualizar impressão" no navegador. Como bônus, é para isso que serve.
recursivo

5

@media print {
  .no-print {
    visibility: hidden;
  }
}
<div class="no-print">
  Nope
</div>

<div>
  Yup
</div>


3

A resposta aceita por diodus não está funcionando para alguns, senão para todos nós. Eu ainda não conseguia ocultar meu botão Imprimir este do papel.

O pequeno ajuste por Clint Pachl de chamar o arquivo css adicionando

      media="screen, print" 

e não apenas

      media="screen"

está resolvendo esse problema. Portanto, para maior clareza e porque não é fácil ver Clint Pachl oculta ajuda adicional nos comentários. O usuário deve incluir ", print" no arquivo css com a formatação desejada.

     <link rel="stylesheet" href="my_cssfile.css" media="screen, print"type="text/css">

e não apenas a mídia padrão = "tela".

    <link rel="stylesheet" href="my_cssfile.css" media="screen" type="text/css">

Que eu acho que resolve esse problema para todos.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.