Bootstrap 3 - Распечатка макета и разрывы после каждого столбца сетки

Если вы примете этот пример (смотрите здесь: 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>

Когда вы выполняете предварительный просмотр печати сгенерированной страницы, кажется, что столбцы стекаются/разбиваются (как если бы поплавок удалялся) вместо отображения их в обычном макете сетки.

Я просмотрел разделы @media print bootstrap.css, и я не вижу ничего, связанного с div, которое могло бы произойти.

Кто-нибудь знает, как избежать этого?

Ответ 1

Комментарий Bojangles заставил меня в правильном направлении, поэтому я отвечу на собственный вопрос.

Используя столбцы сетки размера "xs", которые, согласно http://getbootstrap.com/css/#grid-options, предназначены для "телефонов с небольшим количеством устройств (< 768px)", Bootstrap успешно печатает как ожидается.

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

Ответ 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 -..., поэтому дополнительные малые и печати могут сосуществовать.

Мое временное решение выглядит следующим образом:

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

Вы можете использовать col-print, в нашем случае мы используем sm, а не xs, потому что хотим, чтобы xs блокировал макет, поэтому использование этих классов для печати не будет работать.

Ответ 3

На основе решения Gerard вы можете использовать bootstrap mixin.make-grid(), как это, поэтому печать не падает до размера xs

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

или сгенерированный css (если вам не нравится использовать меньше):

@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%;
  }
}

Ответ 4

Я создал отдельный print.css и добавил следующее:

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

Прекрасно работает с Chrome, но отрицательные поля убивают IE. Firefox, похоже, не нуждается в этом. Меня интересовал бы другой подход.