Estilos de impresión: cómo asegurarse de que la imagen no abarque un salto de página

92

Al escribir una hoja de estilo de impresión, ¿hay alguna manera de garantizar que una imagen esté siempre en una sola página, en lugar de abarcar varias páginas? Las imágenes son mucho más pequeñas que la página, pero según el flujo del documento, terminan en la parte inferior de la página y se dividen. A continuación, se muestra un ejemplo del comportamiento que estoy viendo:

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

Que me gustaria

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

Todas esas veces me quejé de los flotadores en LaTeX, y aquí estoy pidiendo la misma funcionalidad ... ¿Se puede hacer esto? No me preocupa necesariamente que funcione en todos los navegadores, ya que a menudo es un documento único que estoy escribiendo para convertirlo en PDF.

davidtbernal
fuente
45
Voto a favor por el excelente uso de los diagramas de arte ASCII :)
NickG
@NickG ¡Muy de acuerdo, diagrama ASCII realmente impresionante!

Respuestas:

65

El único medio en el que puedo pensar es usar una (o potencialmente más) de las siguientes reglas CSS:

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' */
}

Recuerdo a medias que estas declaraciones solo se aplican a elementos a nivel de bloque (por lo que también tendrías que definir display: block;en tu imagen, o usar algún tipo de contenedor de envoltura y aplicar las reglas a eso (ya sea en un párrafo, div, span , lista, etc ...).

Una discusión útil aquí: " ¿Cuáles son las media="print"propiedades CSS más útiles específicas y compatibles con todos los navegadores? "

Referencias:

David dice reinstalar a Monica
fuente
3
Sí, esto funciona. ( page-break-inside:avoid). Ahora recuerdo por qué los flotadores LaTeX son un problema.
davidtbernal
2
@notJim solo las carrozas?
Mindwin
La explicación es muy lógica, pero por alguna razón no funciona para mi archivo HTML5 con Firefox 54. Quizás solo un error, ya que funciona con Internet Explorer 11 ...
Wolf
salto de página dentro - CSS | MDN es una página dedicada a este defecto;)
Wolf
@Wolf ¿Esa página cambió? ¿O me estoy perdiendo algo? ¿Por qué no funciona esto en HTML5 con FF54?
The Oddler