Category Archives: Usability

Bootstrap 3.2.0 Quick Reference & Notes

An abridged list of the most commonly used Bootstrap code and features (by me)

Over the past couple of months, I’ve been exploring and getting familiar with Bootstrap. During this time I’ve been keeping notes on some of the sticking points I encountered, along with useful tips and commonly used features I’ve learned from testing Bootstrap and reading various online tutorials. Here I present a quick reference of sorts of what I’ve found to be the most useful, and frequently used, parts of Bootstrap. If you find an error, or would like me to add something that you find useful, post a comment or email me.

Text (example)

  • Text alignment classes: .text-left, .text-center.text-right, and .text-justify. These map to the CSS text-align property.  Example: <p class="text-left">Left aligned text.</p><p class="text-center">Center aligned text.</p><p class="text-right">Right aligned text.</p><p class="text-justify">Justified text.</p>
  • Paragraphs (and presumably other text elements) can be make to stand out with the .lead class, which sets the font size and weight, line-height, and bottom margin.
  • In headings (<h1>-<h6>) you can create lighter, secondary text with a generic <small> tag or the .small class.
    Example: <h3>h3. Bootstrap heading <small>Secondary text</small></h3>

Lists (example)

  • To have Bootstrap remove the default styling on a list (ordered and unordered), add the .list-unstyled class. Note that this only applies to immediate children list items, meaning you will need to add the class for any nested lists as well. Example: <ul class="list-unstyled">
  • Display list items horizontally using the .list-inline class. This uses display:inline-block and some padding. Example: <ul class="list-inline">
  • Make description lists (a.k.a definiton lists) two columns by using the .dl-horizontal class. Example: <dl class="dl-horizontal">

Tables (example)

  • For basic styling – light padding and only horizontal dividers – add the base class .table to any <table>
  • For zebra-striping rows, add the class .table-striped to the table.
  • For borders on all sides of the table and cells, add the class .table-bordered to the table.
  • To enable a hover state on table rows within a <tbody>, add the .table-hover class to the table.
  • To make tables more compact by cutting cell padding in half, add the .table-condensed class to the table.
  • Contextual classes for table rows or cells: .active,  .success, .info, .warning, .danger.
  • Create responsive tables by wrapping any table in .table-responsive to make them scroll horizontally on small devices (< 768px). When viewing on anything larger than 768px wide, you will not see any difference in these tables.

Forms (example)

  • Bootstrap has three main form layouts. Normal (vertical with labels above inputs), horizontal (labels to the left of inputs), and inline (like horizontal but with form controls not using 100% width)
  • Wrap form controls (label, input, textarea, select) in divs and give the div the class .form-group (Note: checkboxes and radio buttons instead get the checkbox or radio class respectively). This sets extra bottom margin on grouped form elements and allows changing orientation more easily. Don’t forget to add labels to your controls.
  • Add .form-inline to your <form> for left-aligned and inline-block controls. This only applies to forms within viewports that are at least 768px wide.
  • Give form controls (input, textarea, select) the class .form-control to pickup Bootstrap styling.
  • In form inputs you can use .input-lg and .input-sm for taller or shorter form controls.
  • Use the .checkbox-inline or .radio-inline classes on a series of checkboxes or radios for controls that appear on the same line.
  •  Style buttons with the .btn class.
    • You can also add .btn-default, .btn-primary.btn-success, .btn-info, .btn-warning.btn-danger, and .btn-link. Example: <button type="button" class="btn btn-danger">Danger</button>
    • Button size classes: .btn-lg, .btn-md.btn-sm, .btn-xs. For block level (full-width) buttons, use .btn-block. Example: <button type="button" class="btn btn-default btn-lg btn-block">Block level button</button>
  • All textual <input>, <textarea>, and <select> elements with the .form-control class are set to width: 100%; by default.
  • Use Bootstrap’s predefined grid classes to align labels and groups of form controls in a horizontal layout by adding .form-horizontal to the form. Doing so changes .form-groups to behave as grid rows, so no need for .row.
  • Give form controls the class .form-control. This applies various styles including 100% width.
  • Wrap inputs in grid columns, or any custom parent element, to easily enforce desired widths.

Images (example)

  • Images can be made responsive by adding the .img-responsive class which add a max-width:100% and height:auto;. You can also give images shapes with the .img-rounded, .img-circle, and .img-thumbnail classes.

