利用@media print样式打印页面局部元素

需求:打印页面中点击某按钮弹出的弹窗中内容,而直接调用window.print()会打印整个页面内容。
思路:打印时只要隐藏掉其他元素就好了
解决:
1.使用CSS @media print{}:

/* 调用window.print()时生效的样式 */
@media print {
  @page {
    /* 横向 */
    size: landscape;
    /* 去除浏览器默认页眉页脚 */
    margin: 0;
  }
 /* 给需要打印的区域内或同级不需要打印的元素加上这个类 */
  .noprint {
    display: none;
  }
   /* 这里的id我用于选中modal,然后给其中背景色设置为透明,去掉弹窗头和脚及阴影 */
  #forprint {
    .ant-modal-mask {
      background-color: transparent;
    }

    .ant-modal-wrap.modalwrap {
      background-color: transparent;
      .ant-modal-content {
        background-color: transparent;
        box-shadow: none;
        .ant-modal-header {
          display: none;
        }
        .ant-modal-close {
          display: none;
        }
      }
    }
  }
/* 需要打印的区域*/
  .printable {
    display: block;
  }
  /* 默认打印内容区背景色*/
  -webkit-print-color-adjust: exact;
}

2.由于在vue中使用,用原生js给需要隐藏的元素设置对应类名/id

     let modalroot = document.getElementsByClassName('ant-modal-root');

  for (let i = 0; i < modalroot.length; i++) {
        if (modalroot[i].childNodes[1].className == 'ant-modal-wrap billmodalwrap') {
          modalroot[i].setAttribute('id', 'forprint');
          modalrootNum.value = i;
        }
      }

      document.getElementById('app')?.setAttribute('class', 'noprint');
      //关闭时去掉添加类名和id
      function handleVisibleChange(visible: boolean) {
      if (!visible) {
        showFace.value = true;
        document.getElementById('app')?.setAttribute('class', '');
        modalroot[modalrootNum.value].setAttribute('id', '');
      }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@media print { @page { /* 横向 */ size: landscape; /* 去除浏览器默认页眉页脚 */ margin: 0; } } 在CSS中,@media print是用来定义打印样式的。在这个特定的样式规则下,我们可以设置打印页面的属性,比如横向打印。 在上面的代码中,@media print指定了打印样式。在@media print内部,我们使用@page选择器来设置页面的属性。其中,size: landscape;表示将页面设置为横向打印。此外,margin: 0;用于去除浏览器默认的页眉和页脚。 通过这样的设置,当我们调用window.print()方法打印页面时,页面将按照横向的方式进行打印。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [利用@media print样式打印页面局部元素](https://blog.csdn.net/qq_44367273/article/details/123903967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [详解CSS3中@media的实际使用](https://download.csdn.net/download/weixin_38734506/12885265)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值