【问题标题】:Bootstrap 3 - Print layout and breaks after each grid columnBootstrap 3 - 在每个网格列之后打印布局和中断
【发布时间】:2013-11-25 17:47:05
【问题描述】:

如果你举这个例子(在这里查看:http://www.bootply.com/93816

<div class="container">
  <div class="row">
    <div class="col-md-6">Column1</div>
    <div class="col-md-6">Column2</div>
  </div>
</div>

当您对生成的页面进行打印预览时,它似乎会导致列堆叠/中断(好像浮动已被移除),而不是在通常的网格布局中显示它们。

我查看了 bootstrap.css 的 @media print 部分,但看不到任何与 div 相关的内容。

有谁知道如何避免这种情况?

【问题讨论】:

  • IIRC 这是因为页面只有几百个“像素”(~500px),这意味着通常用于手机/平板电脑的其他媒体查询也适用于页面打印
  • 一个好的解决方案:stackoverflow.com/a/20244712/717267

标签: html css twitter-bootstrap printing


【解决方案1】:

基于 Gerard 解决方案,您可以像这样使用 bootstrap mixin .make-grid(), 所以打印永远不会落到 xs 大小

@media print {
  .make-grid(sm);
}

或者生成的css(如果你不喜欢用less的话):

@media print {
  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
    float: left;
  }
  .col-sm-12 {
    width: 100%;
  }
  .col-sm-11 {
    width: 91.66666667%;
  }
  .col-sm-10 {
    width: 83.33333333%;
  }
  .col-sm-9 {
    width: 75%;
  }
  .col-sm-8 {
    width: 66.66666667%;
  }
  .col-sm-7 {
    width: 58.33333333%;
  }
  .col-sm-6 {
    width: 50%;
  }
  .col-sm-5 {
    width: 41.66666667%;
  }
  .col-sm-4 {
    width: 33.33333333%;
  }
  .col-sm-3 {
    width: 25%;
  }
  .col-sm-2 {
    width: 16.66666667%;
  }
  .col-sm-1 {
    width: 8.33333333%;
  }
  .col-sm-pull-12 {
    right: 100%;
  }
  .col-sm-pull-11 {
    right: 91.66666667%;
  }
  .col-sm-pull-10 {
    right: 83.33333333%;
  }
  .col-sm-pull-9 {
    right: 75%;
  }
  .col-sm-pull-8 {
    right: 66.66666667%;
  }
  .col-sm-pull-7 {
    right: 58.33333333%;
  }
  .col-sm-pull-6 {
    right: 50%;
  }
  .col-sm-pull-5 {
    right: 41.66666667%;
  }
  .col-sm-pull-4 {
    right: 33.33333333%;
  }
  .col-sm-pull-3 {
    right: 25%;
  }
  .col-sm-pull-2 {
    right: 16.66666667%;
  }
  .col-sm-pull-1 {
    right: 8.33333333%;
  }
  .col-sm-pull-0 {
    right: auto;
  }
  .col-sm-push-12 {
    left: 100%;
  }
  .col-sm-push-11 {
    left: 91.66666667%;
  }
  .col-sm-push-10 {
    left: 83.33333333%;
  }
  .col-sm-push-9 {
    left: 75%;
  }
  .col-sm-push-8 {
    left: 66.66666667%;
  }
  .col-sm-push-7 {
    left: 58.33333333%;
  }
  .col-sm-push-6 {
    left: 50%;
  }
  .col-sm-push-5 {
    left: 41.66666667%;
  }
  .col-sm-push-4 {
    left: 33.33333333%;
  }
  .col-sm-push-3 {
    left: 25%;
  }
  .col-sm-push-2 {
    left: 16.66666667%;
  }
  .col-sm-push-1 {
    left: 8.33333333%;
  }
  .col-sm-push-0 {
    left: auto;
  }
  .col-sm-offset-12 {
    margin-left: 100%;
  }
  .col-sm-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-sm-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-sm-offset-9 {
    margin-left: 75%;
  }
  .col-sm-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-sm-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-sm-offset-6 {
    margin-left: 50%;
  }
  .col-sm-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-sm-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-sm-offset-3 {
    margin-left: 25%;
  }
  .col-sm-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-sm-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-sm-offset-0 {
    margin-left: 0%;
  }
}

