Ich habe die Antwort von purgatory101 verwendet , hatte jedoch Probleme, alle Farben (Symbole, Hintergründe, Textfarben usw.) beizubehalten, insbesondere, dass CSS-Stylesheets nicht mit Bibliotheken verwendet werden können, die die Farben des DOM-Elements dynamisch ändern. Daher gibt es hier ein Skript, das die Stile ( background-colour
und colour
) des Elements vor dem Drucken ändert und Stile löscht, sobald der Druckvorgang abgeschlossen ist. Es ist nützlich zu vermeiden, viel CSS in ein @media print
Stylesheet zu schreiben, da es unabhängig von der Seitenstruktur funktioniert.
Es gibt einen Teil des Skripts, der speziell dafür entwickelt wurde, die Farbe der FontAwesome-Symbole beizubehalten (oder jedes Element, das einen :before
Selektor zum Einfügen von farbigem Inhalt verwendet).
JSFiddle zeigt das Skript in Aktion
Kompatibilität: Funktioniert in Chrome, ich habe keine anderen Browser getestet.
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();
}
Ändern Sie anschließend die window.print
Funktion, um die Stile vor dem Drucken festzulegen und anschließend zurückzusetzen.
window._originalPrint = window.print;
window.print = function() {
setColors('body *');
setIconColors('body .fa');
window._originalPrint();
setTimeout(function () {
resetColors('body *');
resetIconColors();
}, 100);
}
Der Teil, der Symbolpfade zum Erstellen von CSS für: before-Elemente findet, ist eine Kopie dieser SO-Antwort