Grids/Columns (example)

  • Rows (typically divs with the class .rowmust be placed within a .container (fixed-width) or .container-fluid (full-width) for proper alignment and padding.
  • Grid columns are created by specifying the number of twelve available columns you wish to span. Use rows to create horizontal groups of columns. Columns should total no more than 12 per row per size. Example: <div class="col-md-8">.col-md-8</div><div class="col-md-4">.col-md-4</div>
  • Content should be placed within columns, and only columns may be children of rows.
  • Grid classes apply to devices with screen widths greater than or equal to the breakpoint sizes, and override grid classes targeted at smaller devices. Therefore, applying any .col-md-* class to an element will not only affect its styling on medium devices but also on large devices if a .col-lg-x class is not present. Columns stack on smaller screens. Don’t want stacking? Apply classes for smaller resolutions in addition to the larger resolutions like <div class="col-xs-6 col-md-4">.
  • Columns can be moved to the right using: .col-xs-offset-*.col-sm-offset-*, .col-md-offset-*, and .col-lg-offset-*. These classes increase the left margin of a column by X columns. For example, .col-md-offset-4 moves the column over by four columns. Another example, <div class="col-md-6 col-md-offset-3"> moves a six column wide column over by three columns.
  • The order of columns can be changed via the .col-md-push-* (pushes to the right) and .col-md-pull-* (pulls to the left) classes.

General

  • Easily center a page’s contents by wrapping it in an element (e.g. div) with the .container class. Containers set width at various media query breakpoints to match the Bootstrap grid system.
  • For multi-line blocks of code, you can use the .pre-scrollable class to create a scrollable, 350px (max) tall block.
  • General purpose text color classes: .text-muted, .text-primary.text-success, .text-info, .text-warning, and .text-danger.
  • General purpose background color classes: .bg-primary.bg-success, .bg-info, .bg-warning, and .bg-danger.
  • Floating left and right can be accomplished with the .pull-left and .pull-right classes respectively.
  • The class .sr-only will hide all elements with the class to all devices except screen readers.
  • Mobile specific classes:
    • Visible only on the specified screen size: .visible-*-block.visible-*-inline, and .visible-*-inline-block. So, for extra small (xs) screens for example, the available .visible-*-* classes are: .visible-xs-block, .visible-xs-inline, and .visible-xs-inline-block.
    • (Deprecated as of 3.2.0, but still usable) Visible only on the specified screen size: .visible-xs, .visible-sm, .visible-md, and .visible-lg.
    • Hidden only on the specified screen size: .hidden-xs.hidden-sm, .hidden-md, and .hidden-lg.
  • Printer classes: .visible-print-block, .visible-print-inline.visible-print-inline-block and .visible-print (deprecated as of 3.2.0) and .hidden-print.
  • Current media query breakpoint widths (in pixels): xs < 768, sm >=768, md >=992, lg >=1200.
  • To ensure proper rendering and touch zooming, add the viewport meta tag to your <head>. <meta name="viewport" content="width=device-width, initial-scale=1">. To disable zooming (not recommended), you can add the parameters user-scalable=no for a more app-like feel.
  • Bootstrap includes validation styles for error, warning, and success states on form controls. To use, add .has-warning, .has-error, or .has-success to the parent element. Any .control-label.form-control, and .help-block within that element will receive the validation styles.
  • Style anchors to look like buttons by using button classes. Example: <a href="#" class="btn btn-default btn-lg active" role="button">Link</a>
  • Button classes can be used on <a>, <button>, and <input>.
  • Add the bootstrap theme for visual enhancements. See http://getbootstrap.com/dist/css/bootstrap-theme.min.css and http://getbootstrap.com/examples/theme/

A Final Note:

Bootstrap is a starting point. An excellent one, but a starting point nonetheless. You are by no means constrained by anything that it provides, and you can override anything it sets. Always refer to http://getbootstrap.com for the latest info, more examples, and advanced topics.

NBCNews.com Changes Again

It looks like I wasn’t the only one who thought that nbcnews.com’s last redesign was a disaster. Less than six months after radically redesigning their site, nbcnews.com has changed yet again, but this time for the better.

Gone is the layout designed only for mobile devices, with huge images everywhere and stories seemingly randomly scattered about. The latest design is closer to their old layout where stories are categorized, with a better use of space. They also left out a feature of the design prior to the last layout where a block of code above the header was hidden, forcing you to scroll up to see it after the page loaded. Anyone else using that pattern? I don’t think so.

So far, out of nbcnews.com’s last three layout changes, this is the best. We’ll see what they do next. Latest layout:

NBC_News_-_Breaking_News_&_Top_Stories_-_Latest_World,_US_&_Local_News_-_2014-09-11_09.38.17

Nbcnews.com Creates the World’s Least Usable (and possibly the ugliest) News Website

Nbcnews.com (formerly msnbc.com) has a history of terrible design choices. One of the worst, which I wrote about back in 2010, involved some ridiculous header that remained invisible when the site loaded unless you chose to scroll the page up. While I had no doubt that they would continue their tradition of making bad design choices, I was shocked to see their newest debacle.

Unfortunately I don’t have any images of the old layout to show you, but here’s a quick capture of their new layout as compared to the old:

Breaking_News_&_Top_Stories_-_World_News,_US_&_Local_NBC_News_-_2014-02-05_12.15 Breaking_News_&_Top_Stories_-_World_News,_US_&_Local_NBC_News_-_2014-02-06_13.24

Seems like whoever is in charge over there is really excited about mobile devices since it’s painfully obvious that the site has been designed to target smaller screens. In fact, it appears as if Nbcnews.com has totally forsaken desktops. Now, they have some Frankenstein hybrid of their old site mashed up with Pinterest. Hope you like images with your news because the site is loaded with them. Loads and loads of large images (which we all know mobile devices love to load quickly because they’re lightweight and don’t eat up data charges). And good luck trying to find anything easily. Categories seem to be randomly ordered, and the search page looks like a typical 404 page not found page, except that it’s not — it’s really their search, just optimized for mobile devices (hooray!).

I’d be curious to know if Nbcnews did any research or used focus groups to hone their new site, or whether this was all created without feedback. Don’t get me wrong though, I’m all for a decent mobile-friendly website, but don’t ignore desktop users in the process of building one.

The Flick Scroller

Sometime last year I came across an image carousel on an Italian website done in Flash that allowed you to scroll a set of images horizontally with the flick of your mouse. What I loved about it was how natural and intuitive it felt. The gallery of images was infinite, meaning that the same X number of images would repeat no matter how often you scrolled it. The obvious downsides were that it was done in Flash and not mobile friendly.

I’ve been working on and off since then to replicate the effect, as well as improve upon it. I finally have a non-Flash solution that uses jQuery to achieve the effect both on desktops and mobile devices that doesn’t require any other libraries and is super slim. I love the infinite scrolling effect in use here which relies on an optical illusion of sorts.

I’m posting the first examples here and would like your feedback to see if I should turn this into a jQuery plugin. I’m also open to some suggestions in terms of a name. I like the “flick” part, but struggle with calling this a carousel, gallery,scroller, or something else.

Demos

A caveat: The only downside I’ve discovered so far lies in mobile Safari. I have seen the scroller start off and work fine in this browser, yet cease to respond after a few flicks. Unfortunately I seem to have no way to debug mobile Safari, so if anyone can shed light onto the issue I’d be happy to update the code.

Quick Tip – Firefox’s Responsive Design View

Several months ago I transitioned from using Firefox as my primary browser to Chrome. I wasn’t sure if I’d be able to make the switch, or if there was any point in changing, but I did. Among the reasons for my switch was the fact that Firefox has always been, and continues to be, an enormous memory hog. No matter how many time Mozilla announces that the latest version of Firefox is less memory hungry it doesn’t seem to matter on any PC I use. Firefox routinely gobbles up anywhere from half a gig to a gig and half of memory. The nail in the coffin was when Google killed off support for their toolbar (which I used all the time) so it was then that I decided I’d have a go at using Chrome full time.

My biggest requirement was that I needed a tool similar to the excellent Firebug add-in to do development work. Being that Chrome has a developer console built-in without the need for an extension was a big plus and it was quite easy to make the jump after that. Plus, Chrome is very fast at everything it does.

My two biggest gripes with Chrome are a) no print icon (still!) and b) no basic way to get a list of the sites I most recently visited. For example, on Firefox you can click the down arrow at the end of the address bar and see a quick list of recently and frequently visited sites. On Chrome you have to either open a new tab or start typing to do this.

However, there is a new feature in Firefox that I like and hope to see in all other browsers soon: Responsive Design View. Responsive Design View (RDF) has been in Firefox since version 15 arrived a few months ago. Basically what RDF allows you to do is easily re-size your browser to see how a site looks at different sizes without having to re-size the window and messing up all your other open tabs. In Mozilla’s words, “With the Responsive Design View, you can work on your designs without constantly pulling out your mobile phone to see how it looks. And, you can try out your designs without shrinking your browser’s tools, toolbars and other tabs.” This is a great little tool for developers and designers. My only suggestion is that they allow you to edit the profiles they’ve included, instead of just listing the resolutions. For example, instead of just “960×720”, I’d like to name that “iPod Touch”. That and the ability to save specific resolutions instead of having to drag the side of the window every time I need a resolution that isn’t listed in the drop down menu. Now I have yet to do much in the way of responsive design, however I can see this being a very valuable tool to have when the time comes. Worth checking out.