2012-02-16 15 views
5

Mi piacerebbe molto creare una pagina web che avrebbe la stessa apparenza di, ad esempio, Microsoft Word o Acrobat Reader quando il livello di zoom è piccolo e mostra pagine affiancate con pagina frontiere.Simula documento a più pagine in CSS3

Quello che non ho idea di cosa fare è definire un paperborder di dimensione fissa e gettare il contenuto al suo interno (che sarebbe un numero variabile di elementi di blocco html) e rendere questi "flussi" di elementi da una pagina all'altro, creando tutte le pagine necessarie con le opportune interruzioni di pagina. Questo ha lo scopo di simulare l'output stampato, per una rapida prototipazione dello studio di progettazione.

Qualcosa nella mia mente dice sarebbe necessario javascript, ma dal momento che la mia conoscenza di javascript è vicino a zero, e voglio difficilmente imparare CSS3 trucchi di layout, puro CSS sarebbe preferito (anche se la soluzione JS sarebbe una bella alternativa).

Una corrente documento di una pagina singola è la seguente:

<!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> 

risposta

2

questo non è facile da fare in CSS3 o anche in Javascript. Google Documenti, che fa questo, ha il proprio motore per il calcolo delle pagine. Detto questo, c'è una bozza estremamente anticipata pubblicata su CSS3 Regions Module che renderebbe tutto molto più semplice.

La teoria generale consiste nel misurare la dimensione del testo ogni volta che viene aggiornata e ricalcolare le pagine necessarie, riempiendo i contenuti in modo appropriato. Come puoi immaginare, questa non è la cosa più facile del mondo da fare. Ci sono molti modi diversi per misurare il contenuto e cose del genere, e se sei veramente dedicato e ti immergiti, ti consiglio di dare un'occhiata a molte delle domande qui riportate relative alla misurazione del testo e delle dimensioni degli elementi in javascript.

0

Il modo migliore per realizzare questo tipo di display è avere effettivamente il display in formato PDF e visualizzarlo utilizzando PDFObject, o meglio ancora, direttamente in un elemento <object>. Dal momento che il browser utilizzerà direttamente Adobe o un metodo di visualizzazione integrato, sarà identico a quello che stai cercando, senza tutti gli sforzi di progettarlo.

Per esempio:

<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> 

Usiamo wkhtmltopdf per tutti i nostri HTML alla conversione PDF. È relativamente semplice da usare e lo abbiamo utilizzato su documenti HTML estremamente complicati con tutti i tipi di tecniche CSS con grande successo.

In base alla mia esperienza, vi farà risparmiare molto più tempo visualizzandolo in questo modo rispetto alla codifica di uno specifico metodo di visualizzazione CSS, purché non vi sia alcuna necessità di modificare effettivamente il documento in quella vista.

Buona fortuna!

Problemi correlati