Bootstrap 3 - Drucklayout und Unterbrechungen nach jeder Rasterspalte

78

Wenn Sie dieses Beispiel nehmen (sehen Sie es hier: 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>

Wenn Sie eine Druckvorschau der generierten Seite erstellen, scheinen die Spalten gestapelt / unterbrochen zu werden (als ob der Float entfernt würde), anstatt sie im üblichen Rasterlayout anzuzeigen.

Ich habe mir die @media printAbschnitte von bootstrap.css angesehen und kann nichts sehen, was dazu führen divwürde, dass dies passiert.

Weiß jemand, wie man das vermeidet?

AndyC
quelle
7
IIRC Dies wird dadurch verursacht, dass die Seite nur einige hundert "Pixel" breit ist (~ 500px), was bedeutet, dass die anderen Medienabfragen, die normalerweise für Telefone / Tablets gedacht sind, auch für den Seitendruck gelten
Bojangles,
2
Eine gute Lösung: stackoverflow.com/a/20244712/717267
Eduardo Cuomo

Antworten:

126

Bojangles Kommentar hat mich in die richtige Richtung gebracht, also werde ich meine eigene Frage beantworten.

Unter Verwendung der Rasterspalten der Größe 'xs', die laut http://getbootstrap.com/css/#grid-options für "Telefone mit besonders kleinen Geräten (<768px)" gelten, druckt Bootstrap wie erwartet.

<div class="container">
  <div class="row">
    <div class="col-xs-6">Column1</div>
    <div class="col-xs-6">Column2</div>
  </div>
</div>
AndyC
quelle
2
Kann es beheben, hoffe aber, dass es den richtigen Weg gibt, es zu tun. Wenn Sie die Größe xs verwenden und wählerisch sind, ist das Lesen auf kleineren Telefonen schwierig ... iPhone inklusive.
Nestor
6
Ich habe es versucht und es hat nicht funktioniert. Verwenden von Bootstrap 3.1
Alexis
2
Danke, du hast mir heute gerade das Leben gerettet :)
sonlexqt
2
Dank Versuchen 1 : I col-xs verwendet arbeitete sie 2 Versuchen : col-sm + Druck im Querformat - Modus arbeitete auch 3 Versuchen : col-md + Druck im Querformat - Modus arbeitete auch 4 Versuchen col-lg + Druck im Querformat - Modus auch gearbeitet Try 5 col-lg print Im Portrait-Modus defekt Versuchen Sie 6 col-md print Im Portrait-Modus pleite - - -Alle diese Variationen könnten auf mein ungleichmäßiges div-Setup zurückzuführen sein
vijay
4
Wie @vijay sagte, werden im Druckmodus col-xs verwendet. Gibt es eine Möglichkeit, dies zu ändern? Ich brauche die Seite zu drucken, wie es auf den großen Geräten aussieht (col-lg)?
Anas
33

Die Lösung muss auf den Elementen liegen, nicht auf der Seite selbst. Sie sollten sich auch nicht auf col-xs -... verlassen, da diese für kleine Bildschirme / Geräte bestimmt sind.

Das Problem ist, dass die Seite selbst in Bezug auf Pixel klein ist, sodass Bootstrap der Meinung ist, dass die xs-Stile angewendet werden müssen.

Das Problem wird vom Bootstrap-Team nicht behoben und steht im Zusammenhang mit https://code.google.com/p/chromium/issues/detail?id=273306

Die Bootstrap-Lösung bestand darin, dieses "skurrile" Verhalten https://github.com/twbs/bootstrap/issues/12078 dunkel zu dokumentieren .

Meiner Meinung nach sollte es einen Col-Print-Satz von Layoutklassen geben, damit extra klein und print nebeneinander existieren können.

Meine Zwischenlösung lautet wie folgt:

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

Sie können col-print verwenden. In unserem Fall verwenden wir sm und nicht xs, da xs das Layout blockieren soll. Daher funktioniert die Verwendung dieser Klassen für den Druck nicht.

Gerard
quelle
Das ist gut, aber unvollständig. Damit dies funktioniert, müssen Sie diese Zeilen auch in Ihr Druck-Stylesheet kopieren .
Nathan Arthur
@ NathanArthur dein Link ist kaputt.
Reformiert
@ reformierter fester Link
Nathan Arthur
Link ist immer noch unterbrochen.
Steve Byrne
22

Basierend auf der Gerard-Lösung können Sie das Bootstrap-Mixin .make-grid () wie folgt verwenden, damit der Druck niemals auf die xs-Größe fällt

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

oder das generierte CSS (wenn Sie nicht weniger verwenden möchten):

@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%;
  }
}
Paolo Sanchi
quelle
Ich verwende Bootstrap Version 4.3.1 und eine modifizierte Version dieser Methode, die für mich funktioniert hat: Bei Verwendung von @media print habe ich die Prozentattribute nur auf .col-sm-1 bis .col-sm-12 angewendet, da die anderen Klassen werden in Bootstrap 4 nicht verwendet. Jetzt muss ich nur noch eine ähnliche Lösung für Spalten mit variabler Breite finden, dh wenn .col-sm-auto und col zusammen in einer Zeile verwendet werden. Ich möchte nicht, dass die Druckansicht von Spalten mit variabler Breite standardmäßig die Größe des mobilen Ansichtsfensters verwendet.
SukieC
7

Ich habe eine separate print.css erstellt und Folgendes hinzugefügt:

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

Funktioniert gut mit Chrome, aber die negativen Ränder töten den Internet Explorer. Firefox scheint es nicht zu brauchen. Ich würde mich für einen anderen Ansatz interessieren.

user3108913
quelle
Für mich funktioniert das Shrink To Fit von IE11 einwandfrei, solange wir eine feste Breite für den oberen Container definieren und nach links ausrichten (den automatischen Rand entfernen), um diesen Code für IE11 nicht anzuwenden. Ich habe @media print and (-webkit-min-device-pixel-ratio:0)nur Chrom verwendet, aber bitte Beachten Sie, dass mein internes System keine FF-Anforderung hatte.
Francisco Aquino