Suggestions for debugging print stylesheets?

CssPrintingFirebugGoogle Chrome-DevtoolsWeb Inspector

Css Problem Overview


I've recently been working on a print stylesheet for a website, and I realized that I was at a loss for effective ways to tweak it. It's one thing to have a reload cycle for working on the on-screen layout:

  • change code
  • command-tab
  • reload

but that whole process gets much more arduous when you're trying to print:

  • change code
  • command-tab
  • reload
  • print
  • squint at print-preview image
  • open PDF in Preview for further inspection

Are there tools I'm missing out on here? Does WebKit's inspector have a "pretend this is paged media" checkbox? Is there some magic that Firebug (shudder) can do?

Css Solutions


Solution 1 - Css

There is an option for that in Chrome's inspector.

  1. Open the DevTools inspector (mac: Cmd + Shift + C , windows: Ctrl + Shift + C)
  2. Click on the Toggle device mode icon Toggle device mode button, located on the upper left corner of the DevTools panel. (windows: Ctrl+Shift+M, mac: Cmd+Shift+M).
  3. Click on the More overrides more overrides icon in the top right corner of the browser viewport to open the devtools drawer.
  4. Then, select Media in the emulation drawer, and check the CSS media checkbox.

enter image description here

This should do the trick.

Update: The menus have changed in DevTools. It can now be found by clicking on the "three-dots" menu in the top right corner > More Tools > Rendering Settings > Emulate media > print.

Source: Google DevTools page*

Solution 2 - Css

I'm assuming you want as much control of the printed window as possible without using a HTML to PDF approach... Use @media screen to debug - @media print for final css

Modern browsers can give you a quick visual for what's going to happen at print time using inches and pts in a @media query.

@media screen and (max-width:8.5in) { /* resize your window until the event is triggered */
    html { width:8.5in; }
    body { font: 9pt/1.5 Arial, sans-serif; } /* Roughly 12px font */
 ...
}

Once your browser is displaying "inches" you'll have a better idea of what to expect. This approach should all but end the print preview method. All printers will work with pt and in units, and using the @media technique will allow you to quickly see what's going to happen and adjust accordingly. Firebug (or equivalent) will absolutely expedite that process. When you've added your changes to @media, you've got all the code you need for a linked CSS file using media = "print" attribute - just copy/paste the @media screen rules to the referenced file.

Good luck. The web wasn't built for print. Creating a solution that delivers all of your content, styles equal to what's seen in the browser can be impossible at times. For instance, a fluid layout for a predominantly 1280 x 1024 audience doesn't always translate easily to a nice and neat 8.5 x 11 laser print.

W3C reference for purusal: http://www.w3.org/TR/css3-mediaqueries/

Solution 3 - Css

Chrome 48 you can debug print styles within the Rendering tab.

Click the menu icon top right of inspector and Rendering Settings.

Edit
For Chrome 58 the location has changed to Web Inspector > Menu > More Tools > Rendering

Solution 4 - Css

In Chrome v41, it's there, but in a slightly different spot.

enter image description here

Solution 5 - Css

There's an easy way to debug your print stylesheet without switching any media attribute in your HTML code (of course, as pointed out, it doesn't solve the width / pages issue):

  • Use Firefox + Web Developer extension.
  • In the Web Developer menu, choose CSS / Display CSS by Media Type / Print
  • Go back to Web Developer menu, choose Options / Persist Features

Now you are viewing the print CSS and you can reload your page indefinitely. Once you're done, uncheck "Persist Features" and reload, you'll get the screen CSS again.

HTH.

Solution 6 - Css

Chrome's UI is different again as of v53.

I don't need to use this feature often, but whenever I do, it takes me forever to figure out where the Chrome team has moved it since the last time I burned cycles trying to track it down.

Notice it's the ... menu in Dev Tools pane not the ... menu in Chrome Browser pane.

Printer preview as of v53 on MacOS

Now scroll down in the Rendering section. It's often below the fold.

Solution 7 - Css

Following up to the answer by rflnogueira, the current Chrome settings (40.0.*) will look like below:

chrome print css emulation

Solution 8 - Css

Just show the print stylesheet in your browser using media="screen" while debugging. The print preview view uses the same rendering engine as normal browsing mode so you can get accurate results using that.

Solution 9 - Css

2019 - Updated instructions

  1. Open Chrome inspector
  • From Mac => option + command + i
  • From Windows => F12
  1. Click on the little 3 dots, customize and control devTools enter image description here

  2. Select More Tools

  3. Select Rendering

  4. Scroll to the bottom to Emulate CSS Media

  5. Select print from the down arrow

enter image description here

Solution 10 - Css

If you have a print function that rewrites the content of the page to a new window with your print style sheet referenced you'll get a much better idea of what its going to look like on paper , and you'll be able to debug it with the likes of firebug too.

Heres an example of how this can be done with JavaScript / jquery

        $("#Print").click(function () {
            var a = window.open('', '', 'scrollbars=yes,width=1024,height=768');
            a.document.open("text/html");
            a.document.write("<html><head>");
            a.document.write('<link rel="stylesheet" href="css/style.css" />');
            a.document.write('<link rel="stylesheet" href="css/print.css" />');
            a.document.write("</head><body>");
            a.document.write($('#Content').html());
            a.document.write('</body></html>');
            a.document.close();
            a.print();
        });

Solution 11 - Css

In Firefox (87.0), the "DOM and Style Inspector" has a toggle button for print media simulation.

enter image description here

One drawback is that it does not clearly delineate the page boundaries.

Solution 12 - Css

enter image description here

In DreamWeaver there is a toolbar that shows virtually any rendering option you want: screen, print, handheld media, projection screen, tv media, desitn time style sheets, etc. This is what I use especially because it: instantly shows a preview with 1 single press of a button.

Solution 13 - Css

I use macros to send keypress and mouse clicks repeatedly. Under Windows, AutoHotKey is a great software and under OS X you can read about Automator sort of an alternative AHK for OsX.

Under Windows (replace Ctrl by Cmd under OS X) "Ctrl-s / switch to Fx window wherever it is in the list of windows opened / Ctrl-r" bound to 1 unused key avoids frustration from uninteresting tasks and will ultimately save my arms from RSI :)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJim PulsView Question on Stackoverflow
Solution 1 - CssRafael NogueiraView Answer on Stackoverflow
Solution 2 - CssDawsonView Answer on Stackoverflow
Solution 3 - CssminlareView Answer on Stackoverflow
Solution 4 - CssjohntrepreneurView Answer on Stackoverflow
Solution 5 - CssCapsuleView Answer on Stackoverflow
Solution 6 - CssTrophyGeekView Answer on Stackoverflow
Solution 7 - CssAnil VangariView Answer on Stackoverflow
Solution 8 - CssTatu UlmanenView Answer on Stackoverflow
Solution 9 - CssJonathan SanchezView Answer on Stackoverflow
Solution 10 - CssBlowsieView Answer on Stackoverflow
Solution 11 - CssdjvgView Answer on Stackoverflow
Solution 12 - CssSåmView Answer on Stackoverflow
Solution 13 - CssFelipeAlsView Answer on Stackoverflow