2012-02-16 17 views
5

Me gustaría mucho crear una página web que tenga el mismo aspecto de, digamos, Microsoft Word o Acrobat Reader cuando el nivel de zoom es pequeño y muestra páginas contiguas con la página fronteras.Simular documento de varias páginas en CSS3

Lo que no tengo idea de qué hacer es definir un paperborder de tamaño fijo y arrojar el contenido dentro de él (que sería una cantidad variable de elementos de bloque html) y hacer que estos elementos "fluyan" desde una página a la otra, creando tantas páginas como sea necesario con los saltos de página apropiados. Esto tiene la intención de simular la salida impresa, para el diseño rápido de prototipos de estudio.

Algo en mi mente dice que javascript sería necesario, pero como mi conocimiento de javascript es casi cero, y no quiero aprender trucos de diseño de CSS3, sería preferible CSS puro (aunque la solución JS sería una buena alternativa)

Un documento de una sola página actual es la siguiente:

<!DOCTYPE html> 
<html lang="pt-br" xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta charset="UTF-8" /> 
     <title>Relatório Html</title> 
     <style type="text/css"> 
      html, body { 
       margin:0; 
       padding:0; 
      } 

      body { 
       background-color: #aaa; 
      } 

      .paperpage { 
       position: absolute; 
       width: 600px; 
       padding: 50px 30px 40px 30px; 
       margin-left: -320px; 
       left: 50%; 
       top:10px; 
       bottom:10px; 
       background-color: white; 
       box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8); 
      } 

      #innerpage { 
       position: relative; 
       margin: 0 auto; 
       height: auto !important; 
       min-height: 100%; 
      } 
     </style> 
    </head> 

    <body> 
    <div class="paperpage"> 
     <div id="innerpage"> 
      <p>Some Content</p> 
     </div> 
    </div> 
    </body> 
</html> 

Respuesta

2

Esto no es fácil de hacer en CSS3 o incluso en Javascript. Google Docs, que hace esto, tiene su propio motor para calcular páginas. Dicho esto, hay un borrador extremadamente temprano publicado del CSS3 Regions Module que haría esto mucho más simple.

La teoría general aquí es medir el tamaño del texto cada vez que se actualiza y volver a calcular las páginas necesarias, completando el contenido de forma adecuada. Como se puede imaginar, esta no es la cosa más fácil del mundo para hacer. Hay muchas maneras diferentes de medir contenido y cosas como esta, y si está realmente dedicado y se sumerge, le recomendaría revisar muchas de las preguntas aquí relacionadas con la medición de texto y tamaños de elementos en javascript.

0

La mejor manera que tenemos de tener este tipo de pantalla es tener la pantalla en formato PDF y mostrarla mediante PDFObject, o mejor aún, directamente en un elemento <object>. Como el navegador usará directamente Adobe o un método de visualización integrado, será idéntico a lo que está buscando, sin el esfuerzo de diseñarlo.

Por ejemplo:

<object 
    data="/clients/<%= client.id %>/reports/print?preview=true" 
    type="application/pdf" width="100%" height="98%"> 
    <p>Your browser does not support embedded PDFs.</p> 
</object> 

Utilizamos wkhtmltopdf para todos nuestros HTML para la conversión de PDF. Es relativamente simple de usar y lo hemos estado utilizando en documentos HTML enormemente complicados con todo tipo de técnicas de CSS con gran éxito.

En mi experiencia, le ahorrará mucho más tiempo mostrándolo de esta manera frente a la codificación de un método de visualización de CSS específico, siempre que no tenga ninguna necesidad de editar realmente el documento en esa vista.

¡La mejor de las suertes!

Cuestiones relacionadas