J'ai un tas de paragraphes sur une page:
<p> ... </p>
<p> ... </p>
<p> ... </p>
La règle CSS pour ces paragraphes est la suivante:
p {
margin: 20px 0;
page-break-inside: avoid;
}
Démo en direct:http://jsfiddle.net/KE9je/2/show/
Si je comprends bien la propriété page-break-inside
, la procédure ci-dessus doit garantir qu'aucun paragraphe n'est divisé entre deux pages. (Un paragraphe est affiché sur la page "actuelle" ou, s'il ne s'adapte pas complètement, il est déplacé vers la page suivante.)
Cela ne semble pas fonctionner dans Chrome. Ouvrez la démo, cliquez avec le bouton droit de la souris sur la page, choisissez "Imprimer ...". Vous verrez un aperçu avant impression - le cinquième paragraphe est divisé entre la page 1 et la page 2.
Qu'est-ce que je fais mal? Comment puis-je faire fonctionner cela dans Chrome?
En fait, FONCTIONNE dans Chrome et la solution est vraiment idiote !!
Le parent et l'élément sur lequel vous voulez contrôler la rupture de page doivent être déclarés comme:
position: relative;
Découvrez ceci violon (ou dans plein écran )
Ceci est vrai pour:
page-break-before
page-break-after
page-break-inside
Cependant, le contrôle de page-break-inside
dans Safari ne fonctionne pas (au moins en 5.1.7)
J'espère que ça aide!!!
Je sais que c’est une vieille question, mais Chrome a changé depuis sa réponse, ce qui peut aider.
Il semble que page-break-inside:avoid
fonctionne dans Chrome en fonction de la hauteur de l'élément. Par conséquent, si vous faites flotter un tas d'éléments dans un div, page-break-inside:avoid
ne fonctionnera pas.
Il est possible de contourner cela en définissant explicitement la hauteur que l'élément que vous ne voulez pas décomposer. Exemple jQuery:
$('#page_break_inside_avoid_element').height($('#page_break_inside_avoid_element').height());
Selon SitePoint, Chrome n'est pas pris en charge ici, seulement Opera (et IE 8 buggy) ...
http://reference.sitepoint.com/css/page-break-inside
Autres références:
http://www.reddit.com/r/css/comments/jdeim/pagebreakinside_avoid_doesnt_work/
Fils de débordement de pile:
Prise en charge inter-navigateur de `page-break-inside: Avoid;`
"page-break-inside: evitez" - ne fonctionne pas
Sauts de page d'impression Google Chrome
Forum Google Chrome:
http://www.google.com/support/forum
Je ne publierai pas le lien W3Schools (en raison de son manque de fiabilité générale), mais ils indiquent également qu'il n'est pris en charge que par Opera, quelle que soit sa valeur.
Cela a fonctionné mieux pour moi:
.no-page-break {
display: inline-block;
width: 100%;
page-break-inside: avoid;
}
Vous pouvez également spécifier la height
si nécessaire.
Je viens de tester cela avec un paragraphe plus grand dans IE9, Chrome 14 et Firefox 7, et il semble que seul IE9 fonctionne comme prévu. Vous devrez peut-être ajouter manuellement des sauts de page à l’endroit où vous le souhaitez.
page-break-after:always
Bien sûr, ce n’est bon que si vous connaissez la longueur du contenu à l’avance.
Cela fonctionne pour moi, comme ceci:
.print{position: absolute;}
.print p{page-break-inside: avoid}
vérifie si l'affichage parent (ou conteneur de niveau supérieur) est flex
; retirez-le et essayez à nouveau; cela fonctionne pour moi en chrome 71
Ce qui a fonctionné pour moi (à la fois dans FFox et Chrome)
.container {
column-gap: .4em;
columns: 3;
padding: .4em;
}
.contained {
page-break-before: avoid;
page-break-inside: avoid;
page-break-after: always;
}
Et c'est tout ; Je n'avais pas besoin de position
.
Je me bats avec cela depuis un certain temps et, en plus de suivre les conseils des autres réponses, je devais m'assurer que l'élément et tous les éléments parents avaient le style Display: block;
.
Pour les Bootstrappers, sachez que page-break-inside
ou d’autres peuvent ne pas fonctionner (fortement) sous container
ou row
ou d’autres classes de bootstrap même si vous modifiez manuellement la propriété position. Lorsque j'exclus container
et row
, cela a fonctionné à merveille!