Wrapping Code Samples on Mobile Devices

By  on  

One part of being a technical blogger that I've had to come to grips with is code samples and small mobile device screens.  I was amazed when I saw a double-digit percentage of visits to this blog were from mobile phones -- mental!  I started paying more attention to detail on said devices and I realized that code samples required loads of horizontal scrolling:  yuck.  By utilizing CSS white-space, we can make code wrap and avoid arm-numbing scrolling on small screens:

pre {
	white-space: pre-line;
}

I like using PrismJS so that requires a different selector:

pre[class*='language-'], code[class*='language-'] {
	white-space: pre-line;
}

Thankfully white-space lets me help you all avoid horizontal scrolling on mobiles. Of course you'll need to choose which media query you want to apply that to, but I'll let you do that.  In some cases it may be difficult to read the line-broken code, but that's surely better than all that crazy scrolling.

Recent Features

  • By
    How I Stopped WordPress Comment Spam

    I love almost every part of being a tech blogger:  learning, preaching, bantering, researching.  The one part about blogging that I absolutely loathe:  dealing with SPAM comments.  For the past two years, my blog has registered 8,000+ SPAM comments per day.  PER DAY.  Bloating my database...

  • By
    5 More HTML5 APIs You Didn’t Know Existed

    The HTML5 revolution has provided us some awesome JavaScript and HTML APIs.  Some are APIs we knew we've needed for years, others are cutting edge mobile and desktop helpers.  Regardless of API strength or purpose, anything to help us better do our job is a...

Incredible Demos

  • By
    Introducing LazyLoad 2.0

    While improvements in browsers means more cool APIs for us to play with, it also means we need to maintain existing code.  With Firefox 4's release came news that my MooTools LazyLoad plugin was not intercepting image loading -- the images were loading regardless of...

  • By
    :valid, :invalid, and :required CSS Pseudo Classes

    Let's be honest, form validation with JavaScript can be a real bitch.  On a real basic level, however, it's not that bad.  HTML5 has jumped in to some extent, providing a few attributes to allow us to mark fields as required or only valid if matching...

Discussion

  1. I’m also using PrismJS. Any tips to get the line-numbers to adjust?

  2. Also, by default tab size is about 4 i believe, this snippet brings it back a little…

    // @media query here for small screens...
    pre{
          webkit-tab-size: 2;
          -moz-tab-size: 2;
          -ms-tab-size: 2;
          -o-tab-size: 2;
          tab-size: 2;
    }
    

    That is, assuming you’ve got tabs over spaces (which you should of course).

  3. Interesting post. I have thought about this for quite some time. The thing is that code is much more readable, in my opinion, when not wrapping it like this.

    Since we are used to large screens, reading wrapped code like this is hard and unfamiliar. We do not code on small screens and therefor it makes more sense to scroll horizontally when viewing code then to force line breaking/wrapping.

  4. No offense, but I would rather go with all the crazy scrolling. I honestly think it looks nicer than the broken up code, and it is easier to read and understand code samples.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!