Anthony Dillon
on 17 June 2014
This post is part of the series ‘Making ubuntu.com responsive‘.
The JavaScript used on ubuntu.com is very light. We limit its use to small functional elements of the web style guide, which act to enhance the user experience but are never required to deliver the content the user is there to consume.
At Canonical we use YUI as our JavaScript framework of choice. We have many years of using it for our websites and web apps therefore have a large knowledge base to fall back on. We have a single core.js
which contains a number of functions called on when required.
Below I will discuss some of the functions and workarounds we have provided in the web style guide.
Providing fallbacks
When considering our transition from PNGs to SVGs across the site, we provided a fallback for background images with Modernizr and reset the background image with the .no-svg
class on the body
. Our approached to a fallback replacement in markup images was a JavaScript snippet from CSS Tricks – SVG Fallbacks, which I converted to YUI:
The snippet above checks if Modernizr exists in the namespace. It then interrogates the Modernizr object for SVG support. If the browser does not support SVGs we loop through each image with .svg
contained in the src
and replace the src
with the same path and filename but a .png
version. This means all SVGs need to have a PNG version at the same location.
Navigation and fallback
The mobile navigation on ubuntu.com uses JavaScript to toggle the menu open and closed. We decided to use JavaScript because it’s well supported. We explored using :target
as a pure CSS solution, but this selector isn’t supported in Internet Explorer 7, which represented a fair chunk of our visitors.
For browsers that don’t support JavaScript we resort to displaying the “burger” icon, which acts as an in-page anchor to the footer which contains the site navigation.
Equal height
As part of the guidelines project we needed a way of setting a number of elements to the same height. We would love to use the flexbox
to do this but the browser support is not there yet. Therefore we developed a small JavaScript solution:
This function finds all elements with an .equal-height
class. We then look for child div
s or li
s and measure the tallest one. Then set all these children to the highest value.
Using combined YUI
One of the obstacles discovered when working on this project was that YUI will load modules from an http
(non secure) domain as the library requires. This of course causes issues on any site that is hosted on a secure domain. We definitely didn’t want to restrict the use of the web style guide to non secure sites, therefore we need combine all required modules into a combined YUI file.
To combine your own YUI visit YUI configurator. Add the modules you require and copy the code from the Output Console panel into your own hosted file.
Final thoughts
Obviously we had a fairly easy time of making our JavaScript responsive as we only use the minimum required as a general principle on our site. But using integrating tools like Modernizr into our workflow and keeping top of CSS browser support, we can keep what we do lean and current.
Read the next post in this series: “Making ubuntu.com responsive: testing on multiple devices”