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

Responsive Web Applications

Responsive Web Applications

At Squares Conf.

snookca

April 27, 2017
Tweet

More Decks by snookca

Other Decks in Programming

Transcript

  1. Responsive Web
    Applications
    with Container Queries

    View Slide

  2. A talk more about
    process than code

    View Slide

  3. View Slide

  4. Beautiful
    Accounting
    Software

    View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. Goal #1
    Evolve the design

    View Slide

  9. Goal #2
    Support Multiple
    Devices

    View Slide

  10. View Slide

  11. View Slide

  12. View Slide

  13. Goal #1
    Evolve the design

    View Slide

  14. Goal #2
    Support Multiple
    Devices

    View Slide

  15. Responsive

    View Slide

  16. Responsive

    View Slide

  17. View Slide

  18. View Slide

  19. Device-specific 

    design and
    development

    View Slide

  20. Designers see a
    feature through all
    platforms

    View Slide

  21. View Slide

  22. Goal #1
    Evolve the design

    View Slide

  23. Goal #2
    Support Multiple
    Devices

    View Slide

  24. View Slide

  25. View Slide

  26. View Slide

  27. Monolithic app with
    accessible templates

    View Slide

  28. Ignored Mobile Web

    View Slide

  29. Limited Mobile App

    View Slide

  30. View Slide

  31. View Slide

  32. Each horizontal block
    is considered in the
    context of the viewport

    View Slide

  33. View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. View Slide

  38. Each page can more
    easily be art directed

    View Slide

  39. View Slide

  40. • No orders
    • One order
    • Less than one page of
    orders
    • Multiple pages of
    orders
    • Has Info Notifications
    • Tab overflow
    • Has Warning
    Notifications
    • Has limited access to
    features
    • Has different apps
    installed

    View Slide

  41. And now consider all of
    those things for
    multiple viewports

    View Slide

  42. A single page in a web
    application can have
    dozens of variations

    View Slide

  43. A component-based
    site has components
    respondingly differently
    to multiple contexts

    View Slide

  44. View Slide

  45. View Slide

  46. With media queries,
    you have to know the
    possible interplay of all
    objects

    View Slide

  47. With container
    queries, you only have
    to know the interplay
    within a single object

    View Slide

  48. No spec for
    container queries

    View Slide

  49. View Slide

  50. View Slide

  51. Declare in:
    CSS,
    HTML, or 

    JavaScript

    View Slide

  52. https://github.com/ResponsiveImagesCG/cq-demos
    .element:media( min-width:500px ) {}
    https://github.com/tysonmatanich/elementQuery
    .element[min-width~="500px"] {
    background-color: #eee;
    }

    View Slide

  53. http://elementqueries.com/
    @element ".element" and 

    (min-width: 500px) {
    .element {
    background: gold;
    }
    }

    View Slide

  54. https://github.com/tysonmatanich/elementQuery
    .element[min-width~="400px"] { }

    View Slide

  55. To parse CSS, either
    need to be on same
    domain or set up CORS

    View Slide

  56. https://github.com/Snugug/eq.js
    data-eq-pts="small: 400, medium: 600,
    large: 900"

    View Slide

  57. At HTML level, requires
    consistency of
    implementation 

    across app

    View Slide

  58. We chose JavaScript

    View Slide

  59. elements = [
    {
    "module": ".flex--2x1",
    "className":"responsiveClass",
    "minWidth": 768, "maxWidth": 1024
    }
    ]

    View Slide

  60. Going Responsive
    meant a consistent
    feature set across all
    devices

    View Slide

  61. New features
    automatically have
    cross-device support

    View Slide

  62. View Slide

  63. Went responsive in
    under a month†

    View Slide

  64. How the heck do
    you do that in a
    month?

    View Slide

  65. View Slide

  66. There’s a discernible
    delay in execution

    View Slide

  67. It’s not about the
    properties, it’s about
    the purpose.

    View Slide

  68. View Slide

  69. View Slide

  70. View Slide

  71. Tried to use grid
    classes for
    everything

    View Slide

  72. Had to write extra
    classes just to define
    responsive story

    View Slide

  73. Single purpose
    classes resulted in
    less edge cases (and
    less code!)

    View Slide

  74. Gzip minimizes
    duplicate properties
    really well

    View Slide

  75. Tables are difficult

    View Slide

  76. View Slide

  77. View Slide

  78. Avoid too much on
    the horizontal axis

    View Slide

  79. View Slide

  80. View Slide

  81. View Slide

  82. Goal #1
    Evolve the design

    View Slide

  83. Goal #2
    Support Multiple
    Devices

    View Slide

  84. Goal #1 reframed:
    Allow anybody to make
    product-wide design
    changes quickly and easily

    View Slide

  85. Problem:
    Different tech
    stacks

    View Slide

  86. View Slide

  87. Make the right
    things easy and the
    wrong things hard

    View Slide

  88. 10
    5

    View Slide

  89. Yahoo! still does a
    custom experience
    per device

    View Slide

  90. Shopify is getting rid
    of Container Queries

    View Slide

  91. View Slide

  92. View Slide

  93. View Slide





  94. View Slide

  95. .two-columns {
    display: flex;
    flex-wrap: wrap;
    }
    .col1, .col2 { flex-grow: 1; }
    .col1 {
    flex-basis: 66%;
    min-width: 360px;
    }
    .col2 {
    flex-basis: 33%;
    }

    View Slide

  96. View Slide





  97. Button


    View Slide

  98. .media-body {
    display: flex;
    flex-wrap: wrap;
    }

    View Slide

  99. .media-content {
    flex-grow: 1;
    flex-basis: 400px;
    margin-right: 20px;
    }

    View Slide

  100. .media-actions {
    align-self: center;
    margin: 20px 0;
    }

    View Slide

  101. View Slide

  102. View Slide






  103. View Slide

  104. .items {
    display: grid;
    grid-template-columns:
    repeat(auto-fit, minmax(400px, 1fr));
    }

    View Slide





  105. ...

    View Slide

  106. .box {
    display: flex;
    flex-wrap: wrap;
    }

    View Slide

  107. .box-image {
    flex-grow: 1;
    flex-shrink: 0;
    flex-basis: 150px;
    }
    .box-image > img {
    width: 100%;
    object-fit: cover;
    }

    View Slide

  108. .box-content {
    margin: 10px;
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 60%;
    }

    View Slide

  109. View Slide

  110. Designers should
    think Responsive
    before they need to.

    View Slide

  111. Container Queries
    enable faster
    development

    View Slide

  112. Use techniques to
    avoid media or
    container queries
    altogether

    View Slide

  113. http://ricg.io

    View Slide

  114. Thank you.

    http:/
    /snook.ca/

    @snookca

    View Slide