How to get a background image to print using css?

98,561

Solution 1

It's up to the user and their browser settings to print or not print background images. To keep yourself from relying on that, put the images directly in the HTML with an actual <img /> tag.

Solution 2

For Chrome and Safari you can add the following in your CSS:

@media print
{
    * {-webkit-print-color-adjust:exact;}
}

For other web browsers unfortunately it's up to the user to manually select the option to print background images (e.g. for users with IE 9, 10 and 11 they have to click on the cog icon -> Print -> Page Setup, and activate the option)

Solution 3

You could have an own media-query for print and use :before selector with the attribute "content".

Put this in the media query and it will insert the image when you try to print:

p:before { content: url(images/quote.gif); }

http://www.htmldog.com/reference/cssproperties/content/

Solution 4

It is working in Google Chrome when you add the !important attribute to the background image. Make sure you add the attribute first and then try again, you can do it like this:

.class-name {
background: url('your-image.png') !important;
}

Also you can use these useful printing rules and put them at the end of css file:

@media print {
* {
    -webkit-print-color-adjust: exact !important; /*Chrome, Safari */
    color-adjust: exact !important;  /*Firefox*/
  }
}

Solution 5

Your main document, will import 2 stylesheets, 1 for the screen and another for the printer. You can fine tune the media settings as you need.

<!DOCTYPE html>

<html>

<head>
<link rel="stylesheet" type="text/css" href="screen.css" media="screen, print" />
<link rel="stylesheet" type="text/css" href="print.css" media="print" />
</head>
<body>
<div class="bg print"></div>
</body>
</html>

Here is the background image called in your main css file used in browsers.

.bg {
background: url("http://fpoimg.com/250x250") top left no-repeat;
width:250px;
height: 250px;
}

And your print hack used by browsers when users initiate the print dialog. So you can add the print class to your div and have it print out, or remove it if needed.

.bg.print {
display: list-item;
list-style-image: url("http://fpoimg.com/250x250");
list-style-position: inside;
}

Note: You can also use the @media rule instead of importing files if you want to avoid making an extra http request.

reference from: http://www.seifi.org/css/how-to-force-css-background-images-to-print-in-web-browsers.html

Share:
98,561
Techboy
Author by

Techboy

An SAP Technical Architect who likes all technology, gadgets, sports and too many other things. Has dabbled in: ABAP, BASIC, Pascal, C# .net, COBOL, Cold Fusion, CSS, Google App Inventor for Android, Javascript, Java, Java for Android, C++, HAML, HTML, XHTML, HTMLB (for SAP ITS), PHP, SASS, SQL, VB, XML as well as others - but I don't confess to being an expert in any of them ;-)

Updated on September 20, 2020

Comments

  • Techboy
    Techboy almost 4 years

    I am using the ASP Net Sprites package to create CSS Sprites on my website.

    It is working, but the images it generates do not appear when printed.

    The code generated at HTML level is:

    <a href="/" id="siteLogo"><img class="getmecooking-logo-png" src="data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></a>
    

    How can I get the logo image to appear when a user prints the page?

    I have tried adding this in my print.css stylesheet, but it didn't work:

    #siteLogo
    {
        visibility: visible;
    }
    

    The print.css is working fine and it is formatting the page as I want it to for other elements on the page. My only issue is that I can't get the site logo image to display when it is printed.