The push for responsive web design has helped web developers consider how the sites they develop can adapt to different devices, including sizes, screen resolutions, and even contexts.
It should now be easier than ever to respond to a format that has existed since the start of the web -- print.
I'll walk through the process for making your responsive sites respond to the format we most often forget and show you how to use Google Analytics to track what pages are printed from your site.
How to Troubleshoot Apps for the Modern Connected Worker
Making Your Site Printable: CSS Summit 2014
1. Making Your Site Printable
Presented by Adrian Roselli
July 15, 2014
#CSSSummit
2. About Adrian Roselli
• Co-written four books.
• Technical editor
for two books.
• Written over fifty
articles, most recently
for .net Magazine and
Web Standards Sherpa.
Great bedtime reading!
3. About Adrian Roselli
• Member of W3C HTML Working Group, W3C
Accessibility Task Force, five W3C Community
Groups.
• Building for the web since 1994.
• Founder, owner at Algonquin Studios
(AlgonquinStudios.com).
• Learn more at AdrianRoselli.com.
• Avoid on Twitter @aardrian.
I warned you.
7. Responsive Web Design (RWD)
• Responsive design (or
adaptive design) is about
supporting any device:
• Desktop computer
• Smartphone
• Tablet
• Television
• Printer?
Photo of printed page from http://elliotjaystocks.com/blog/has-adaptive-design-failed-of-course-it-bloody-hasnt/
8. PrintShame.com
• As developers tout their responsive designs,
they often forget the printed page.
• Support for print styles goes back more than a
decade, before RWD.
• Used MediaQueri.es as initial seed, then
picked up from articles, awards, etc.
• Hoped shaming might improve state of print
styles.
• http://PrintShame.com
11. Maturing (a bit)
• Decided the best approach would be teaching.
• Used lessons, common issues from
PrintShame to develop tutorial(s).
• Pitched this very talk.
12. Print Services
• Add a third-party “print” button to your site.
• You have no control over layout.
• You have no control over ads.
• You have no control.
16. Planning
• Is my site built mobile-first?
• Things I want the user to see.
• Things the user may not want to see.
• Things that probably won’t print anyway.
17. Planning
• Is my site built mobile-first?
• Sometimes your mobile-first styles will get you
nearly all the way there.
• If you built desktop-first, you may be able to re-
use your smaller viewport styles.
18. Planning
• Things I want the user to see:
• Branding
• Cross-branding
• Page address
• Copyright
• Path to page (breadcrumb)
• Link addresses (?)
19. Planning
• Things the user may not want to see:
• Primary navigation
• Secondary navigation
• Site search
• Social media icons
• Ad banners
• Fat footers
20. Planning
• Things that probably won’t print anyway:
• Colors
• Backgrounds (images and colors)
• Bits of timed / interactive elements
• White elements (logos, text, effects)
21. Examples: Caveats
• The following CSS examples are just examples.
• Selectors vary between IDs, classes and
elements to show something that may be
familiar to everyone
• Styles may differ from what is on the live site,
sometimes to remove redundancy or simplify
code samples.
24. Calling Print Styles
Make a home for your print styles:
@media print {
/* insert your style declarations here */
}
Or:
<link rel="stylesheet" type="text/css"
href="/css/print.css" media="print">
25. General Styles
• Reset type sizes to points, set text to black.
• Points (mostly) provide more consistent text size
across browsers and devices than pixels.
• Light grey text doesn’t trigger browser overrides
to convert text to black.
• Not all users have color printers. Set red to black
so it doesn’t come out as a medium gray (perhaps
with other styles as appropriate).
26. General Styles
• Clear whitespace around the content.
• User’s print settings will handle page margins.
• Lets user get as much content on a page as
possible (yay for trees!).
• You shouldn’t need to worry about portrait vs.
landscape, A4 vs. 8.5×11, etc.
27. General Styles
• Write values of title (or alt, or data-*, etc.)
attributes into the page.
• Think @cite on blockquote, or @title on abbr.
• You can do this with most attributes on most
elements, although it might not be a good fit.
• Perhaps a @data-shortURL attribute to display a
minified link address to make it easier for users to
type URLs.
• A novel way to promote @longdesc.
28. In-Page Links
Select links in content container(s) and then
display the href value as text after the link.
#Content a[href]:after {
content: " [" attr(href) "] ";
word-wrap: break-word;
}
#Content a[href^="#"]:after, #Content
a[href^="tel"]:after, #Content a[href^="mailto"]:after,
#Content a[href^="javascript"]:after {
content: "";
}
Yes, you can do the inverse selector, but then I don’t get to show the variations!
31. Navigation
• Get rid of the primary, secondary, tertiary
navigation,
• Remove social media links,
• Remove other bits that won’t make sense
when printed.
#Nav, #FlyOutNav, #SubNav, .NoPrint, #SMLinks {
display: none;
}
36. Page Breaks
The CSS properties page-break-before, page-
break-after and page-break-inside have the
following values:
• auto: default value, no specified behavior.
• avoid: tries to avoid a page-break.
• always: invokes a page-break (not for page-break-
inside).
• left | right: Tries to place element on the start of a page
on the left or right, for when you are printing bound material
(books, magazines, etc.) (not for page-break-inside).
37. Further Consideration
• Hide videos.
• Hide controls for embedded audio.
• Hide Flash movies.
• Hide canvas elements (assuming interactive).
• Don’t scale images to 100% width (looking at
you, mobile styles and frameworks).
• Determine if ads should be printed or not.
40. Widows and Orphans
Use these to control how many lines must be at
the end of a page (orphans) or how many at the
start of a page (widows).
p {
orphans: 3; /* 3 consecutive lines at end of page */
widows: 2; /* 2 lines at start of new page */
}
Because widows and orphans are confusing: http://en.wikipedia.org/wiki/Widows_and_orphans
41. Invert Logos
For those rare cases with a white logo where
you can’t load an alternate image (Chrome &
Safari only):
Img#Logo {
-webkit-filter: invert(100%);
filter: invert(100%);
}
If you can load an alternate, a quick tutorial:
http://www.456bereastreet.com/archive/201305/replacing_images_when_printing/
42. QR Codes
• They’re a personal (lifestyle) choice.
• Allows more savvy users to get directly to the
source of the printed page.
• Easy to implement without burdening mobile
users, users who do not print.
• Not perfect – they don’t always fire in time.
43. Call the QR Code
<html>
<head>
<style>
@media print {
header::before { content:
url(http://chart.apis.google.com/chart?chs=120x120&cht=qr&
chl=http%3A%2F%2Falgonquinstudios.com/Engage/Careers); }
}
</style>
</head>
45. Mobile
• Consider the explosion of mobile.
• Same goals on mobile as desktop.
• Mobile has played catch-up in print, but has
arrived within past year.
• Firefox & Safari print background colors.
• Firefox used odd page size.
• Android browser outputs raster PDF.
Printing from Mobile Has Improved: http://rosel.li/063014
48. TEST!
• Print to PDF for your first (most) rounds.
• Chrome Developer Tools (next slide).
• Use every browser you can.
• Use each browser visiting your site.
• Change paper size (8.5" × 11", A4, etc.).
• Change paper orientation.
• Scale the content in the print dialog.
49. Chrome Developer Tools
1. Open the drawer,
2. Select the Emulation tab,
3. Choose Screen,
4. At the bottom check CSS Media,
5. Choose print from the menu.
52. Google Analytics
• Call the GA tracking image, but only when the
print styles get used.
• Attach a custom event to that image.
• View custom events in Google Analytics.
• Identify which pages get printed.
• Make sure that at least those pages print well.
• For fun, compare to your carousel.
Full tutorial: http://rosel.li/032613
53. Query String Parameters
Variable Description
utmac Account String. Appears on all requests. This is your UA-#######-# ID.
utmwv
Tracking code version. While my standard GA requests use 5.4.0, I opted to use 4.3 for reasons I no
longer recall.
utmn
Unique ID generated for each GIF request to prevent caching of the GIF image. I just concatenate the
current year, month, day, hour, minute and second.
utmhn Host Name of your site, which is a URL-encoded string.
utmr Referral, complete URL. In this case I just insert a dash so it is not blank.
utmp Page request of the current page.
utmt
Indicates the type of request, which is one of: event, transaction, item, or a custom variable. If
you leave it blank, it defaults to page. Because I am tracking events, I use event.
utme Extensible parameter. This is where you write your event. I use 5(Print*{page address}).
utmcc
Cookie values. This request parameter sends all the cookies requested from the page. It can get
pretty long. It must be URL encoded. It must include __utma and __utmz values.
59. Here or on Its Way
• Browser support for existing features.
• Electronic Books.
• HTML5 as a publishing platform.
• CSS3, CSS4.
60. Page Rules
The @page rule allows you to specify page
margins (CSS 2.1), size and orientation (CSS3).
@page {
margin: 20cm;
size: A4 landscape;
}
I recommend you do not use it and defer to user
preferences.
61. Left, Right, First Pages
• Use @page rule with pseudo classes to specify
right, left, first:
• :right will affect the page on the right.
• :left will affect the page on the left.
• :first will affect the first page.
• :blank will affect the blank pages resulting from forced break.
• An @page rule with no pseudo classes applies
to all pages.
62. Bleed and Crops
• The bleed property relies on the crops
property having a value.
• Bleed specifies how much the page can
extend outside the page box:
• <length> units, referring to width of page box.
• Crop draws marks outside page box:
• crop: shows where a page should be cut.
• cross: used to align sheets.
63. Boxes across Pages
• The box-decoration-break specifies how a
box’s background, margin and border behave
when broken across pages:
• slice: chops the box in two.
• clone: duplicates the styles
onto each box.
66. Further Reading
• Tracking Printed Pages (or How to Validate Assumptions)
webstandardssherpa.com/reviews/tracking-printed-pages/
• Make your website printable with CSS:
www.creativebloq.com/responsive-web-design/make-your-website-printable-css-3132929
• Calling QR in Print CSS Only When Needed:
rosel.li/030813
• Tracking When Users Print Pages:
rosel.li/032613
• Tips And Tricks For Print Style Sheets:
coding.smashingmagazine.com/2013/03/08/tips-tricks-print-style-sheets/
• Printing The Web:
drublic.de/blog/printing-the-web/
• CSS Paged Media Level 2:
www.w3.org/TR/CSS2/page.html
• CSS Paged Media Module Level 3:
www.w3.org/TR/css3-page/
• Proposals for the future of CSS Paged Media:
dev.w3.org/csswg/css-page-4/
• Can you typeset a book with CSS?
www.w3.org/Talks/2013/0604-CSS-Tokyo/
67. Making Your Site Printable
Presented by Adrian Roselli
July 15, 2014
#CSSSummit