Ho usato la risposta di purgatory101 ma ho avuto problemi a mantenere tutti i colori (icone, sfondi, colori del testo ecc ...), in particolare che i fogli di stile CSS non possono essere utilizzati con le librerie che cambiano dinamicamente i colori dell'elemento DOM. Quindi ecco uno script che cambia gli stili degli elementi ( background-colour
e colour
) prima della stampa e cancella gli stili una volta effettuata la stampa. È utile evitare di scrivere molti CSS in a@media print
foglio di stile in quanto funziona qualunque sia la struttura della pagina.
C'è una parte dello script appositamente creata per mantenere il colore delle icone FontAwesome (o qualsiasi elemento che utilizza un :before
selettore per inserire contenuti colorati).
JSFiddle che mostra la sceneggiatura in azione
Compatibilità: funziona in Chrome, non ho testato altri browser.
function setColors(selector) {
var elements = $(selector);
for (var i = 0; i < elements.length; i++) {
var eltBackground = $(elements[i]).css('background-color');
var eltColor = $(elements[i]).css('color');
var elementStyle = elements[i].style;
if (eltBackground) {
elementStyle.oldBackgroundColor = {
value: elementStyle.backgroundColor,
importance: elementStyle.getPropertyPriority('background-color'),
};
elementStyle.setProperty('background-color', eltBackground, 'important');
}
if (eltColor) {
elementStyle.oldColor = {
value: elementStyle.color,
importance: elementStyle.getPropertyPriority('color'),
};
elementStyle.setProperty('color', eltColor, 'important');
}
}
}
function resetColors(selector) {
var elements = $(selector);
for (var i = 0; i < elements.length; i++) {
var elementStyle = elements[i].style;
if (elementStyle.oldBackgroundColor) {
elementStyle.setProperty('background-color', elementStyle.oldBackgroundColor.value, elementStyle.oldBackgroundColor.importance);
delete elementStyle.oldBackgroundColor;
} else {
elementStyle.setProperty('background-color', '', '');
}
if (elementStyle.oldColor) {
elementStyle.setProperty('color', elementStyle.oldColor.value, elementStyle.oldColor.importance);
delete elementStyle.oldColor;
} else {
elementStyle.setProperty('color', '', '');
}
}
}
function setIconColors(icons) {
var css = '';
$(icons).each(function (k, elt) {
var selector = $(elt)
.parents()
.map(function () { return this.tagName; })
.get()
.reverse()
.concat([this.nodeName])
.join('>');
var id = $(elt).attr('id');
if (id) {
selector += '#' + id;
}
var classNames = $(elt).attr('class');
if (classNames) {
selector += '.' + $.trim(classNames).replace(/\s/gi, '.');
}
css += selector + ':before { color: ' + $(elt).css('color') + ' !important; }';
});
$('head').append('<style id="print-icons-style">' + css + '</style>');
}
function resetIconColors() {
$('#print-icons-style').remove();
}
Quindi modificare la window.print
funzione per impostare gli stili prima di stamparli e ripristinarli dopo.
window._originalPrint = window.print;
window.print = function() {
setColors('body *');
setIconColors('body .fa');
window._originalPrint();
setTimeout(function () {
resetColors('body *');
resetIconColors();
}, 100);
}
La parte che trova i percorsi delle icone per cui creare CSS: before elements è una copia di questa risposta SO