Browsers do not always print a webpage exactly as it appears on screen. They may remove background colors, suppress background images, change text colors, or simplify decorative effects to conserve ink and improve readability on paper.
The CSS print-color-adjust property lets a page indicate
whether the browser should make those automatic adjustments or attempt to
preserve an element's original appearance. It is useful—but it is not a
command that overrides the user, browser, printer, or operating system.
The short answer
print-color-adjust accepts two primary values:
-
economygives the browser permission to modify colors and backgrounds when it believes doing so will improve printing or conserve ink. This is the default. -
exactindicates that altering the element's appearance could reduce usability or meaning, and requests that the browser avoid such adjustments when possible, because those visual choices are important.
.status-badge {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
} The easiest way to think about the difference is:
economy: "Adjust this if you think it will print better."exact: "Please preserve this styling because it matters."
Why browsers change colors when printing
A webpage and a printed page operate under very different conditions. A screen produces light, while paper reflects it. A dark interface that looks excellent on a monitor may require a large amount of ink and produce text that is difficult to read when printed.
Browsers may therefore make decisions such as:
- Removing a dark page background;
- Changing white text to black;
- Suppressing decorative background images;
- Reducing large areas of saturated color;
- Adjusting colors to improve contrast on white paper; or
- Simplifying effects that do not translate well to print.
With the default economy behavior, the browser has permission to
make these changes. The exact adjustments are implementation decisions and
may differ between browsers, operating systems, printers, and user settings.
What print-color-adjust: economy means
economy is the property's initial value. It tells the browser
that preserving the element's exact appearance is not essential.
.article {
print-color-adjust: economy;
}
You normally do not need to declare this value because it is already the
default. It can still be useful when a parent element uses
exact and you want a particular child to return to the browser's
normal print behavior.
.report {
print-color-adjust: exact;
}
.report__decorative-footer {
print-color-adjust: economy;
}
This works because print-color-adjust is inherited. A value
applied to a container can affect its descendants unless they receive their
own value.
What print-color-adjust: exact means
exact tells the browser that an element's colors and visual
styling have been chosen deliberately and that changing them could make the
result less understandable.
.chart,
.status-key,
.highlighted-table-row {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
} This does not guarantee physically exact colors. A printer may have a limited color range, use grayscale output, run low on ink, or apply its own color management. Instead, the declaration asks the browser not to perform its usual economy-oriented substitutions before sending the document to the printing system.
It is a request, not an absolute command
User print preferences take priority over author CSS. If someone disables
background graphics, selects black-and-white output, or uses a browser that
handles the property differently, exact may not preserve every
visual detail.
A document should therefore remain understandable even when its colors are removed or changed.
When exact is helpful
The property is most appropriate when removing a color or background would reduce meaning, organization, or usability.
Status indicators
A report may use colored badges to distinguish successful, pending, warning, and failed states. Preserving those fills can make a printed report easier to scan.
@media print {
.status-badge {
border: 1px solid currentColor;
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
} The border and visible text remain important because color alone should not communicate the status.
Charts and data visualizations
Charts frequently rely on a coordinated palette. Applying
exact to the chart and its legend can help preserve the
relationship between a series and its label.
Patterns, direct labels, different line styles, and distinct marker shapes should still be used when possible. A color-preservation request is not a substitute for an accessible chart.
Alternating table rows
Light alternating backgrounds can make wide tables easier to follow. If the browser removes those backgrounds, a reader may have more difficulty tracking a row across multiple columns.
@media print {
.data-table tbody tr:nth-child(even) {
background-color: #eef2f7;
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
} Tickets, labels, and structured forms
A ticket, shipping label, certificate, or printable form may use background blocks to separate important regions. Preserving those blocks can protect the intended information hierarchy.
When not to use exact
Avoid applying exact automatically to the entire website merely
to make the printed page resemble the screen.
/* Usually too aggressive */
* {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
} A global declaration can cause large photographs, dark backgrounds, gradients, shadows, navigation treatments, and decorative artwork to consume ink without improving the printed document.
It can also interfere with the browser's attempt to convert a dark interface
into a readable light printout. Apply exact only to elements
whose backgrounds or colors serve a clear purpose.
A practical print stylesheet
A good print stylesheet usually simplifies the overall page while preserving selected meaningful elements.
@media print {
body {
color: #111827;
background: #ffffff;
font-size: 11pt;
line-height: 1.5;
}
nav,
.search,
.share-buttons,
.decorative-banner,
.screen-only {
display: none !important;
}
a {
color: inherit;
text-decoration: underline;
}
.status-badge,
.chart,
.chart-legend,
.important-highlight {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
.status-badge {
border: 1px solid currentColor;
}
table {
border-collapse: collapse;
}
th,
td {
border: 1px solid #64748b;
padding: 0.4rem;
}
h2,
h3 {
break-after: avoid;
}
table,
figure,
pre {
break-inside: avoid;
}
}
Including -webkit-print-color-adjust remains a reasonable
compatibility measure for older WebKit- and Chromium-based browsers. The
unprefixed print-color-adjust property is the standardized
declaration and should come last. The prefixed property remains widely used in practice even though the standardized property is now broadly supported.
Accessibility considerations
Preserving color is not the same as preserving meaning. Printed content should remain understandable when:
- The printer is set to grayscale;
- Background graphics are disabled;
- The printer produces colors differently from the screen;
- Someone uses a high-contrast print configuration;
- The page is photocopied; or
- The user overrides the author's print choices.
Important distinctions should use more than color. Combine color with text, icons, borders, patterns, line styles, or other visible differences.
For example, a red background alone is not a durable way to identify an error. A visible "Error" label and an icon preserve the message even if the background disappears.
How to test print-color-adjust
- Open the browser's print-preview window.
- Test with background graphics enabled and disabled.
- Preview both color and grayscale output when those options are available.
- Save the result as a PDF and inspect every page.
- Confirm that text remains readable when backgrounds disappear.
- Check that tables, charts, badges, and legends retain their relationships.
- Test more than one browser if printing is an important product feature.
- Print a physical sample when accurate output is business-critical.
Print preview is necessary, but a physical printer can reveal differences that a PDF does not show, including weak contrast, clipped margins, color shifts, and unexpectedly dense ink coverage.
Common misunderstandings
Does exact force background printing?
No. It asks the browser to preserve the styling, but user preferences and browser behavior still take priority.
Does it make printed colors physically accurate?
No. Physical color accuracy depends on the printer, paper, ink, color profiles, driver settings, and output mode.
Does it only affect background colors?
No. The browser may adjust colors, images, and other visual styling when optimizing output. Background suppression is simply the most familiar example.
Is it the same as forced-color-adjust?
No. print-color-adjust concerns automatic output adjustments,
particularly print-oriented changes. forced-color-adjust
controls whether forced-colors mode can replace an element's colors. They
address different rendering situations.
Recommended pattern
Allow the browser to handle ordinary page content economically, then preserve only the components whose colors or backgrounds contribute meaningful structure.
@media print {
.meaningful-print-color {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
} Use the class on charts, status keys, highlighted table regions, or other carefully selected elements. Do not use it as a substitute for a proper print stylesheet.
Final takeaway
print-color-adjust controls how much freedom the browser has to
alter an element's appearance for printed or other output.
economy allows optimization; exact asks for the
original styling to be preserved.
Use exact selectively when color and backgrounds improve
understanding—not simply because they are part of the screen design.
Always assume that users, browsers, and printers may still override the
result, and make sure the document remains readable without color.