【讨论】:

  • 我正在使用 Bootstrap 版本 4.3.1,并且使用此方法的修改版本对我有用:使用@media print,我只将百分比属性应用于 .col-sm-1 到 .col -sm-12 因为在 Bootstrap 4 中没有使用其他类。现在我只需要为可变宽度列找到类似的解决方案,即当 .col-sm-auto 和 col 在一行中一起使用时。我不希望可变宽度列的打印视图默认为移动视口大小。
【解决方案2】:

解决方案必须针对元素而不是页面本身。您也不应该依赖 col-xs-...,因为它们适用于小屏幕/设备。

问题在于页面本身的像素很小,所以 bootstrap 认为它需要应用 xs 样式。

Bootstrap 团队不会解决此问题,并且与 https://code.google.com/p/chromium/issues/detail?id=273306 有关

Bootstrap 解决方案是模糊地记录这种“古怪”的行为 https://github.com/twbs/bootstrap/issues/12078

在我看来,应该有一个 col-print-... 一组布局类,如此之小和 print 可以共存。

我的临时解决方案如下:

@media print {
  [class*="col-sm-"] {
    float: left;
  }
}

您可以使用 col-print,在我们的例子中,我们使用的是 sm,而不是 xs,因为我们希望 xs 阻止布局,这就是使用这些类进行打印不起作用的原因。

【讨论】:

  • 这很好,但不完整。为了完成这项工作,您还必须将these lines 复制到您的打印样式表中。
  • @NathanArthur 您的链接已损坏。
  • @reformed Fixed link
  • 链接仍然断开。
【解决方案3】:

我创建了一个单独的 print.css 并添加了以下内容:

@page {
    size: A3;
    margin-left: -5cm;
    margin-right: -5cm;
    }

适用于 Chrome,但负边距会杀死 IE。 Firefox 似乎不需要它。我会对另一种方法感兴趣。

【讨论】:

  • 对我来说,只要我们为顶部容器定义一个固定宽度并将其左对齐(删除自动边距),IE11 的 Shrink To Fit 就可以正常工作,而不是将此代码应用于 IE11 我已经使用@media print and (-webkit-min-device-pixel-ratio:0) 仅匹配 chrome,但请注意我的内部系统没有 FF 要求。
【解决方案4】:

Bojangles 的评论让我找到了正确的方向,所以我会回答我自己的问题。

使用 'xs' 大小的网格列,根据 http://getbootstrap.com/css/#grid-options 表示“超小型设备电话 (

<div class="container">
  <div class="row">
    <div class="col-xs-6">Column1</div>
    <div class="col-xs-6">Column2</div>
  </div>
</div>

【讨论】:

  • 可以修复,但希望有正确的方法。使用 xs 尺寸,很挑剔,会让人难以在较小的手机上阅读……包括 iPhone。
  • 我试过了,但没有用。使用引导程序 3.1
  • 谢谢,你今天救了我的命 :)
  • 谢谢尝试 1:我使用 col-xs 成功了 尝试 2:col-sm + 在横向模式下打印也有效 尝试3 : col-md + 横向模式打印 也有效 尝试 4 col-lg + 横向模式打印 也有效 尝试 5 col-lg 纵向打印模式坏了 尝试 6 col-md print 在纵向模式下坏了 - - -所有这些变化可能是由于我的 div 设置不均匀
  • 正如@vijay 所说,它将在打印模式下使用 col-xs,有没有办法改变它?我需要像在大型设备上一样打印页面 (col-lg)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 2015-12-09
  • 2021-04-28
  • 2013-11-03
  • 1970-01-01
相关资源
最近更新 更多