2009-04-19 11 views
18

ho qualche semplice CSS:Come faccio a fare in modo che Firefox stampi uno stile di sfondo colorato?

#someElement { 
    background-color:black; 
    color:white; 
} 

Sembra ok nel browser, ma quando vado a stamparlo in Firefox viene fuori come testo nero su sfondo bianco. Immagino che questa sia una sorta di funzionalità per risparmiare l'inchiostro, ma esiste un modo per aggirarla?

+0

suggerisco @musa risposta dovrebbe essere accettato al posto di quella attuale, in quanto risolve davvero il problema. – Namatullah

+1

Hmmm ... la risposta temporale è arrivata quasi due anni prima di quella di mursa, ed entrambe le risposte usano lo stesso principio di base (ad esempio, usare qualcosa di diverso da "background-color" per simulare un colore di sfondo). La risposta di Timing ha più spiegazione, ma quella di Mursa è più semplice ... Vorrei che uno fosse chiaramente migliore, ma dato tutto quello che sono onestamente non sono sicuro di quale debba essere accettato. Per ora ho appena rimosso il segno di spunta dalla risposta di Daniel A. White (mentre è tecnicamente accurato, le persone su SO stanno cercando soluzioni). – machineghost

+0

Firefox [ora riconosce la proprietà 'color-adjust'] (https://stackoverflow.com/questions/35004690/force-background-color-printing-on-firefox/39710495#39710495). 'regolare il colore: esatto'; C'è una risposta qui sotto che menziona ciò che dovrebbe essere selezionato come risposta corretta. – RustyToms

risposta

34

È un'impostazione del browser. Non c'è niente che puoi fare nel tuo CSS. In Windows - File > Page Setup... > Print Background.

+0

C'è un modo con javascript per rilevare se questa impostazione è attivata o disattivata? – jdavis

+0

@jdavis no io non la penso così. –

+0

Come ho accennato nella mia risposta, c'è una soluzione migliore per farlo – Musa

0

Forse non è la risposta che state cercando, ma qui va:

preferirei aggiungere un foglio di stile separato per la stampa della pagina. In genere, è necessario rimuovere elementi quali i menu di navigazione, i breadcrumb, gli annunci e magari apportare piccole modifiche ai margini, ai paddings, ai bordi e ai caratteri rispetto al foglio di stile visualizzato sullo schermo.

Anche pensare di costringere l'utente a riempire un'intera pagina con inchiostro nero con testo bianco mi sembra sciocco.

Per aggiungere un foglio di stile di stampa separato, aggiungere un altro foglio di stile all'inizio della pagina.

<link rel="stylesheet" href="print.css" type="text/css" media="print"> 
+0

Heh, un'intera pagina sarebbe eccessiva, volevo solo una piccola area – machineghost

+0

Questo potrebbe essere, ma tenere presente che è lo stesso meccanismo che lo controlla. Se il browser rileva la superficie del sito Web , confrontarlo con le impostazioni DPI desiderate da qualche parte per la stampa e POI decidere se applicare o meno il colore BG? ;-) –

+5

come risolve il problema generico relativo al colore di sfondo? –

24

ho trovato una soluzione, è un po 'hacky, ma con elementi CSS pseudo è possibile creare sfondi con i bordi di grasso. I bordi vengono stampati anche quando "stampa sfondi" è disattivato, basta renderli davvero spessi! Una nota, Firefox imposta tutti i colori dei caratteri bianchi in nero, quindi quando crei uno sfondo nero falso, Firefox rende ancora il testo nero, rendendo il testo invisibile. Comunque qui è:

Il codice HTML:

<div class="redBox"> 
    <div class="content">Black on red</div> 
</div> 

Il CSS:

.redBox { 
    /* o no, does not work with print */ 
    background-color: red; 
} 

@media print { 
    .redBox { 
    position: relative; 
    overflow: hidden; /* this might not work well in all situations */ 
    } 
    .redBox:before { 
    content: ''; 
    position: absolute; 
    top: 0; 
    right: 0; 
    left: 0; 
    bottom: 0; 
    /* and here it is, the background color */ 
    border: 99999px red solid; 
    z-index: 0; /* was required in my situation */ 
    } 
    .redBox * { 
    /* was required in my situation */ 
    position: relative; 
    z-index: 1; 
    } 
} 
+1

Se si imposta invece "z-index: -1" di '0' è possibile salvare la parte' .redBox * '. – kernel

+0

@kernel che ha funzionato per me, ma penso che sia necessario impostare lo sfondo di' .redbox' transparent f o stampare pure. – Blazemonger

+0

So che questa è una vecchia risposta, ma prova ad usare "9999cm" invece di "px". (Ho sperimentato questo e questa è l'unica unità che ha funzionato. '10000cm' non funzionerà.) –

16

C'è una soluzione semplice per questo.

Per background-color, invece di utilizzare:

background-color: red 

Usa:

background-color: unset; 
box-shadow: inset 0 0 0 1000px red /* 1000px is a random high 
            number that is definitely 
            larger than the box dimension*/ 

Anche per color, invece di:

color: grey; 

Usa:


Si può limitare loro di stampare solo utilizzando @media print, ma non si deve!


Nota: A volte si dovrebbe usare background-color: transparent; o color: transparent; se il color o background-color sono ereditate da elementi padre.

+0

Potrebbe non funzionare su tutti i browser, ma corregge i colori del testo FF. –

+1

Funziona per lo sfondo, non dimenticare di aggiungere ':' dopo 'box-shadow' nella definizione di stile – userlond

+0

@userlond Grazie per la correzione. – Musa

7

Ecco come ho fatto a funzionare nel mio caso aggiungendo le due righe seguenti al div particolare. "@@ supports (-moz-appearance: meterbar)" è utile per aggiungere stili specifici per Firefox.

-webkit-print-color-adjust: esatto; regolazione del colore: esatta;

@@supports (-moz-appearance:meterbar) { 
    .container { 
     margin: 0; 
     font-size: 0.85em; 
     width: 100%; 
     -webkit-print-color-adjust: exact; 
     color-adjust: exact; 
    } 
} 
+0

Questa è una nuova funzionalità di Firefox, e questa è ora la risposta corretta. [Uso della proprietà di regolazione del colore] (https://stackoverflow.com/questions/35004690/force-background-color-printing-on-firefox/39710495#39710495) – RustyToms

Problemi correlati