CSS打印媒体查询删除空格

Posted

技术标签:

【中文标题】CSS打印媒体查询删除空格【英文标题】:CSS Print Media Query removing blank space 【发布时间】:2020-05-01 15:21:36 【问题描述】:

感谢您帮助我!我正在尝试使用 CSS Media 查询打印特定的 div。在点击打印时,根据他们点击的 div,我想隐藏所有其他元素,除了他们点击的 body div。


一切都很好,除了当我去打印时,元素在它们原来的位置,我假设是因为“隐藏”属性......其他 div 实际上并没有消失。我不能使用 display:none 属性,因为它会弄乱动态生成的元素。


任何关于如何让所选元素打印在首页的前面和中心的建议都会有所帮助!


这是我用于打印的 CSS

  <style>
        /*CSS FOR HIDING ALL ELEMENTS EXCEPT THE PRINTED ONE*/
        @media print 
            /*set all html elements to hidden*/
            body * 
                visibility: hidden;
            
            /*CSS classes to set chosen elements and all their children to visible*/
            .section-to-print-head, .section-to-print-body, .section-to-print-head *, .section-to-print-body * 
                visibility: visible;
                display: block;

            
            /*POSITIONING OF HEAD*/
            .section-to-print-head 
                position: absolute;
                left: 0;
                top: 0;
                width: 100%;
                page-break-after: avoid;
                display: block;
            

            /*POSITIONING OF BODY*/
            .section-to-print-body 
                position: absolute;
                left: 5;
                top: 0;
                width: 100%;
                z-index: 100;
            
            .section-to-print-body:last-child 
              page-break-after: avoid;
            
        
    </style>

这是带有按钮和点击功能的 HTML

    <div class="row infoAreaToPrint">
            <div class="col-lg-5">
                <div class="card">
                    <div class="card-body">
                       <p class="h4 border-bottom mb-0">
                             Customer: <?php echo $custName ?></p>
                              <span>
                                 <button                                                          
                                  onclick="printThisTableDiv('.infoAreaToPrint')">Print Info
                                  </button>
                              </span>

这是我调用的函数,用于隐藏除我要打印的元素之外的所有元素

    function printThisTableDiv(tableID) 
        let existingTags = document.querySelectorAll('.section-to-print-body');
        let i;
        for (i = 0; i < existingTags.length; i++) 
            existingTags[i].classList.remove('section-to-print-body');
        
        document.querySelector(tableID).classList.add("section-to-print-body");
        window.print();
    ;

【问题讨论】:

【参考方案1】:

我发现它只是更新 CSS 查询

   @media print 

            html, body 
                height:100%;
                margin: 0 !important;
                padding: 0 !important;
                overflow: hidden;
            

            /*set all HTML elements to hidden*/
            body * 
                visibility: hidden;
                height: auto;
            

            /*CSS classes to set chosen elements and all their children to visible*/
            .section-to-print-head, .section-to-print-body, .section-to-print-head *, .section-to-print-body * 
                visibility: visible;
                page-break-after: avoid;
            

            /*POSITIONING OF HEAD*/
            .section-to-print-head 
                position: fixed;
                left: 0;
                top: 0;
                width: 100%;
            

            /*POSITIONING OF BODY*/
            .section-to-print-body 
                position: fixed;
                top: 50px;
                left: 0;
                z-index: 999;
                width: 100%;
            

            .section-to-print-body ~ * 
                z-index: 0;
                display: none;
            
        

【讨论】:

以上是关于CSS打印媒体查询删除空格的主要内容,如果未能解决你的问题,请参考以下文章

打印纸张大小的 CSS 媒体查询

使用 CSS 媒体查询检测打印页面大小

Flexbox:应用媒体查询后删除空格

媒体查询彩色单色和打印

结合 CSS 媒体查询

CSS3 @Media 媒体查询