ฉันจะซ่อนองค์ประกอบเมื่อพิมพ์หน้าเว็บได้อย่างไร


440

ฉันมีลิงค์บนเว็บเพจของฉันเพื่อพิมพ์เว็บเพจ อย่างไรก็ตามลิงค์นี้ยังปรากฏในงานพิมพ์ด้วย

มี javascript หรือ HTML code ซึ่งจะซ่อนปุ่มลิงค์เมื่อฉันคลิกลิงค์พิมพ์?

ตัวอย่าง:

 "Good Evening"
 Print (click Here To Print)

ฉันต้องการซ่อนป้ายกำกับ "พิมพ์" นี้เมื่อพิมพ์ข้อความ "ราตรีสวัสดิ์" ฉลาก "พิมพ์" ไม่ควรแสดงบนงานพิมพ์เอง

คำตอบ:


743

ในสไตล์ชีทของคุณเพิ่ม:

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

จากนั้นเพิ่มclass='no-print'(หรือเพิ่มคลาสที่ไม่พิมพ์ลงในคำสั่งคลาสที่มีอยู่) ใน HTML ที่คุณไม่ต้องการให้ปรากฏในเวอร์ชันที่พิมพ์เช่นปุ่มของคุณ


17
คำตอบนี้ไม่สมบูรณ์ คุณต้องมีสองส่วนสื่อ @mediaพิมพ์และ@mediaหน้าจอ ในส่วนการพิมพ์คุณวางสไตล์ของคุณสำหรับการพิมพ์ ในส่วนหน้าจอหน้าจอคุณวางสไตล์ของคุณสำหรับการพิมพ์หน้าจอ คุณสามารถมีหลายส่วนของหน้าจอสำหรับความละเอียดที่แตกต่างกัน โดยทั่วไปหากคุณเพิ่งเพิ่มสิ่งที่ให้ไว้ในคำตอบนี้มันจะไม่ทำงาน เชื่อฉันสิฉันได้ลองแล้ว ดังนั้นวิธีนี้ได้รับ 69 upvotes?
Codeguy007

6
จริง ๆ แล้วมันจะทำงานถ้าคุณเพียงแค่ใช้รหัสที่ให้ ฉันเพิ่งลองใช้ Firefox ดังนั้นอย่างน้อยในเบราว์เซอร์ที่ทันสมัยนี่เป็นวิธีแก้ปัญหา
luschn

8
ฉันพยายามซ่อน <div> ด้วยองค์ประกอบย่อยหลายอย่างภายใน ปัญหาคือองค์ประกอบบางอย่างยังคงปรากฏให้เห็นในการพิมพ์ วิธีแก้ปัญหาคือใช้ css นี้:@media print { .no-print, .no-print * { display: none !important; } }
ฟิลิปป์

6
สิ่งนี้อาจหรืออาจไม่ทำงานขึ้นอยู่กับสื่อที่ระบุ ตัวอย่างเช่นในการรวมทั้งหน้าจอและสไตล์การพิมพ์ในหนึ่งสไตล์ชีทจากนั้นใช้เคียวรีสื่อบันทึกภายในสไตล์ชีทดังที่คำแนะนำนี้คุณต้องระบุทั้งประเภท "หน้าจอ" และ "พิมพ์":<link rel="stylesheet" href="all.css" media="screen, print" type="text/css">
Clint Pachl

5
@ Codeguy007: ฉันไม่เข้าใจประเด็นของคุณ คุณต้องการ@media screenถ้าคุณต้องการกำหนดสไตล์หน้าจอเท่านั้น แต่นี่ไม่ใช่กรณีที่นี่: โดยค่าเริ่มต้นองค์ประกอบทั้งหมดจะปรากฏขึ้นและโดยการกำหนดสไตล์การพิมพ์เท่านั้นที่ซ่อนองค์ประกอบเพียงพอที่จะทำให้มันยังคงปรากฏบนหน้าจอ .
chiccodoro

173

เงินทุน 3 มีของตัวเองชั้นนี้เรียกว่า:

hidden-print

มันถูกกำหนดเช่นนี้:

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

คุณไม่จำเป็นต้องกำหนดด้วยตัวคุณเอง


ในBootstrap 4สิ่งนี้ได้เปลี่ยนเป็น:

.d-print-none

สุดยอดวิธีการแก้ปัญหา Bootstrap 4 ทำงานเหมือนจับใจ
Diego Victor de Jesus

ฉันไม่อยากจะเชื่อเลยว่าทำไมฉันถึงพลาดวิธีบู๊ตสแตรปป์จนถึงตอนนี้ .. ขอบคุณ!
ReturnTable

! importantช่วยฉัน
Evan Hu

168

การปฏิบัติที่ดีที่สุดคือการใช้แผ่นลักษณะเฉพาะสำหรับการพิมพ์และและการตั้งค่าของแอตทริบิวต์mediaprint

ในนั้นแสดง / ซ่อนองค์ประกอบที่คุณต้องการที่จะพิมพ์บนกระดาษ

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

