Làm cách nào để ẩn một phần tử khi in trang web?


440

Tôi có một liên kết trên trang web của tôi để in trang web. Tuy nhiên, liên kết cũng được hiển thị trong bản in.

Có mã javascript hoặc HTML nào sẽ ẩn nút liên kết khi tôi nhấp vào liên kết in không?

Thí dụ:

 "Good Evening"
 Print (click Here To Print)

Tôi muốn ẩn nhãn "In" này khi nó in dòng chữ "Chào buổi tối". Nhãn "In" không được hiển thị trên bản in.

Câu trả lời:


743

Trong biểu định kiểu của bạn thêm:

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

Sau đó thêm class='no-print'(hoặc thêm lớp không in vào câu lệnh lớp hiện có) trong HTML mà bạn không muốn xuất hiện trong phiên bản in, chẳng hạn như nút của bạn.


17
Câu trả lời này không đầy đủ. Bạn phải có hai phần truyền thông. @mediain và @mediamàn hình. Trong phần in, bạn đặt kiểu của bạn để in. Trong phần màn hình màn hình, bạn đặt các kiểu để in màn hình. Bạn thậm chí có thể có nhiều phần màn hình cho các độ phân giải khác nhau. Về cơ bản nếu bạn chỉ thêm những gì được đưa ra trong câu trả lời này, nó sẽ không hoạt động. Hãy tin tôi, tôi đã thử. Vì vậy, làm thế nào điều này có được 69 upvote?
Codeguy007

6
Trên thực tế, nó hoạt động nếu bạn chỉ sử dụng mã được đưa ra. tôi vừa thử trong firefox. vì vậy, ít nhất trong các trình duyệt hiện đại, đây là giải pháp.
luschn

8
Tôi đã cố gắng ẩn <div> với một số thành phần phụ bên trong. Vấn đề là một số yếu tố vẫn còn hiển thị trên bản in. Giải pháp là sử dụng css này:@media print { .no-print, .no-print * { display: none !important; } }
Philipp

6
Điều này có thể hoặc có thể không hoạt động tùy thuộc vào phương tiện truyền thông được chỉ định. Ví dụ: để kết hợp cả hai kiểu màn hình và in trong một biểu định kiểu, sau đó sử dụng truy vấn phương tiện trong biểu định kiểu đó, như câu trả lời này cho thấy, bạn phải chỉ định cả hai loại phương tiện "màn hình" và "in":<link rel="stylesheet" href="all.css" media="screen, print" type="text/css">
Clint Pachl

5
@ Codeguy007: Tôi không hiểu quan điểm của bạn. Bạn chỉ cần @media screennếu bạn muốn xác định kiểu chỉ màn hình nhưng đây không phải là trường hợp ở đây: Theo mặc định, tất cả các yếu tố được hiển thị và bằng cách xác định kiểu chỉ in mà ẩn phần tử là hoàn toàn đủ để nó vẫn xuất hiện trên màn hình .
chiccodoro

173

Bootstrap 3 có riêng lớp cho điều này được gọi là:

hidden-print

Nó được định nghĩa như thế này:

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

Bạn không phải tự xác định nó.


Trong Bootstrap 4, điều này đã thay đổi thành:

.d-print-none

Giải pháp Bootstrap 4 tuyệt vời. Hoạt động như một lá bùa.
Diego Victor de Jesus

Tôi không thể tin được làm thế nào tôi đã bỏ lỡ giải pháp bootstrap cho đến bây giờ .. Cảm ơn bạn!
ReturnTable

! importantcứu tôi.
Evan Hu

167

Thực hành tốt nhất là sử dụng một biểu định kiểu dành riêng cho in ấn và đặt mediathuộc tính của nó thành print.

Trong đó, hiển thị / ẩn các yếu tố mà bạn muốn được in trên giấy.

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

9
Tại đây, bạn cũng nên có css để không hiển thị nội dung trình bao bọc khác, thay đổi họ phông chữ thành giá trị tốt hơn, xóa độ rộng để cho phép sử dụng hoàn toàn trang. Nếu bạn đặt biểu định kiểu chính của mình thành media = "screen", bạn có thể coi biểu định kiểu in của mình như một bản phát mới.
Steve Perks

2
Chắc chắn rồi. Và với phương pháp này, bạn có thể chỉ cần xóa "Nhấp vào đây để xem phiên bản có thể in" hoặc thêm "Trang này thân thiện với máy in" hoặc tương tự. Thực hành tốt là, như Steve Perks đã nói, loại bỏ tất cả nội dung không chính thống như điều hướng, quảng cáo và những thứ tương tự. Chỉ bao gồm nội dung chính của trang.
Arve Systad

39

Đây là một giải pháp đơn giản đặt CSS này

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

và đây là 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
Một lớp sẽ là lựa chọn tốt hơn id ở đây, vì lý do đơn giản là nếu bạn sử dụng id thì bạn chỉ có thể áp dụng quy tắc này cho một điều trên mỗi trang. Một lớp học sẽ cho phép bạn áp dụng nó bất cứ nơi nào cần thiết.
Nick F

12

TẬP TIN CSS

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


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

ĐẦU TIÊN HTML

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

THÀNH PHẦN

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

10

Bạn có thể đặt liên kết trong một div, sau đó sử dụng JavaScript trên thẻ neo để ẩn div khi nhấp vào. Ví dụ (không được thử nghiệm, có thể cần phải điều chỉnh nhưng bạn có ý tưởng):

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

Nhược điểm là một khi nhấp vào, nút sẽ biến mất và họ mất tùy chọn đó trên trang (luôn luôn có Ctrl + P).

Giải pháp tốt hơn là tạo một biểu định kiểu in và trong biểu định kiểu đó chỉ định trạng thái ẩn của printOptionID (hoặc bất cứ điều gì bạn gọi nó). Bạn có thể làm điều này trong phần đầu của HTML và chỉ định biểu định kiểu thứ hai với thuộc tính đa phương tiện.


6

Điều tốt nhất để làm là tạo một phiên bản "chỉ in" của trang.

Oh, đợi đã ... đây không phải là 1999 nữa. Sử dụng CSS in với "display: none".


1
vẫn còn một số giá trị trong các phiên bản có thể in được vì nó hiển thị rõ ràng cho người dùng những gì họ sẽ nhận được khi in có thể bị lạm dụng với các kỹ thuật CSS
annakata

1
thêm vào đó, bạn có thể bao gồm nội dung bổ sung trên phiên bản in như tham chiếu liên kết, chân trang, v.v. Trong những ngày tới, rất nhiều điều này sẽ có thể đạt được thông qua css.
Steve Perks

8
@annakata: Người dùng đã có thể sử dụng "Print Preview" trên trình duyệt của họ. Như một phần thưởng, đó thực sự là những gì nó làm.
đệ quy


3

Câu trả lời được chấp nhận bởi diodus không hoạt động đối với một số người nếu không phải tất cả chúng ta. Tôi vẫn không thể ẩn nút In này ra khỏi giấy.

Điều chỉnh nhỏ bằng Clint Pachl khi gọi tệp css bằng cách thêm vào

      media="screen, print" 

và không chỉ

      media="screen"

đang giải quyết vấn đề này Vì vậy, để rõ ràng và vì không dễ để thấy Clint Pachl ẩn trợ giúp bổ sung trong các bình luận. Người dùng nên bao gồm ", in" trong tệp css với định dạng mong muốn.

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

và không chỉ phương tiện mặc định = "màn hình".

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

Điều đó tôi nghĩ rằng giải quyết vấn đề này cho tất cả mọi người.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.