Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Build Responsively, 2013, Converge SE, Columbia...

Ben Callahan
April 25, 2013

Build Responsively, 2013, Converge SE, Columbia, SC

Slides from our Build Responsively workshop at Converge SE in Columbia, SC on April 25, 2013.

Ben Callahan

April 25, 2013
Tweet

More Decks by Ben Callahan

Other Decks in Design

Transcript

  1. The penetration of desktop & laptop ownership is the same

    today as it was in 2007. http://bit.ly/zE1zgp In the US... Saturday, April 27, 13
  2. Mobile vs Desktop Browsing 0 500 1000 1500 2000 2007

    2008 2009 2010 2011 2012 2013 2014 2015 Mobile Users Desktop Users http://bit.ly/L5cqiO Saturday, April 27, 13
  3. Not that far away 0 500 1000 1500 2000 2007

    2008 2009 2010 2011 2012 2013 2014 2015 Mobile Users Desktop Users http://bit.ly/L5cqiO Saturday, April 27, 13
  4. RWD 101 ‣ Three Core Techniques - A Fluid Foundation

    - Flexible Content - Media Queries Saturday, April 27, 13
  5. A Fluid Foundation Honor the proportions of the design by

    creating percentage-based layout instead of fixed-width, pixel-based layout. Saturday, April 27, 13
  6. Flexible Content Once we have a layout which is based

    on proportions, the content must also respond. Saturday, April 27, 13
  7. Media Queries When our content and our design are no

    longer working in harmony, we need to make a larger shift in layout. Saturday, April 27, 13
  8. RWD 101 ‣ Three Core Techniques - A Fluid Foundation

    - Flexible Content - Media Queries Saturday, April 27, 13
  9. A SHIFT IN MINDSET Traditional Linear Workflow DESIGN FRONT-END BACK-END

    LAUNCH! TH IN K A B O U T U SER S Saturday, April 27, 13
  10. A SHIFT IN MINDSET Traditional Linear Workflow DESIGN FRONT-END BACK-END

    LAUNCH! TH IN K A B O U T U SER S TH R O W IN C O N TEN T Saturday, April 27, 13
  11. A SHIFT IN MINDSET Slightly Better Linear Workflow CONTENT UX

    DESIGN FRONT-END BACK-END LAUNCH! Saturday, April 27, 13
  12. A SHIFT IN MINDSET Linear Workflow CONTENT UX DESIGN FRONT-END

    BACK-END LAUNCH Now with RWD! Saturday, April 27, 13
  13. Now with RWD! A SHIFT IN MINDSET Linear Workflow CONTENT

    UX DESIGN FRONT-END BACK-END LAUNCH Me too! Ditto! Saturday, April 27, 13
  14. Jakob Nielsen Says... ‣ Build a separate mobile site ‣

    Cut features ‣ Cut content http://www.nngroup.com/articles/mobile-site-vs-full-site/ Saturday, April 27, 13
  15. Jakob Nielsen Says... ‣ Build a separate mobile site ‣

    Cut features ‣ Cut content http://www.nngroup.com/articles/mobile-site-vs-full-site/ PLEASE, NO. Saturday, April 27, 13
  16. Phased Release BACK-END FRONT-END DESIGN C O NTENT UX DELIVERABLE

    DELIVERABLE DELIVERABLE DELIVERABLE DELIVERABLE DELIVERABLE RELEASE RELEASE Saturday, April 27, 13
  17. A SHIFT IN MINDSET A Responsive Workflow ‣ Pros -

    Natural Decisions - Encourages Collaboration - Encourages Iteration - Better Results Saturday, April 27, 13
  18. A SHIFT IN MINDSET A Responsive Workflow ‣ Cons -

    Requires Change - May Conflict with Organizational Structure - Dependent on Team Make-up Saturday, April 27, 13
  19. A SHIFT IN PROCESS A Process Myth Each client deliverable

    needs to look more like a final, beautiful end-product than the previous one. Saturday, April 27, 13
  20. A SHIFT IN PROCESS Which Results In Pushing toward nearly-designed

    wireframes quickly and completely designed comps soon after. (This sets up all sorts of unrealistic client expectations.) Saturday, April 27, 13
  21. A SHIFT IN PROCESS A Better Approach Deliverables that best

    serve the organization and prioritization of content and function across multiple resolutions. (Not deliverables made just to impress clients.) Saturday, April 27, 13
  22. A SHIFT IN PROCESS Our Deliverables ‣ Research Deliverables ‣

    Content Deliverables ‣ Priority Deliverables ‣ Style Deliverables ‣ Functional Deliverables Saturday, April 27, 13
  23. A SHIFT IN PROCESS Let’s Focus On... ‣ Research Deliverables

    ‣ Content Deliverables ‣ Priority Deliverables ‣ Style Deliverables ‣ Functional Deliverables Saturday, April 27, 13
  24. A SHIFT IN PROCESS Priority Deliverables ‣ Content Priority Prototypes

    - Takes the place of a traditional wireframe. - As much real content as you can. - Linear in nature, priority implied. - Possibly created in HTML, viewed in a browser. - Generated by content/UX people. Saturday, April 27, 13
  25. A SHIFT IN PROCESS Priority Deliverables ‣ Content Priority Examples

    - Non HTML examples • Smashing Article: Design Process In The Responsive Age • New Sparkbox site early efforts - HTML example • building.seesparkbox.com Saturday, April 27, 13
  26. A SHIFT IN PROCESS Style Deliverables ‣ Style Prototype -

    Like Style Tiles, but in the browser (styletil.es). - Very fast to build. - Accurate web typography. - Easy to show web interaction. - Client reviews in their browser of preference. Saturday, April 27, 13
  27. A SHIFT IN PROCESS Style Deliverables ‣ Style Prototype Examples

    - building.seesparkbox.com • new Sparkbox web style prototype - dressresponsively.com • dress responsively style prototype Saturday, April 27, 13
  28. A SHIFT IN PROCESS Use What The Project Needs ‣

    Research Deliverables ‣ Content Deliverables ‣ Priority Deliverables ‣ Style Deliverables ‣ Functional Deliverables Saturday, April 27, 13
  29. SERVING RWD STYLES Major Approaches ‣ Single CSS File ‣

    Multiple CSS Files ‣ Breakpoint Based Partials ‣ Module Based Partials Saturday, April 27, 13
  30. Before any of this stuff will work, you need to

    do this: <!-- html --> <meta name="viewport" content="width=device-width; initial-scale=1.0;"> Saturday, April 27, 13
  31. And, you should also do this: /* CSS */ @-webkit-viewport

    { width:device-width; } @-moz-viewport { width:device-width; } @-ms-viewport { width:device-width; } @-o-viewport { width:device-width; } @viewport { width:device-width; } Saturday, April 27, 13
  32. SERVING RWD STYLES Major Approaches ‣ Single CSS File ‣

    Multiple CSS Files ‣ Breakpoint Based Partials ‣ Module Based Partials Saturday, April 27, 13
  33. Single CSS File HTML <link> CSS Start with styles applied

    to all Styles scoped to a media query Styles scoped to another media query Saturday, April 27, 13
  34. /* styles.css */ aside { color: #333; width: 100%; }

    Single CSS File Saturday, April 27, 13
  35. /* styles.css */ aside { color: #333; width: 100%; }

    /* if the viewport width is 40em or greater */ Single CSS File Saturday, April 27, 13
  36. <!-- In your HTML --> <link media=”(min-width: 30em)” ... <link

    media=”screen and (max-width: 80em)” ... /* In your CSS */ @media (min-width: 30em) { ... } @media screen and (max-width: 80em) { ... } Media Queries Saturday, April 27, 13
  37. <!-- In your HTML --> <link media=”(min-width: 30em)” ... <link

    media=”screen and (max-width: 80em)” ... /* In your CSS */ @media (min-width: 30em) { ... } @media screen and (max-width: 80em) { ... } Media Types Saturday, April 27, 13
  38. Media Types all braille, embossed, speech handheld, projection, screen, tv

    print tty http://www.w3.org/TR/CSS21/media.html#media-types Saturday, April 27, 13
  39. <!-- In your HTML --> <link media=”(min-width: 30em)” ... <link

    media=”screen and (max-width: 80em)” ... /* In your CSS */ @media (orientation: portrait) { ... } @media screen and (color) { ... } Media Features Saturday, April 27, 13
  40. Media Features width, height device-width, device-height orientation aspect-ratio, device-aspect-ratio color,

    color-index, monochrome resolution, scan, grid http://www.w3.org/TR/css3-mediaqueries Saturday, April 27, 13
  41. Single CSS File HTML <link> CSS Start with styles applied

    to all Styles scoped to a media query Styles scoped to another media query Saturday, April 27, 13
  42. Small Viewport Width First HTML <link> CSS Smallest styles Wider

    styles (mq) Even wider styles (mq) Super wide styles (mq) Saturday, April 27, 13
  43. Large Viewport Width First HTML <link> CSS Widest styles Wide

    styles (mq) Narrow styles (mq) Very narrow styles (mq) Saturday, April 27, 13
  44. /* styles.css */ aside { color: #333; width: 100%; }

    /* if the viewport width is 40em or greater */ Single CSS File Saturday, April 27, 13
  45. /* styles.css */ aside { color: #333; width: 100%; }

    /* if the viewport width is 40em or greater */ @media (min-width: 40em) { aside { width: 50%; } } Single CSS File Saturday, April 27, 13
  46. /* styles.css */ aside { color: #333; width: 100%; }

    /* if the viewport width is 40em or greater */ @media (min-width: 40em) { aside { width: 50%; } } Single CSS File Saturday, April 27, 13
  47. /* styles.css */ aside { color: #333; width: 100%; }

    /* if the viewport width is 40em or greater */ @media (min-width: 40em) { aside { width: 50%; } } /* if the viewport width is 60em or greater */ @media (min-width: 60em) { aside { width: 30%; } } Single CSS File Saturday, April 27, 13
  48. Single CSS File /* styles.css */ aside { color: #333;

    width: 100%; } /* if the viewport width is 40em or greater */ @media (min-width: 40em) { aside { width: 50%; } } /* if the viewport width is 60em or greater */ @media (min-width: 60em) { aside { width: 30%; } } Small Viewport Width First Saturday, April 27, 13
  49. /* styles.css */ aside { color: #333; width: 30%; }

    /* if the viewport width is 60em or less */ @media (max-width: 60em) { aside { width: 50%; } } /* if the viewport width is 40em or less */ @media (min-width: 40em) { aside { width: 100%; } } Single CSS File Large Viewport Width First Saturday, April 27, 13
  50. SERVING RWD STYLES Single CSS File ‣ Simple to implement

    ‣ Single request ‣ Doesn’t require a preprocessor ‣ Requires JS to serve large layout to old IE if starting with small layouts ‣ Large sites can be difficult to maintain because of the size of the single file Saturday, April 27, 13
  51. SERVING RWD STYLES Major Approaches ‣ Single CSS File ‣

    Multiple CSS Files ‣ Breakpoint Based Partials ‣ Module Based Partials Saturday, April 27, 13
  52. Multiple CSS Files HTML <link> If this browser is less

    than IE9... and it’s not IE Mobile... and viewport width is at least 40em... <link> global.css all styles linear layout layout.css only styles for layout http://adactio.com/journal/4494/ Saturday, April 27, 13
  53. Multiple CSS Files index.html <link href=”global.css” rel=”stylesheet”> <link href=”layout.css” media=”(min-width:

    40em)” rel=”stylesheet”> <!--[if (lt IE 9) & (!IEMobile)]> <link href=”layout.css” rel=”stylesheet”> <![endif]--> Saturday, April 27, 13
  54. Multiple CSS Files index.html <link href=”global.css” rel=”stylesheet”> <link href=”layout.css” media=”(min-width:

    40em)” rel=”stylesheet”> <!--[if (lt IE 9) & (!IEMobile)]> <link href=”layout.css” rel=”stylesheet”> <![endif]--> Saturday, April 27, 13
  55. Multiple CSS Files index.html <link href=”global.css” rel=”stylesheet”> <link href=”layout.css” media=”(min-width:

    40em)” rel=”stylesheet”> <!--[if (lt IE 9) & (!IEMobile)]> <link href=”layout.css” rel=”stylesheet”> <![endif]--> Saturday, April 27, 13
  56. Multiple CSS Files index.html <link href=”global.css” rel=”stylesheet”> <link href=”layout.css” media=”(min-width:

    40em)” rel=”stylesheet”> <!--[if (lt IE 9) & (!IEMobile)]> <link href=”layout.css” rel=”stylesheet”> <![endif]--> Saturday, April 27, 13
  57. Multiple CSS Files index.html <link href=”global.css” rel=”stylesheet”> <link href=”layout.css” media=”(min-width:

    40em)” rel=”stylesheet”> <!--[if (lt IE 9) & (!IEMobile)]> <link href=”layout.css” rel=”stylesheet”> <![endif]--> Saturday, April 27, 13
  58. Multiple CSS Files global.css aside { color: #333; width: 100%;

    } layout.css aside { width: 50%; } @media (min-width: 60em) { aside { width: 30%; } } Saturday, April 27, 13
  59. Multiple CSS Files global.css aside { color: #333; width: 100%;

    } layout.css aside { width: 50%; } @media (min-width: 60em) { aside { width: 30%; } } Saturday, April 27, 13
  60. SERVING RWD STYLES Multiple CSS Files ‣ Doesn’t require a

    preprocessor ‣ At least two requests ‣ Requires you to separate layout from other styles ‣ Allows you to start with small layouts and serve a single large layout to old IE without JS - Requests go up if you use multiple MQs Saturday, April 27, 13
  61. SERVING RWD STYLES Major Approaches ‣ Single CSS File ‣

    Multiple CSS Files ‣ Breakpoint Based Partials ‣ Module Based Partials Saturday, April 27, 13
  62. Breakpoint Based Partials HTML <link> If this browser is less

    than IE9... and it’s not IE Mobile... <link> base.css all styles/MQ blocks no-mq.css MQ styles from base without the MQs http://nicolasgallagher.com/mobile-first-css-sass-and-ie/ Saturday, April 27, 13
  63. Breakpoint Based Partials index.html <link href=”base.css” rel=”stylesheet”> <!--[if (lt IE

    9) & (!IEMobile)]> <link href=”no-mq.css” rel=”stylesheet”> <![endif]--> Saturday, April 27, 13
  64. Breakpoint Based Partials base.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { width: 50%; } aside { width: 30%; } Saturday, April 27, 13
  65. Breakpoint Based Partials base.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { width: 50%; } aside { width: 30%; } Saturday, April 27, 13
  66. Breakpoint Based Partials base.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { width: 50%; } aside { width: 30%; } Saturday, April 27, 13
  67. Breakpoint Based Partials base.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { width: 50%; } aside { width: 30%; } Saturday, April 27, 13
  68. Breakpoint Based Partials base.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { width: 50%; } aside { width: 30%; } Saturday, April 27, 13
  69. Breakpoint Based Partials base.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { width: 50%; } aside { width: 30%; } Saturday, April 27, 13
  70. Breakpoint Based Partials base.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { width: 50%; } aside { width: 30%; } Saturday, April 27, 13
  71. Breakpoint Based Partials base.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { width: 50%; } aside { width: 30%; } Saturday, April 27, 13
  72. Similarities ‣ All accept CSS syntax, plus their own specific

    syntax. ‣ All improve CSS by adding variables, importing, mixins, and nesting ‣ All three seek to make CSS authoring a better and more efficient process Saturday, April 27, 13
  73. LESS ‣ Runs on Node.js ‣ Very similar syntax to

    SASS ‣ http://lesscss.org/ Saturday, April 27, 13
  74. Variables are specified with @ symbol /* .less */ @top-variable:

    20px; ! #header-shadow { ! position: absolute; ! ! top: @top-variable; ! } LESS syntax Saturday, April 27, 13
  75. Stylus ‣ Runs on Node.js ‣ Has a flexible syntax

    - You can omit semi-colons, colons, and braces ‣ http://learnboost.github.com/ stylus/ Saturday, April 27, 13
  76. /* .styl */ top-variable = 20px ! #main-header ! position

    absolute ! ! top top-variable #footer { ! background: blue ! ! border 1px solid #00f; } Notice the terse, forgiving syntax. Stylus Syntax Saturday, April 27, 13
  77. SASS ‣ Runs on Ruby ‣ Has two syntax flavors

    - .scss & .sass ‣ http://sass-lang.com/ Saturday, April 27, 13
  78. $main-color: blue /* .scss */ #main { color: $main-color; font-size:

    0.3em; } /* .sass */ #main color: $main-color font-size: 0.3em SASS Sytax Saturday, April 27, 13
  79. /* .scss */ .food-list { list-style: none; li { font-size:

    1rem; a { color: red; } } } Nesting /* .css */ .food-list { list-style: none; } .food-list li { font-size: 1rem; } .food-list li a { color: red; } Saturday, April 27, 13
  80. Nesting can be abused. /* This is bad. Don’t do

    it. */ html body #main div.primary .big-header { font-size: 2em; } ! Saturday, April 27, 13
  81. Nesting can be abused. /* This is bad. Don’t do

    it. */ html body #main div.primary .big-header { font-size: 2em; } ! Saturday, April 27, 13
  82. /*.scss*/ @mixin border-radius( $value : 10px ) { ! -webkit-border-radius:

    $value; ! -moz-border-radius: $value; ! ! ! border-radius: $value; } Mixins .btn{ @include border-radius(25px); } Saturday, April 27, 13
  83. Mixins ‣ SASS and Stylus both support basic programming like

    loops, if/ else, etc. in mixins. ‣ LESS only offers “guarded mixins.” Saturday, April 27, 13
  84. /*.scss*/ @include rem(padding, 0.5, 1, 4, 3); @include rem(font-size, 1.2,

    large); Sparkbox REM Mixin Saturday, April 27, 13
  85. Compass & Bourbon ‣ Compass and Bourbon are mixin libraries

    for SASS ‣ Takes care of vendor prefixes with mixins ‣ Compass has an ecosystem of plugins built on top of Compass. ‣ With config.rb, Compass lets you check the preprocessor config into source control. Saturday, April 27, 13
  86. Importing ‣ Allows you to break up your styles across

    files. - variables, mixins, reset, all separated. ‣ Better than a standard css import Saturday, April 27, 13
  87. this file will compile to base.css /* base.scss */ @import

    "compass"; @import "variables"; @import "reset"; @import "mixins"; @import "header"; @import "hero"; @import "whatever"; Importing Saturday, April 27, 13
  88. Extends ‣ Extends allow you to reuse styles between various

    selectors. ‣ DRY Principle applied to CSS Saturday, April 27, 13
  89. .btn { color: red; border-radius: 25px; } .btn-small { @extend

    .btn; font-size: .5rem; } Extends .btn, .btn-small { color: red; border-radius: 25px; } .btn-small { font-size: .5rem; } Saturday, April 27, 13
  90. .btn { color: red; border-radius: 25px; } .btn-small { @extend

    .btn; font-size: .5rem; } Extends .btn, .btn-small { color: red; border-radius: 25px; } .btn-small { font-size: .5rem; } Saturday, April 27, 13
  91. Source Maps ‣ Using pre-processors does present some new challenges.

    ‣ Line-numbers are no longer representative of where the code is. Saturday, April 27, 13
  92. Source Maps ‣ Source maps let Chrome know the source

    of the generated CSS. Saturday, April 27, 13
  93. Setup Chrome for SASS Source Maps Support ‣ head over

    to chrome://flags - Enable Developer Tools Experiments Saturday, April 27, 13
  94. Setup Chrome for SASS Source Maps Support ‣ Enable Support

    for SASS in the Dev Tools options Saturday, April 27, 13
  95. Setup Chrome for SASS Source Maps Support ‣ Enable support

    for Source maps Saturday, April 27, 13
  96. The last step is to turn on debug info in

    our CSS /* config.rb */ sass_options = { :debug_info => true } or /* command line */ sass --watch -g scss/:css/ Setup Chrome for SASS Source Maps Support Saturday, April 27, 13
  97. Breakpoint Based Partials base.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { width: 50%; } aside { width: 30%; } Saturday, April 27, 13
  98. _40em.scss aside { width: 50%; } Breakpoint Based Partials base.scss

    @import “smallest”; @media (min-width: 40em) { @import “40em”; } @media (min-width: 60em) { @import “60em”; } no-mq.scss @import “40em”; @import “60em”; _60em.scss aside { width: 30%; } _smallest.scss aside { color: #333; width: 100%;} Saturday, April 27, 13
  99. SERVING RWD STYLES Breakpoint Based Partials ‣ Allows you to

    start with small layouts and serve large layout to old IE without JS ‣ Only 1 or 2 requests ‣ Requires preprocessor ‣ Maintenance can be complex Saturday, April 27, 13
  100. SERVING RWD STYLES Major Approaches ‣ Single CSS File ‣

    Multiple CSS Files ‣ Breakpoint Based Partials ‣ Module Based Partials Saturday, April 27, 13
  101. HTML If < IE9 and not IE Mobile <link> If

    >= IE9 or IE Mobile <link> Module Based Partials no-mq.css All styles with no MQs mq.css All styles with MQs http://seesparkbox.com/foundry/there_is_no_breakpoint Saturday, April 27, 13
  102. Module Based Partials index.html <!--[if (lt IE 9) & (!IEMobile)]>

    <link href=”no-mq.css” rel=”stylesheet”> <![endif]--> <!--[if (gte IE 9) | (IEMobile)]><!--> <link href=”mq.css” rel=”stylesheet”> <!--<![endif]--> Saturday, April 27, 13
  103. Module Based Partials index.html <!--[if (lt IE 9) & (!IEMobile)]>

    <link href=”no-mq.css” rel=”stylesheet”> <![endif]--> <!--[if (gte IE 9) | (IEMobile)]><!--> <link href=”mq.css” rel=”stylesheet”> <!--<![endif]--> Saturday, April 27, 13
  104. Module Based Partials index.html <!--[if (lt IE 9) & (!IEMobile)]>

    <link href=”no-mq.css” rel=”stylesheet”> <![endif]--> <!--[if (gte IE 9) | (IEMobile)]><!--> <link href=”mq.css” rel=”stylesheet”> <!--<![endif]--> Saturday, April 27, 13
  105. Module Based Partials index.html <!--[if (lt IE 9) & (!IEMobile)]>

    <link href=”no-mq.css” rel=”stylesheet”> <![endif]--> <!--[if (gte IE 9) | (IEMobile)]><!--> <link href=”mq.css” rel=”stylesheet”> <!--<![endif]--> Saturday, April 27, 13
  106. Module Based Partials index.html <!--[if (lt IE 9) & (!IEMobile)]>

    <link href=”no-mq.css” rel=”stylesheet”> <![endif]--> <!--[if (gte IE 9) | (IEMobile)]><!--> <link href=”mq.css” rel=”stylesheet”> <!--<![endif]--> Saturday, April 27, 13
  107. Module Based Partials index.html <!--[if (lt IE 9) & (!IEMobile)]>

    <link href=”no-mq.css” rel=”stylesheet”> <![endif]--> <!--[if (gte IE 9) | (IEMobile)]><!--> <link href=”mq.css” rel=”stylesheet”> <!--<![endif]--> Saturday, April 27, 13
  108. Module Based Partials mq.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { color: #333; width: 100%; width: 50%; width: 30%; } Saturday, April 27, 13
  109. Module Based Partials mq.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { color: #333; width: 100%; width: 50%; width: 30%; } Saturday, April 27, 13
  110. Module Based Partials mq.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { color: #333; width: 100%; width: 50%; width: 30%; } Saturday, April 27, 13
  111. Module Based Partials mq.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { color: #333; width: 100%; width: 50%; width: 30%; } Saturday, April 27, 13
  112. Module Based Partials mq.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { color: #333; width: 100%; width: 50%; width: 30%; } Saturday, April 27, 13
  113. Module Based Partials mq.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { color: #333; width: 100%; width: 50%; width: 30%; } Saturday, April 27, 13
  114. Module Based Partials mq.css aside { color: #333; width: 100%;

    } @media (min-width: 40em) { aside { width: 50%; } } @media (min-width: 60em) { aside { width: 30%; } } no-mq.css aside { color: #333; width: 100%; width: 50%; width: 30%; } Saturday, April 27, 13
  115. Module Based Partials mq.scss @import “compass”; @import “sb-media”; @import “aside”;

    @import “nav”; @import “footer”; ... no-mq.scss @import “compass”; @import “sb-media”; $sb-no-mq-support: true; @import “aside”; @import “nav”; @import “footer”; ... Saturday, April 27, 13
  116. Module Based Partials mq.scss @import “compass”; @import “sb-media”; @import “aside”;

    @import “nav”; @import “footer”; ... no-mq.scss @import “compass”; @import “sb-media”; $sb-no-mq-support: true; @import “aside”; @import “nav”; @import “footer”; ... Saturday, April 27, 13
  117. Module Based Partials mq.scss @import “compass”; @import “sb-media”; @import “aside”;

    @import “nav”; @import “footer”; ... no-mq.scss @import “compass”; @import “sb-media”; $sb-no-mq-support: true; @import “aside”; @import “nav”; @import “footer”; ... Saturday, April 27, 13
  118. Module Based Partials mq.scss @import “compass”; @import “sb-media”; @import “aside”;

    @import “nav”; @import “footer”; ... no-mq.scss @import “compass”; @import “sb-media”; $sb-no-mq-support: true; @import “aside”; @import “nav”; @import “footer”; ... Saturday, April 27, 13
  119. Module Based Partials _aside.scss aside { color: #333; width: 100%;

    @include sb-media(“min-width: 40em”) { width: 50%; } @include sb-media(“min-width: 60em”) { width: 30%; } } Saturday, April 27, 13
  120. Module Based Partials _aside.scss aside { color: #333; width: 100%;

    @include sb-media(“min-width: 40em”) { width: 50%; } @include sb-media(“min-width: 60em”) { width: 30%; } } Saturday, April 27, 13
  121. Module Based Partials _aside.scss aside { color: #333; width: 100%;

    @include sb-media(“min-width: 40em”) { width: 50%; } @include sb-media(“min-width: 60em”) { width: 30%; } } $sb-no-mq-support: true; Saturday, April 27, 13
  122. Module Based Partials $default-­‐feature:  'min-­‐width:  '; $sb-­‐no-­‐mq-­‐support:  false  !default; @mixin

     sb-­‐media($query)  {    @if  type-­‐of(  $query  )  ==  'number'  {        $query:  $default-­‐feature  +  $query;    }    @if  $sb-­‐no-­‐mq-­‐support{        @content;    }  @else  {        @media  (  $query  )  {            @content;        }    } } https://github.com/sparkbox/SB-Media Saturday, April 27, 13
  123. SERVING RWD STYLES Module Based Partials ‣ Single Request ‣

    Easy Maintenance ‣ Allows you to start with small layouts and serve large layout to old IE without JS ‣ Single request for all ‣ Requires Preprocessor Saturday, April 27, 13
  124. There is no Breakpoint aside { // general styles //

    major shift at 40em // major shift at 60em ... } aside { // general styles // major shift at 40em // minor tweak at 42em // minor tweak at 53.5em // minor tweak at 56em // major shift at 60em // minor tweak at 72.2em // minor tweak at 74em ... } Saturday, April 27, 13
  125. There is no Breakpoint aside { // general styles //

    major shift at 40em // major shift at 60em ... } aside { // general styles // major shift at 40em // minor tweak at 42em // minor tweak at 53.5em // minor tweak at 56em // major shift at 60em // minor tweak at 72.2em // minor tweak at 74em ... } Saturday, April 27, 13
  126. Fractal aside { // general styles // major shift at

    40em // minor tweak at 42em // minor tweak at 53.5em // minor tweak at 56em // major shift at 60em // minor tweak at 72.2em // minor tweak at 74em ... } Saturday, April 27, 13
  127. CREATING FLEXIBILITY What Needs to Flex ‣ Grids ‣ Layout

    ‣ Typography ‣ Images ‣ Tables ‣ Video Saturday, April 27, 13
  128. CREATING FLEXIBILITY What Needs to Flex ‣ Grids ‣ Layout

    ‣ Typography ‣ Images ‣ Tables ‣ Video Saturday, April 27, 13
  129. body { width: 1000px; } div.main { width: 700px; }

    aside { width: 280px; } It starts with the grid body { width: 100%; } div.main { width: 70%; } aside { width: 28%; } Saturday, April 27, 13
  130. body { width: 1000px; } div.main { width: 700px; }

    It starts with the grid body { width: 100%; } div.main { width: 70%; } target / context = % 700 / 1000 = .7 .7 = 70% Saturday, April 27, 13
  131. body { width: 1000px; } aside { width: 280px; }

    It starts with the grid body { width: 100%; } aside { width: 28%; } target / context = % 280 / 1000 = .28 .28 = 28% Saturday, April 27, 13
  132. CREATING FLEXIBILITY RWD Grid Systems ‣ Foundation ‣ Bootstrap ‣

    Skeleton ‣ Responsive.gs ‣ Columnal ‣ ...this list goes on, and on, and on Saturday, April 27, 13
  133. @column-width: 60; @gutter-width: 20; @columns: 12; @total-width: 100%; header {

    .column(12); } article { .column(12); } aside { .column(12); } @media (min-width: 38em) { article { .column(8); } aside { .column(4); } } Semantic.gs Saturday, April 27, 13
  134. @column-width: 60; @gutter-width: 20; @columns: 12; @total-width: 100%; header {

    @include column(12); } article { @include column(12); } aside { @include column(12); } @media (min-width: 38em) { article { @include column(8); } aside { @include column(4); } } Semantic.gs Saturday, April 27, 13
  135. Semantic.gs @column-width: 60; @gutter-width: 20; @columns: 12; @total-width: 100%; header

    { @include column(12); } article { @include column(12); } aside { @include column(12); } @media (min-width: 38em) { article { @include column(8); } aside { @include column(4); } } Saturday, April 27, 13
  136. Semantic.gs @column-width: 60; @gutter-width: 20; @columns: 12; @total-width: 100%; header

    { @include column(12); } article { @include column(12); } aside { @include column(12); } @media (min-width: 38em) { article { @include column(8); } aside { @include column(4); } } Saturday, April 27, 13
  137. Semantic.gs @column-width: 60; @gutter-width: 20; @columns: 12; @total-width: 100%; header

    { @include column(12); } article { @include column(12); } aside { @include column(12); } @media (min-width: 38em) { article { @include column(8); } aside { @include column(4); } } Saturday, April 27, 13
  138. CREATING FLEXIBILITY What Needs to Flex ‣ Grids ‣ Layout

    ‣ Typography ‣ Images ‣ Tables ‣ Video Saturday, April 27, 13
  139. CREATING FLEXIBILITY Responsive Layout Patterns ‣ Source order stacking ‣

    Content choreography ‣ Off canvas Saturday, April 27, 13
  140. CREATING FLEXIBILITY Responsive Layout Patterns ‣ Source order stacking ‣

    Content choreography ‣ Off canvas Saturday, April 27, 13
  141. CREATING FLEXIBILITY Responsive Layout Patterns ‣ Source order stacking ‣

    Content choreography ‣ Off canvas Saturday, April 27, 13
  142. CREATING FLEXIBILITY Responsive Layout Patterns ‣ Source order stacking ‣

    Content choreography ‣ Off canvas Saturday, April 27, 13
  143. There are many, many combinations of these basic ideas http://bit.ly/U4N5qH

    (http://bradfrost.github.com/this-is-responsive/patterns.html) Saturday, April 27, 13
  144. CREATING FLEXIBILITY What Needs to Flex ‣ Grids ‣ Layout

    ‣ Typography ‣ Images ‣ Tables ‣ Video Saturday, April 27, 13
  145. CREATING FLEXIBILITY Responsive Typography ‣ Small screen != small font-size

    ‣ Consider contrast ‣ If text has links, give adequate room to touch them Saturday, April 27, 13
  146. CREATING FLEXIBILITY Responsive Typography ‣ Small screen != small font-size

    ‣ Consider contrast ‣ If text has links, give adequate room to touch them Saturday, April 27, 13
  147. CREATING FLEXIBILITY Responsive Typography ‣ Small screen != small font-size

    ‣ Consider contrast ‣ If text has links, give adequate room to touch them Saturday, April 27, 13
  148. CREATING FLEXIBILITY Responsive Typography ‣ Small screen != small font-size

    ‣ Consider contrast ‣ If text has links, give adequate room to touch them Saturday, April 27, 13
  149. CREATING FLEXIBILITY What Needs to Flex ‣ Grids ‣ Layout

    ‣ Typography ‣ Images ‣ Tables ‣ Video Saturday, April 27, 13
  150. CREATING FLEXIBILITY Image: Bandwidth As of March of 2012, 86%

    of the sites on mediaqueri.es demonstrated the same weight and load time at resolutions from 300ish to 1200ish. via @guypod http://www.guypo.com/mobile/performance-implications-of- responsive-design-book-contribution/ Saturday, April 27, 13
  151. CREATING FLEXIBILITY Image: Pixel Density Most new mobile devices have

    high pixel density displays: Apple iPhone 4+: 326 PPI Amazon Kindle Fire HD 8.9: 254 PPI Nokia Lumia 920: 332 PPI BlackBerry Z10: 356 PPI Samsung Galaxy Note: 285 PPI Saturday, April 27, 13
  152. CREATING FLEXIBILITY The image solution(s) ‣ SVG ‣ Icon fonts

    ‣ Pixel-density media queries ‣ Compressive ‣ Picturefill ‣ User preference Saturday, April 27, 13
  153. SVG (Scalable Vector Graphics) ‣ Allows the image to be

    resolution independent. ‣ Support isn’t very good for older browsers. ‣ We can use Modernizr to detect if the browser supports SVG and provide a .png fallback for those that do not. Saturday, April 27, 13
  154. Icon Fonts ‣ Fonts by default are resolution independent, Icon

    fonts are no different. ‣ http://icomoon.io/app/ allows you to create your own icon fonts ‣ They do require a bit more markup, and JS for IE 7 and lower. Saturday, April 27, 13
  155. <!--html--> <a href="#" class="search-toggle"> <span aria-hidden="true" data-icon="&#xe009;"></span> <span class="screen-reader">Search</span> </a>

    Icon Font Markup /*.scss*/ [data-icon]:before { content: attr(data-icon); font-family: 'icon-font-family'; speak: none; } Saturday, April 27, 13
  156. Pixel Density MQs ‣ Detect the pixel ratio of the

    device and serve a second, higher-res image. ‣ Retina devices now have to make an additional request for the retina asset. Saturday, April 27, 13
  157. /*.scss*/ @media only all and (-webkit-min-device-pixel-ratio: 1.5) { .logo {

    background-image: url(/i/logo-2x.png); background-size: 100%; } } Pixel Density MQs Saturday, April 27, 13
  158. User Preference ‣ Allow the user to choose what experience

    they would like to have on their device: “HD” or “SD”. Saturday, April 27, 13
  159. CREATING FLEXIBILITY What Needs to Flex ‣ Grids ‣ Layout

    ‣ Typography ‣ Images ‣ Tables ‣ Video Saturday, April 27, 13
  160. CREATING FLEXIBILITY What Needs to Flex ‣ Grids ‣ Layout

    ‣ Typography ‣ Images ‣ Tables ‣ Video Saturday, April 27, 13
  161. NAVIGATION AND RWD Major Issues ‣ Site Depth and Breadth

    ‣ Screen Real Estate ‣ Cross-width Consistency ‣ Interaction Patterns Saturday, April 27, 13
  162. NAVIGATION AND RWD Major Issues ‣ Site Depth and Breadth

    ‣ Screen Real Estate ‣ Cross-width Consistency ‣ Interaction Patterns Saturday, April 27, 13
  163. Simple Nav Examples ‣ Simple Row ‣ Jump to Content

    ‣ Jump to Footer ‣ Top Stacked Off Canvas Saturday, April 27, 13
  164. Simple Nav Examples ‣ Simple Row ‣ Jump to Content

    ‣ Jump to Footer ‣ Top Stacked Off Canvas http://seesparkbox.com Saturday, April 27, 13
  165. Simple Nav Examples ‣ Simple Row ‣ Jump to Content

    ‣ Jump to Footer ‣ Top Stacked Off Canvas http://forgeideas.com Saturday, April 27, 13
  166. Simple Nav Examples ‣ Simple Row ‣ Jump to Content

    ‣ Jump to Footer ‣ Top Stacked Off Canvas http://contentsmagazine.com Saturday, April 27, 13
  167. Simple Nav Examples ‣ Simple Row ‣ Jump to Content

    ‣ Jump to Footer ‣ Top Stacked Off Canvas http://2012.dconstruct.org/ Saturday, April 27, 13
  168. Most sites have to work a bit harder to accommodate

    their content. Saturday, April 27, 13
  169. Complex Nav Causes ‣ Large volume of content - Legacy

    content - Dynamic content ‣ Broad architecture - Lots of content types/categories ‣ Deep architecture - Lots of children and nesting Saturday, April 27, 13
  170. Complex Nav Causes ‣ Large volume of content - Legacy

    content - Dynamic content ‣ Broad architecture - Lots of content types/categories ‣ Deep architecture - Lots of children and nesting DON’T GIVE UP. Saturday, April 27, 13
  171. Before accommodating all the things, it’s not a cop- out

    to question the things. Saturday, April 27, 13
  172. Complex Nav Causes ‣ Poor Information Architecture - Unnecessarily broad

    or deep due to inefficiency or poor planning ‣ Poor Content Strategy - Unnecessarily large due to a lack of governance, ownership, or intentionality POSSIBLE ROOT Saturday, April 27, 13
  173. NAVIGATION AND RWD Major Issues ‣ Site Depth and Breadth

    ‣ Screen Real Estate ‣ Cross-width Consistency ‣ Interaction Patterns Saturday, April 27, 13
  174. NAVIGATION AND RWD Major Issues ‣ Site Depth and Breadth

    ‣ Screen Real Estate ‣ Cross-width Consistency ‣ Interaction Patterns Saturday, April 27, 13
  175. NAVIGATION AND RWD Major Issues ‣ Site Depth and Breadth

    ‣ Screen Real Estate ‣ Cross-width Consistency ‣ Interaction Patterns Saturday, April 27, 13
  176. Patterns Galore ‣ Toggle ‣ Footer Anchor ‣ Select Menu

    ‣ Multi-Toggle ‣ Off Canvas ‣ More... http://bradfrost.github.com/this-is-responsive/patterns.html Saturday, April 27, 13
  177. Patterns Galore ‣ Toggle ‣ Footer Anchor ‣ Select Menu

    ‣ Multi-Toggle ‣ Off Canvas ‣ More... Saturday, April 27, 13
  178. Patterns Galore ‣ Toggle ‣ Footer Anchor ‣ Select Menu

    ‣ Multi-Toggle ‣ Off Canvas ‣ More... Saturday, April 27, 13
  179. Patterns Galore ‣ Toggle ‣ Footer Anchor ‣ Select Menu

    ‣ Multi-Toggle ‣ Off Canvas ‣ More... Saturday, April 27, 13
  180. Patterns Galore ‣ Toggle ‣ Footer Anchor ‣ Select Menu

    ‣ Multi-Toggle ‣ Off Canvas ‣ More... Saturday, April 27, 13
  181. Patterns Galore ‣ Toggle ‣ Footer Anchor ‣ Select Menu

    ‣ Multi-Toggle ‣ Off Canvas ‣ More... Saturday, April 27, 13
  182. Patterns Galore ‣ Toggle ‣ Footer Anchor ‣ Select Menu

    ‣ Multi-Toggle ‣ Off Canvas ‣ More... Saturday, April 27, 13
  183. @BENCALLAHAN Retrofitting RESPONSIVE RETROFITTING This section was added due to

    demand on the day of the workshop. Sorry for the variation in presentation style! Saturday, April 27, 13
  184. @BENCALLAHAN What is a Retrofit? Finding the fastest and lowest-risk

    approach to creating a better experience on an existing site for users of any size screen. RESPONSIVE RETROFITTING Saturday, April 27, 13
  185. @BENCALLAHAN What is a Retrofit? 1. How to do it.

    2. Managing your client. RESPONSIVE RETROFITTING Saturday, April 27, 13
  186. @BENCALLAHAN @klayon ...performance is important, but access is more important.

    Mobile later is better than mobile never. From “Responsive images for mobile: don’t sweat it” (http://tiny.cc/vr24gw) RESPONSIVE RETROFITTING Saturday, April 27, 13
  187. @BENCALLAHAN Retrofitting Techniques: From Fixed to Fluid ➡ Demo of

    Twitter.com http://www.alistapart.com/articles/fluidgrids/ target  /  context  =  result RESPONSIVE RETROFITTING Saturday, April 27, 13
  188. @BENCALLAHAN Retrofitting Techniques: From Fixed to Fluid ➡ Demo of

    Twitter.com http://www.alistapart.com/articles/fluidgrids/ target  /  context  =  result 302  /  837  =  36.08% 522  /  837  =  62.37% RESPONSIVE RETROFITTING Saturday, April 27, 13
  189. @BENCALLAHAN Retrofitting Techniques: From Fixed to Fluid ➡ Demo of

    Twitter.com http://paulirish.com/2012/box-sizing-border-box-ftw/ *  {      -­‐moz-­‐box-­‐sizing:  border-­‐box;      -­‐webkit-­‐box-­‐sizing:  border-­‐box;      box-­‐sizing:  border-­‐box; } RESPONSIVE RETROFITTING Saturday, April 27, 13
  190. @BENCALLAHAN Retrofitting Techniques: From Fixed to Fluid ➡ Demo of

    Twitter.com /*  some  css  */ @media  (max-­‐width:  500px)  {      /*  css  for  500px  and  lower  */ } RESPONSIVE RETROFITTING Saturday, April 27, 13
  191. @BENCALLAHAN Retrofitting Techniques: Inline Image Styles ➡ Support ‣ FireFox

    5+ Win/Mac ‣ IE7+ (exception: IE8 & min-width) ‣ Chrome 14+ Win/Mac ‣ Safari 4+ Win, 5+ Mac ‣ Opera 10+ Win, 11+ Mac ‣ Mobile Safari (iOS 5) ‣ Android Browser 2.3+ RESPONSIVE RETROFITTING Saturday, April 27, 13
  192. @BENCALLAHAN Retrofitting Techniques: Background Images Tim Kadlec on timkadlec.com “Media

    Query & Asset Downloading Results” ‣ display: none on parent element ‣ specify all background images inside media queries http://timkadlec.com/2012/04/media-query-asset-downloading-results/ RESPONSIVE RETROFITTING Saturday, April 27, 13
  193. @BENCALLAHAN Retrofitting Techniques: Media Queries ➡ Large Resolution First ➡

    Small Resolution First, Capped RESPONSIVE RETROFITTING Saturday, April 27, 13
  194. @BENCALLAHAN Retrofitting Techniques: Media Queries ➡ Large Resolution First /*

     FILE:  main.css  */ /*  all  your  original  styles  */ @media  (max-­‐width:  53em)  {    /*  styles  for  53em  and  lower  */ } @media  (max-­‐width:  37em)  {    /*  styles  for  37em  and  lower  */ } RESPONSIVE RETROFITTING Saturday, April 27, 13
  195. @BENCALLAHAN Retrofitting Techniques: Media Queries ➡ Small Resolution First, Capped

    ‣ Serve the original CSS to large viewports ‣ Serve mobile-first CSS to small viewports ‣ No changes to original CSS RESPONSIVE RETROFITTING Saturday, April 27, 13
  196. @BENCALLAHAN Retrofitting Techniques: Media Queries ➡ Small Resolution First, Capped

    <html  class=”no-­‐js”> <head>    <script  src=”/js/modernizr.js”></script>    <script>        yepnope({            test  :  Modernizr.mq(‘(min-­‐width:  0px)’),            yep    :  ‘base.css’,            nope  :  ‘original.css’        });      </script>    <noscript>        <link  rel="stylesheet"  href="original.css">    </noscript> </head> RESPONSIVE RETROFITTING Saturday, April 27, 13
  197. @BENCALLAHAN Retrofitting Techniques: Media Queries ➡ Small Resolution First, Capped

    @media (max-width: 979px) { @import "small"; } @media (min-width: 661px) and (max-width: 979px) { @import "medium"; } @media (min-width: 980px) { @import "original"; } RESPONSIVE RETROFITTING Saturday, April 27, 13
  198. @BENCALLAHAN Retrofitting Techniques: Other Considerations ➡ Touch Target Area ➡

    Hover States ➡ Contrast ➡ Prioritization RESPONSIVE RETROFITTING Saturday, April 27, 13
  199. @BENCALLAHAN Retrofitting Techniques: Other Considerations ➡ Touch Target Area ‣

    Apple recommends minimum 44px X 44px ‣ This is based on non-retina displays ‣ Using padding instead of margin ‣ Consider increasing font-size at smaller resolutions http://www.lukew.com/ff/entry.asp?1085 http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/MobileHIG/ DesigningNativeApp/DesigningNativeApp.html#//apple_ref/doc/uid/TP40006556-CH4-SW1 RESPONSIVE RETROFITTING Saturday, April 27, 13
  200. @BENCALLAHAN Retrofitting Techniques: Other Considerations ➡ Hover States ‣ Consider

    using modernizr a { /* standard styles */ } .no-touch a:hover { /* :hover styles */ } RESPONSIVE RETROFITTING Saturday, April 27, 13
  201. @BENCALLAHAN Retrofitting Techniques: Other Considerations ➡ Contrast ‣ Try your

    site outside in the sun ‣ Try your site in bed when it’s dark ‣ Take it with you RESPONSIVE RETROFITTING Saturday, April 27, 13
  202. @BENCALLAHAN Client Interaction: Great Need Big Companies + No Mobile

    Presence + Triple Digit Growth = Anxious Clients RESPONSIVE RETROFITTING Saturday, April 27, 13
  203. @BENCALLAHAN Client Interaction: Great Need Less than Half the Cost

    + Less than Half the Time + Increased Conversions = Desperate Clients RESPONSIVE RETROFITTING Saturday, April 27, 13
  204. @BENCALLAHAN Client Interaction: When It’s Right ➡ Evaluate the Project

    ‣ Solid UX at higher widths? ‣ Semantic markup? ‣ Immediate need? ‣ Real benefit for the user? RESPONSIVE RETROFITTING Saturday, April 27, 13
  205. @BENCALLAHAN Client Interaction: Proceed Carefully Retrofitting is a step in

    the right direction. RESPONSIVE RETROFITTING Saturday, April 27, 13
  206. @BENCALLAHAN Constantly remind them of the user. Client Interaction: Proceed

    Carefully RESPONSIVE RETROFITTING Saturday, April 27, 13
  207. @BENCALLAHAN When you’re done and they ask for more... Client

    Interaction: Proceed Carefully ...push for even better experiences! RESPONSIVE RETROFITTING Saturday, April 27, 13
  208. LESSONS LEARNED Pricing ‣ As much as 100% more, initially

    ‣ Likely to be 50% more, soon after ‣ Probably never less than 25% more Saturday, April 27, 13
  209. LESSONS LEARNED Pricing ‣ Testing (labs & time) ‣ Fewer

    patterns ‣ Project management ‣ Learning curve ‣ Maintenance ‣ Content strategy Saturday, April 27, 13
  210. LESSONS LEARNED Testing ‣ You must test on real devices

    ‣ Do your development in a webkit browser ‣ Bulid libraries of your patterns Saturday, April 27, 13
  211. LESSONS LEARNED Barriers ‣ Organization barriers block collaboration ‣ Must

    have buy in from upper management ‣ Must have buy in from those doing the work ‣ It’s not easy, we’re still figuring it out Saturday, April 27, 13
  212. LESSONS LEARNED Performance ‣ Optimize or cut out images ‣

    Decrease the number of requests ‣ Gzip if you can ‣ Concat and minify CSS/JS ‣ Load CSS at the top ‣ Load JS at the bottom ‣ Follow @souders on Twitter Saturday, April 27, 13
  213. The Responsive Mindset “The truly responsive design web designer wasn’t

    born until after the launch of the iPhone. We haven’t seen his or her work yet.” Andy Clarke http://the-pastry-box-project.net/andy-clarke/2012-april-8/ Saturday, April 27, 13
  214. There are many problems left to solve. We’ll solve them

    much faster if we solve them together. Saturday, April 27, 13
  215. There are many problems left to solve. We’ll solve them

    much faster if we Saturday, April 27, 13