2010-08-03 9 views
18

Capisco che l'istruzione CSS page-break-inside:avoid preveda un'interruzione di pagina all'interno di un div quando viene stampato un documento HTML. Attraverso la ricerca su Internet, ho trovato che è supportato solo da Opera e IE8. C'è un lavoro in giro che mi permette di evitare interruzioni di pagina in Firefox (3.6) o versioni di IE meno di 8?page-break-inside: evitare equivalenti per Firefox e/o IE

+0

Siamo spiacenti, nessuna soluzione, ma funziona per me in Mac OS Firefox 3.6.10 ma si blocca su Mac OS Opera 10.62, non funziona in Safari. – daustin777

risposta

0

Come circa appena corrispondenza tutti gli elementi all'interno del vostro elemento, tranne le prime, e li hanno senza break-before

#yourelement *+*{ 
    page-break-before: avoid; 
} 
+0

La domanda riguarda la compatibilità FF e IE vecchio, non come utilizzare la proprietà css. – aaaidan

+0

Nota che sto usando page-break-before, non page-break-inside che non è supportato, ecco perché devi usare questo strano selettore per ottenere lo stesso effetto. In secondo luogo questo post ha quasi 6 mesi. – Gerben

+1

Questo non funzionerà per ≤IE7 e Firefox [non supporta] (https://bugzilla.mozilla.org/show_bug.cgi?id=132035) 'avoid' neanche. – Knu

3

Siamo spiacenti, la mia risposta è "non è possibile", anche se mi piacerebbe se chiunque può dimostrarmi sbagliato.

Ho incontrato lo stesso problema ultimamente, e dopo aver fatto un po 'di ricerca ho deciso di andare solo con

page-break-after: always; 

dopo ogni diversi numero di elementi.

http://reference.sitepoint.com/css/page-break-inside

http://reference.sitepoint.com/css/page-break-after

+0

Aggiungo che apparentemente non è ancora implementato in Firefox 54 – Wolf

2

Per tutto ciò che non è Firefox,

.dontsplit { border: 2px solid black; page-break-inside: avoid; } 

funzionerà. Ma non per Firefox. In Firefox, ciò che devi fare è controllare l'altezza e quindi aggiungere page-break-after: always; quando è rilevante.

In media, il margine sarà 1 pollice in alto e in basso. Così, per misurare il numero di pixel di una pagina da 10 pollici consumerebbe, ho usato questo:

var pageOfPixels; 
(function(){ 
    var d = document.createElement("div"); 
    d.setAttribute("style", "height:9in;position:absolute;left:0px;top:0px;z-index:-5;"); 
    document.body.appendChild(d); 
    pageOfPixels = $(d).height(); 
    d.parentNode.removeChild(d); 
})(); 

ho avuto un sacco di div ciascuno con un sacco di punti in loro. Quindi, quello che ho fatto è stato l'iterazione attraverso di essi, e poi ho confrontato l'altezza corrente di essi nella pagina corrente con il valore pageOfPixels.

var currentPosition = 0; 
$('.printDiv').each(function (index, element) { 
    var h = $(this).height(); 
    if (currentPosition + h > pageOfPixels) { 
     //add page break 
     $('.printDiv').eq(index - 1).css("page-break-after", "always"); 
     currentPosition = h; 
    } else { 
     currentPosition += h; 
    } 
}); 

Questo ha funzionato per me in Firefox.

Problemi correlati