2015-10-29 28 views
11

Quando utilizzo il bootstrap, rimuove il colore dello sfondo da qualsiasi altra cosa quando provo a stampare la mia pagina. Quasi tutto sul mio sito web utilizza le classi di bootstrap, quindi voglio evitare un sacco di CSS manuale al di fuori del bootstrap. Ho scoperto che bootstrap utilizza @media print per rimuovere il colore di sfondo. Sto anche usando un tema di bootstrap (tema unito) che sta rimuovendo anche il colore di sfondo.Stampa bootstrap Il CSS rimuove il colore di sfondo

tema-united.css

@media print 
*, *:before, *:after { 
    background: rgba(0, 0, 0, 0) !important; 
    color: rgb(0, 0, 0) !important; 
    -webkit-box-shadow: none !important; 
    box-shadow: none !important; 
    text-shadow: none !important; 

bootstrap.min.css

@media print 
*, :after, :before { 
    color: rgb(0, 0, 0)!important; 
    text-shadow: none!important; 
    background: 0 0!important; 
    -webkit-box-shadow: none!important; 
    box-shadow: none!important; 

Esiste un modo per assicurarsi che il colore di sfondo non viene rimosso quando si stampa senza editing questi 2 file CSS?

Ad esempio: Quando uso .alert-danger, voglio che il pericolo di avviso stampato come viene visualizzato sullo schermo, quindi sarebbe stampato come una scatola rossa.

See JSFiddle: http://jsfiddle.net/7mtk7wrh/

+0

sostituisce questi stili nel tuo css personalizzato? non dirmi che non ci hai pensato ... –

+0

Fai riferimento alla domanda di overflow dello stack http://stackoverflow.com/questions/14987496/background-color-not-show-in-print-preview –

+0

Di che colore sei vuoi impostare come sfondo adesso mostrerà il nero giusto? – Mitul

risposta

20

Purtroppo non c'è una buona risposta alla tua domanda - ma forse se si capisce il motivo per cui sta allora si può scegliere una via d'uscita.

Perché?

È vero che Bootstrap utilizza @media print { * { color: $fff; background: transparent; }} - ma c'è una ragione molto solida. Questo bit di codice è in realtà derivato dal progetto normalizer.css (da un college di @mdo, @necolas) - l'intento è quello di far sì che tutti i browser si comportino allo stesso modo. Questi ragazzi hanno scelto di "normalizzare" il css per una buona ragione:

Con la maggior parte dei browser si può scegliere di includere o escludere il colore di sfondo, quindi il comportamento non è standard anche su uno stesso browser. Immagina per un secondo un sito Web con uno sfondo molto scuro con testo bianco - quando si stampa con gli sfondi disattivati, sembrerà che non stiate stampando nulla - quando in realtà state stampando testo bianco su sfondo non (bianco).

Non c'era modo di tenere conto di tutti i diversi usi del colore, quindi hanno scelto di passare al nero (font) e al bianco (lo sfondo, in realtà 'trasparente'). Anche la scelta del nero è stata ben pensata: è una soluzione di stampa migliore, poiché la maggior parte delle stampanti a colori ha più "inchiostro/toner" nero (più economico) e non è necessario mescolare il colore per renderlo nero (quindi più veloce).

Ricorda che Bootstrap è anche un "framework" - quindi un punto di partenza se vuoi - e complimenti a @mdo e @necolas per avere la lungimiranza di pensare a questo in termini di stabilire una linea di base prevedibile. (No, non li conosco.)

No ...

Così il pensiero è: "cosa succederebbe se potessimo 'tornare indietro' e disinserire questa Purtroppo CSS non funziona così - sì browser caricare le dichiarazioni CSS in una. 'Coda', dove le vittorie ultima dichiarazione (LIFO , o last-in-first-out), ma non sono a conoscenza di un modo per rimuovere questo stack, quindi gli sviluppatori CSS aggiungono altro alla fine ...

Quindi si potrebbe pensare che possiamo tornare indietro in questo modo --- aggiungere un * { background-color: inherit }. il problema è che inherit devoluto alla proprietà padre, ma * è la radice, in modo che non ha nulla da ripristinare. lo stesso vale per initial!

Forse!

Quindi rimaniamo con 4 opzioni, nessuna è quella che speri, ma è quello che è. In ordine di difficoltà:

  1. Scaricare la sorgente BS (meno o più bassa), modificare il codice incriminato e quindi compilarlo. (È necessario utilizzare una copia locale, CDN non funzionerà.)
  2. Scarica la variante CSS di tua scelta, cerca ed elimina il codice incriminato. (Nessun CDN di nuovo.)
  3. Utilizzare getbootstrap.com/customize per creare una nuova variante - escludere "Stampa stili di supporto" in "Common CSS". (Anche in questo caso, nessun CDN)
  4. Ignora gli elementi specifici di colore che desideri stampare: ad es.
@media print { 
     .alert-danger { 
     color: yellow !important; 
     background-color: red !important; 
     } 
    } 

copie del CDN di BS ora funziona, ma poi si ha il problema degli utenti forse non la stampa di sfondi e avere la bianca di uscita (giallo nella esempio) su bianco!

Infine

Beh spero imparando il perché di stato per lo meno un modo di pensare di una soluzione alternativa. La regola generale che seguo è che quando si stampa, lo sfondo è (dovrebbe essere) sempre bianco. Quando vincolati in questo modo inizi a pensare a idee nuove, come ad esempio "stampa" (@media only screen { .hidden-screen { display: none; }})

+0

Voglio mantenere l'immagine di sfondo non a colori, quindi questa soluzione non funziona. –

1

È possibile ottenere questo lavoro, eliminando quelle linee da bootstrap.css di file, ci potrebbe essere una soluzione jQuery per questo, ma è molto più complicata di quanto la cancellazione di poche righe. :/

Oppure si potrebbe usare un plugin chiamato html2canvas come presentato in questo jsfiddle

+0

Provato questo, ma questo sta ripristinando il colore al valore originale . Il fatto è che io uso, ad esempio, .alert-danger per creare una scatola con uno sfondo rosso, voglio che anche quella scatola rossa venga stampata come una scatola rossa. Quindi ho bisogno del CSS di bootstrap per aggiungere il colore di sfondo, semplicemente non ho bisogno della parte di stampa. – SheperdOfFire

+0

prova a cambiarlo in iniziale quindi. l'iniziale CSS andrà in bootstrap.impostazioni CSS per quella casella e ignorare le regole che sono state impostate prima. Se non funziona, ti dispiace inviare un link o ricreare il problema in jsfiddle? :) – odedta

+0

Non funziona neanche. Questo sta impostando il colore sul valore predefinito: http://www.w3schools.com/cssref/css_initial.asp. L'ereditarietà non funziona perché c'è "! Important" il colore trasparente back-ground nel css, quindi il vero colore viene ignorato. – SheperdOfFire

0

Mi sono ritrovato qui con lo stesso problema ma ho trovato che Chrome è dotato di un'opzione grafica per lo sfondo dello spettacolo sul Stampa la finestra di dialogo con più impostazioni che hanno fatto esattamente questo! Nessuna modifica di Bootstrap (4) richiesta.

Problemi correlati