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.

sourav
fonte

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.

Diodeus - James MacFarlane
fonte
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
173

O Bootstrap 3 tem sua própria classe para isso chamada:

hidden-print

É definido assim:

@media print {
  .hidden-print {
    display: none !important;
  }
}

Você não precisa defini-lo por conta própria.


No Bootstrap 4, isso foi alterado para:

.d-print-none
Bijan
fonte
Ótima solução Bootstrap 4. Funciona como um encanto.
Diego Victor de Jesus
Não acredito como perdi a solução de bootstrap até agora .. Obrigado!
ReturnTable 30/10/19
! importantme salvou.
Evan Hu
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" />
Andreas Grech
fonte
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>
Nesar Nori
fonte
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>
user3806549
fonte
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.

Justin Scott
fonte
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".

Jay R
fonte
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>

Mike Rapadas
fonte
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.

teias
fonte