Styles d'impression: comment s'assurer que l'image ne s'étend pas sur un saut de page

92

Lors de l'écriture d'une feuille de style d'impression, existe-t-il un moyen de s'assurer qu'une image est toujours sur une seule page, au lieu de s'étendre sur plusieurs pages. Les images sont beaucoup plus petites que la page, mais en fonction du flux de documents, elles se retrouvent au bas de la page et se divisent. Un exemple du comportement que je vois est ci-dessous:

Page 1 |                    |
       |  (text text text)  |
       |  (text text text)  |
       |  ________________  |
       | | Top of image   | |
       |____________________|
       ------page break------
        ____________________
Page 2 | | Rest of image  | |
       | |________________| |
       |                   |

Ce que j'aimerais

Page 1 |                    |
       |  (text text text)  |
       |  (text text text)  |
       |                    |
       |                    |
       |____________________|
       ------page break------
        ____________________
Page 2 |  ________________  |
       | | Full image     | |
       | |                | |
       | |________________| |
       |                   |

Toutes ces fois où je me suis plaint des flotteurs dans LaTeX, et ici je demande la même fonctionnalité ... Est-ce que cela peut être fait? Je ne suis pas nécessairement préoccupé par le fait que cela fonctionne dans tous les navigateurs, car il ne s'agit souvent que d'un document unique que j'écris pour le transformer en PDF.

davidtbernal
la source
45
Upvote pour une grande utilisation des diagrammes d'art ASCII :)
NickG
@NickG Beaucoup d'accord, diagramme ASCII vraiment génial!

Réponses:

65

Le seul moyen auquel je pense est d'utiliser une (ou potentiellement plusieurs) des règles css suivantes:

img {
    page-break-before: auto; /* 'always,' 'avoid,' 'left,' 'inherit,' or 'right' */
    page-break-after: auto; /* 'always,' 'avoid,' 'left,' 'inherit,' or 'right' */
    page-break-inside: avoid; /* or 'auto' */
}

Je rappelle à moitié que ces déclarations ne s'appliquent qu'aux éléments de niveau bloc (vous devrez donc également définir display: block;sur votre image, ou utiliser une sorte de conteneur d'emballage et appliquer les règles à cela (que ce soit dans un paragraphe, div, span , liste, etc ...).

Quelques discussions utiles ici: " Quelles sont les media="print"propriétés CSS les plus spécifiques à l'utilisation et compatibles avec tous les navigateurs? "

Références:

David dit de réintégrer Monica
la source
3
Ouais, cela fonctionne. ( page-break-inside:avoid). Maintenant, je me souviens pourquoi les flotteurs LaTeX sont une douleur.
davidtbernal
2
@notJim seulement les flotteurs?
Mindwin
L'explication est très logique, mais pour une raison quelconque, cela ne fonctionne pas pour mon fichier HTML5 avec Firefox 54. Peut-être juste un bogue, car il fonctionne avec Internet Explorer 11 ...
Wolf
saut de page à l'intérieur - CSS | MDN est une page dédiée à cette faille;)
Wolf
@Wolf Cette page a-t-elle changé? Ou est-ce que je manque quelque chose? Pourquoi cela ne fonctionne-t-il pas en HTML5 avec FF54?
The Oddler