Tôi đã sử dụng câu trả lời của purgatory101 nhưng gặp khó khăn trong việc giữ tất cả các màu (biểu tượng, hình nền, màu văn bản, v.v.), đặc biệt là các bảng định kiểu CSS không thể được sử dụng với các thư viện tự động thay đổi màu của phần tử DOM. Do đó, đây là tập lệnh thay đổi kiểu của phần tử ( background-colour
và colour
) trước khi in và xóa kiểu sau khi in xong. Sẽ rất hữu ích khi tránh viết nhiều CSS trong@media print
định kiểu vì nó hoạt động theo bất kỳ cấu trúc trang nào.
Có một phần của tập lệnh được tạo đặc biệt để giữ màu cho các biểu tượng FontAwgie (hoặc bất kỳ phần tử nào sử dụng :before
bộ chọn để chèn nội dung được tô màu).
JSFiddle hiển thị tập lệnh đang hoạt động
Khả năng tương thích: hoạt động trong Chrome, tôi không kiểm tra các trình duyệt khác.
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();
}
Và sau đó sửa đổi window.print
chức năng để làm cho nó thiết lập các kiểu trước khi in và đặt lại chúng sau.
window._originalPrint = window.print;
window.print = function() {
setColors('body *');
setIconColors('body .fa');
window._originalPrint();
setTimeout(function () {
resetColors('body *');
resetIconColors();
}, 100);
}
Phần tìm đường dẫn biểu tượng để tạo CSS cho: trước các phần tử là bản sao từ câu trả lời SO này