9
ที่นี่คุณควรมี css ที่จะไม่แสดงเนื้อหาของ wrapper อื่น ๆ เปลี่ยน font-family เป็นค่าที่ดีกว่าลบความกว้างเพื่ออนุญาตให้ใช้งานหน้าได้อย่างสมบูรณ์ หากคุณตั้งสไตล์ชีทหลักของคุณเป็น media = "screen" คุณสามารถใช้สไตล์ชีทการพิมพ์ของคุณเป็น playgound ใหม่
Steve Perks

2
อย่างแน่นอน และด้วยวิธีการนี้คุณสามารถลบ "คลิกที่นี่สำหรับรุ่นที่พิมพ์ได้" หรือเพิ่ม "หน้านี้เป็นมิตรกับเครื่องพิมพ์" หรือที่คล้ายกัน แนวทางปฏิบัติที่ดีคืออย่างที่ Steve Perks กล่าวเอาเนื้อหาที่ไม่จำเป็นทั้งหมดเช่นการนำทางโฆษณาและสิ่งที่ไม่ชอบออกไป รวมเฉพาะเนื้อหาหลักของหน้า
Arve Systad

39

นี่เป็นวิธีง่ายๆในการใส่ CSS นี้

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

และนี่คือ 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
คลาสจะเป็นตัวเลือกที่ดีกว่า id ที่นี่ด้วยเหตุผลง่ายๆว่าถ้าคุณใช้ id คุณจะสามารถใช้กฎนี้กับสิ่งเดียวต่อหน้าเท่านั้น ชั้นเรียนจะช่วยให้คุณสามารถนำไปใช้ได้ทุกที่ที่ต้องการ
Nick F

12

ไฟล์ CSS

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


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

HTML HEADER

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

ธาตุ

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

10

คุณสามารถวางลิงก์ภายใน div จากนั้นใช้ JavaScript บนแท็ก anchor เพื่อซ่อน div เมื่อคลิก ตัวอย่าง (ไม่ได้ทดสอบอาจต้องมีการปรับแต่ง แต่คุณจะได้ความคิด):

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

ข้อเสียคือเมื่อคลิกแล้วปุ่มจะหายไปและจะสูญเสียตัวเลือกนั้นในหน้า (มี Ctrl + P อยู่ตลอดเวลา)

ทางออกที่ดีกว่าคือการสร้างสไตล์ชีทการพิมพ์และภายในสไตล์ชีทนั้นระบุสถานะที่ซ่อนของprintOptionID (หรืออะไรก็ตามที่คุณเรียก) คุณสามารถทำได้ในส่วนหัวของ HTML และระบุสไตล์ชีทที่สองด้วยแอตทริบิวต์สื่อ


6

สิ่งที่ดีที่สุดที่ต้องทำคือการสร้างหน้าแบบ "พิมพ์อย่างเดียว"

โอ้เดี๋ยวก่อน ... นี่ไม่ใช่ปี 1999 อีกต่อไปแล้ว ใช้ CSS พิมพ์ด้วย "display: none"


1
ยังคงมีค่าบางอย่างในรุ่นที่พิมพ์ได้เพราะจะแสดงให้ผู้ใช้เห็นอย่างชัดเจนว่าพวกเขาจะได้รับอะไรเมื่อพิมพ์ซึ่งสามารถใช้เทคนิค CSS ได้
annakata

1
เพิ่มไปยังนั้นคุณสามารถรวมเนื้อหาเพิ่มเติมในรุ่นที่พิมพ์เช่นการอ้างอิงลิงก์ส่วนท้าย ฯลฯ ในอีกไม่กี่วันข้างหน้าสิ่งเหล่านี้จะสามารถทำได้ผ่าน css เช่นกัน
Steve Perks

8
@annakata: ผู้ใช้สามารถรับได้โดยใช้ "ตัวอย่างก่อนพิมพ์" ในเบราว์เซอร์ของพวกเขา ในฐานะโบนัสนั้นเป็นสิ่งที่มีไว้สำหรับ
เรียกซ้ำ


3

คำตอบที่ได้รับการยอมรับโดย diodus ไม่ได้ผลสำหรับบางคนถ้าไม่ใช่พวกเราทุกคน ฉันยังคงซ่อนปุ่มพิมพ์ของฉันไม่ให้ไปที่กระดาษ

การปรับเล็กน้อยโดย Clint Pachl ของการเรียกไฟล์ css โดยการเพิ่ม

      media="screen, print" 

และไม่ใช่แค่

      media="screen"

กำลังแก้ไขปัญหานี้ ดังนั้นเพื่อความชัดเจนและเพราะมันไม่ใช่เรื่องง่ายที่จะเห็นคลินต์ Pachl ซ่อนความช่วยเหลือเพิ่มเติมในการแสดงความคิดเห็น ผู้ใช้ควรมี ", พิมพ์" ในไฟล์ css พร้อมรูปแบบที่ต้องการ

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

ไม่ใช่ค่าเริ่มต้นสื่อ = "หน้าจอ" เท่านั้น

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

ที่ฉันคิดว่าแก้ปัญหานี้สำหรับทุกคน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.