Reader Mode – Mobile Email Pagination

Here’s an experimental mobile email technique that allows you to paginate a content heavy email so readers can navigate from article to article without scrolling. I hacked it up over a few days as an entry to Litmus’ Creative Navigation in Email Community Contest.

Responsive email design has made emails easier to read on mobile devices. However a drawback of responsive emails is that content heavy emails tend to be narrow and tall, requiring the user to scroll and scroll to get to a piece of content at the bottom. This is an attempt at addressing the problem by allowing recipients to quickly navigate content in an email.

Reader Mode - Mobile Email Pagination


This version only works on iPhone Mail although I’m working on getting it working on Android shortly. Don’t you think the fact Apple mysteriously broke anchor links within email in iOS 8 makes this a timely solution? :)

Update: Fixed a bug where it doesn’t work in iOS7 (issues with calc() – thanks Clinton!)

Reader Mode

I’m calling this technique Reader Mode. It allows the user in a push of a button to convert the email into a reading pane where content are formatted as separate pages and the user can access them by clicking on arrows or through a “table of contents” menu.

Activation
The reader mode button is wrapped with a label that toggles a checkbox with the id navbox. Using the :checked pseudoclass the Reader mode elements are displayed, with the menu being set at position:fixed at the top of the pane.


Article pagination
The articles are wrapped in two containers. When the :checked selector is triggered on the navbox checkbox, the outer container is set to display the full width and height of the viewport. The outer container is also set to a fixed position at top of the email minus the space held by the menu.

The inner container is set to the width of the viewport times the number of articles. The articles are set to the width of the viewport and floated left. This allows the articles to be arranged in a horizontal position, with only a single article being displayed at one time.

We then then create a radio element for each article, that when the :checked selector is triggered for a specific radio element, the inner container is shifted to left or right by the number of “view port widths” (vw) of each article. Adding a transition to the container allows for a sliding effect.

Apparently vw does not work on the Android client so we may either have to resort to stacking the articles on top of each other and showing each article either by selective hiding or adjusting their z-index.

Navigating between articles
For the right and left arrows, we create a pair of right and left labels for each article that triggers the radio of the next and previous article when tapped. These labels are initially hidden and only the pair associated with the current visible article is displayed.


Article index menu
The article index menu contains a list of labels associated with the articles in a hidden absolutely positioned div and is displayed when the user taps on the menu trigger using the :hover selector.

One interesting thing I noticed was that if the menu hides immediately after an item is selected, the email client ignores the selection. I found out that adding a transition and a transition delay solved that problem. I’m sure there’s a more elegant fix for this but for now that works.

Code

Here’s the code!
(The code was modified to remove the use of vw (viewport widths) in calculation as it stopped working in iOS9).


Next steps

Next step is to get this working for Android clients though if their new Lollipop version gains traction, this may be moot as Lollipop only comes with Gmail and Gmail doesn’t support any of these techniques!

I can see other uses for this, for example showing brief snippets in the regular layout but showing the full article or more of it when in reader mode. Another use might be to convert attachments into HTML and then encode them as hidden articles so recipients on clients that support modern HTML can read those attachments in the email itself!

I haven’t done a ton of tests on this but feel free to experiment with this and let me know what you think!


Latest Comments
  1. Jody Gibbons

    Hey Justin,
    Wow I super impressed with your ‘reader mode’ technique! I work in the food and drink business and this would be a really good way for showing the contents of our menu’s! I’m often surprised at what can be achieved by pushing the envelope of email design and testing the waters on a new idea, this is very cool. Thanks for sharing and I’ll try to experiment with this myself shortly! :)

    Cheers
    Jody

    • Justin

      Thank you Jody! I’m really excited to see what others do with this. Feel free to share your experiments with me.

  2. Christine S

    Justin, love this technique! I work for a company that owns almost 100 automobile dealerships. Multiple emails are designed/sent out on a daily basis. This would be great for different car deals as well as service and/or parts offers. Thank you for sharing your expertise and congrats on winning the Litmus Community Contest for Email Navigation!

    • Justin

      Thank you Christine!

  3. Amanda

    Wow Justin, this is genius, I love it! Have read through your blog post and the write up on Litmus about it and have sent myself a copy of this email; I am trying it out now and it’s very cool. I hope this can be supported by most key email clients/apps and would love to see this become a commonly used responsive coding technique!
    Keep up the awesome.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">