responsive web design (rwd) with sass+compass

37
#RWD WITH SASS+COMPASS Come On Get Sassy Sunday, July 22, 12

Upload: nyccamp

Post on 01-Sep-2014

5.771 views

Category:

Technology


4 download

DESCRIPTION

My presentation is available for download from here: http://snugug.com/musings/nyc-camp-presentationMobile matters. There are more than 4x the number mobile devices activated each day than there babies born and the question of how to effectively deliver your content to everyone, regardless of how they get there, should be the most important question for product owners and developers today. Enter responsive design.Responsive design comes from the idea that there is not a mobile web and a desktop web but instead a single, unified web. The most obvious new design paradigm to come from this new thinking are websites that are not built on a fixed width grid but rather one that expands and contracts depending on how much screen real estate is available to the current user. To be able to do this, however, you want a powerful set of tools at your disposal in order to aid in you in the large amount of work needed to build a responsive design. Enter Sass+CompassSass 3.2 introduces a number of new features designed specifically to aid in responsive design including the ability to modularize your media queries and call them on-demand or to write media queries based on calculations in your Sass files. Compass v0.12 improves upon Compass's already impecable mixin and function libraries with a large update to Compass's Image Sprite functionality, a traditionally hard technique made drop-dead easy and essential to the Mobile First Responsive Design philosophy that should be taken when designing websites.Compass also allows us to tap into all a community of extensions to make your lives easier, including some that are specifically designed to help us with responsive design, including Susy for fluid grids, Breakpoint and Respond-To to name and manage media queries, and RWD Kickstart to get you up and running from scratch with best practices quickly as quickly as possible.Drupal 7 also provides us with some capability to greatly reduce the development costs for our mobile-first development, including some great projects including HTML5 Project for clean, semantic HTML5 markup, the Borealis Suite for semantic blocks and mobile-first responsive images, and Drupal 7's awesome new AJAX system to assist in lazy loading content, reducing download size and speed.

TRANSCRIPT

Page 1: Responsive Web Design (RWD) with Sass+Compass

#RWD WITH SASS+COMPASSCome On Get Sassy

Sunday, July 22, 12

Page 3: Responsive Web Design (RWD) with Sass+Compass

WHAT IS THIS SESSION?

I WILL:

Give you an overview of some tools and techniques for RWD

Show you how to use Sass+Compass in new and exciting ways for RWD and Progressive Enhancement

I WON’T:

Try and convince you to start building Responsively

Teach the basics of Sass+Compass

Show you how to compile Sass with Drupal

Sunday, July 22, 12

Page 4: Responsive Web Design (RWD) with Sass+Compass

WHAT FEATURES DO YOU NEED FOR RESPONSIVE WEB DESIGN?

As outlined in Ethan Marcotte’s Phrase-Coining A List Apart article, Responsive Web Design needs the three following things:

Fluid Grids

Media Queries

Flexible Media

Sunday, July 22, 12

Page 5: Responsive Web Design (RWD) with Sass+Compass

WHAT PRINCIPLES DO YOU NEED FOR RESPONSIVE WEB DESIGN?

Design your websites for Mobile First

Make Content and Navigation primary concerns over visual flair and social sharing

Embrace Progressive Enhancement and build on standard Web technologies (HTML/CSS/JS)

Design on a grid, ideally one specific to your design

Design in Browser

Sunday, July 22, 12

Page 6: Responsive Web Design (RWD) with Sass+Compass

You can’t articulate fluidity on paper.

Brad Frost

Sunday, July 22, 12

Page 7: Responsive Web Design (RWD) with Sass+Compass

THE TOOLS OF THE TRADE

Sass+Compass

Susy Compass Extension

Breakpoint / Respond-to Compass Extensions

Toolkit Compass Extension

Modernizr

Text Editor (I like TextMate or Sublime Text)

Modern Web Browser (I like Google Chrome)

LiveReload

Adobe Shadow + Devices

Illustrator for creating vector graphics

Sunday, July 22, 12

Page 8: Responsive Web Design (RWD) with Sass+Compass

STUFF TO AVOID

Browser Plugins (like Flash and Silverlight)

Single browser prefixes (just -webkit, just -moz, etc…)

CSS Frameworks

The phrase “Pixel Perfect”

Photoshop

Designing around known devices

Device Detection

Sunday, July 22, 12

Page 9: Responsive Web Design (RWD) with Sass+Compass

The web is an inherently unstable medium

Ethan Marcotte

Sunday, July 22, 12

Page 11: Responsive Web Design (RWD) with Sass+Compass

The point of creating [responsive] sites is to create functional (and hopefully optimal) user experiences for a

growing number of web-enabled devices and contexts.

Brad Frost

Sunday, July 22, 12

Page 12: Responsive Web Design (RWD) with Sass+Compass

Repeat after me: Responsive Web Design isn’t about current devices and known unknowns, it’s

about future devices and unknown unknowns.Donald Rumsfeld

Sunday, July 22, 12

Page 13: Responsive Web Design (RWD) with Sass+Compass

Your device detection is bad and you should feel bad

Dr. John A. Zoidberg

Sunday, July 22, 12

Page 14: Responsive Web Design (RWD) with Sass+Compass

BEFORE YOU GO ANYWHERE, LET’S CHEAT AT CSS

@import 'compass';

* { @include box-sizing('border-box'); }// From Paul Irish's Blog Post

Sunday, July 22, 12

Page 15: Responsive Web Design (RWD) with Sass+Compass

SUSYFLUID GRIDS FULL OF WIN

> gem install susy --pre

@import "susy";

$total-columns: 12;$column-width: 4em;$gutter-width: 1em;$grid-padding: $gutter-width;

require 'susy'

Sunday, July 22, 12

Page 16: Responsive Web Design (RWD) with Sass+Compass

SUSYFLUID GRIDS FULL OF WIN

#page-wrapper { @include container;}

#main { @include span-columns(8);}

#sidebar-first { @include span-columns(4 omega);}

Sunday, July 22, 12

Page 17: Responsive Web Design (RWD) with Sass+Compass

SUSYFLUID GRIDS FULL OF WIN

#page-wrapper { *zoom: 1; max-width: 59em; _width: 59em; margin-left: auto; margin-right: auto; padding-left: 1em; padding-right: 1em;}

#page-wrapper:after { content: ""; display: table; clear: both;}

#main { width: 66.102%; float: left; margin-right: 1.695%; display: inline;}

#sidebar-first { width: 32.203%; float: right; margin-right: 0; #margin-left: -1em; display: inline;}

Sunday, July 22, 12

Page 18: Responsive Web Design (RWD) with Sass+Compass

SUSYFLUID GRIDS FULL OF WIN

#user-name { @include span-columns(3, 4);}

#social { @include span-columns(1 omega, 4);}

Sunday, July 22, 12

Page 19: Responsive Web Design (RWD) with Sass+Compass

SUSYFLUID GRIDS FULL OF WIN

#user-name { width: 73.684%; float: left; margin-right: 5.263%; display: inline;}

#social { width: 21.053%; float: right; margin-right: 0; #margin-left: -1em; display: inline;}

Sunday, July 22, 12

Page 20: Responsive Web Design (RWD) with Sass+Compass

BREAKPOINTMEDIA QUERIES MADE EASY

> gem install breakpoint

@import "breakpoint";

require 'breakpoint'

$breakpoint-default-media: 'all';$breakpoint-default-feature: 'min-width';$breakpoint-default-pair: 'width';$breakpoint-to-ems: false;

Sunday, July 22, 12

Page 21: Responsive Web Design (RWD) with Sass+Compass

Start with the small screen first, then expand until it looks like shit.

TIME FOR A BREAKPOINT!Stephen Hay

Sunday, July 22, 12

Page 22: Responsive Web Design (RWD) with Sass+Compass

BREAKPOINTMEDIA QUERIES MADE EASY

$main-nav-inline: 482px;$main-nav-inline-right: 823px;

#main-nav { clear: both; li { display: block; @include breakpoint($main-nav-inline) { display: inline-block; } } @include breakpoint($main-nav-inline-large) { @include span-columns(9 omega); }}

Sunday, July 22, 12

Page 23: Responsive Web Design (RWD) with Sass+Compass

BREAKPOINTMEDIA QUERIES MADE EASY

#main-nav { clear: both;}

#main-nav li { display: block;}

@media (min-width: 482px) { #main-nav li { display: inline-block }}

@media (min-width: 823px) { #main-nav { width: 74.576%; float: right; margin-right: 0; #margin-left: -1em; display: inline; }}

Sunday, July 22, 12

Page 24: Responsive Web Design (RWD) with Sass+Compass

BREAKPOINTMEDIA QUERIES MADE EASY

#main-nav { clear: both;}

#main-nav li { display: block;}

@media (min-width: 30.125em) { #main-nav li { display: inline-block }}

@media (min-width: 51.438em) { #main-nav { width: 74.576%; float: right; margin-right: 0; #margin-left: -1em; display: inline; }}

$breakpoint-to-ems: true;

Sunday, July 22, 12

Page 25: Responsive Web Design (RWD) with Sass+Compass

RESPOND-TOSEMANTIC BREAKPOINT NAMING

$breakpoints: 'inline main navigation' (482px), 'inline main navigation, floated right' (823px);

#main-nav { clear: both; li { display: block; @include respond-to('inline main navigation') { display: inline-block; } @include respond-to('inline main navigation, floated right') { @include span-columns(9 omega); } }}

Sunday, July 22, 12

Page 26: Responsive Web Design (RWD) with Sass+Compass

TOOLKITFOR MODERN WEB DEVELOPMENT

> gem install toolkit

require 'toolkit'

Sunday, July 22, 12

Page 27: Responsive Web Design (RWD) with Sass+Compass

A NOTE ON RESPONSIVE MEDIA

Sass will not magically give you Responsive Media. Neither will Compass, Modernizr, any CSS or JS Framework, or even Drupal. For Responsive Media to be a reality, we need a new browser based standard. There are currently some proposed solutions for Images, and Apple is forging ahead with a non-standard solution in iOS6, but until then, everything is a hack.

There are some tricks you can do in CSS to make media Fluid, however, and Sass rocks at this.

Sunday, July 22, 12

Page 28: Responsive Web Design (RWD) with Sass+Compass

TOOLKITFOR FLUID MEDIA

// Included Automaticallyimg { max-width: 100%; height: auto;}

.foo { @include scale-elements;}

@import "toolkit/fluid-media";

.bar { @include scale-elements($ratio: 4/3);}

Sunday, July 22, 12

Page 29: Responsive Web Design (RWD) with Sass+Compass

TOOLKITFOR FLUID MEDIA

.foo, .bar { position: relative; height: 0;}

.foo > *, .bar > * { display: block; position: absolute; width: 100%; height: 100%; top: 0; margin: 0; padding: 0;}

.foo { padding-top: 56.25%; width: 100%;}

.bar { padding-top: 75%; width: 100%;}

Sunday, July 22, 12

Page 30: Responsive Web Design (RWD) with Sass+Compass

TOOLKITFOR PROGRESSIVE ENHANCEMENT

Download a custom build of Modernizr

@import "toolkit/pe";

.foo { @include enhance-with('touch') { min-height: 44px; } @include degrade-from('touch') { min-height: 20px; }}

Sunday, July 22, 12

Page 31: Responsive Web Design (RWD) with Sass+Compass

TOOLKITFOR PROGRESSIVE ENHANCEMENT

.touch .foo { min-height: 44px;}.no-touch .foo, .no-js .foo { min-height: 20px;}

Sunday, July 22, 12

Page 32: Responsive Web Design (RWD) with Sass+Compass

TOOLKITFOR PROGRESSIVE ENHANCEMENT

$user-bar-icons: "assets/user-bar/*.png";@include sprite-map-generator($user-bar-icons);

.bar { @include replace-text-pe($user-bar-icons, 'user');}

.baz { @include replace-text-pe($user-bar-icons, 'necktie', $inline-svg: false);}

Sunday, July 22, 12

Page 33: Responsive Web Design (RWD) with Sass+Compass

TOOLKITFOR PROGRESSIVE ENHANCEMENT

.bar, .baz { text-indent: 110%; white-space: nowrap; overflow: hidden;}

.no-svg .bar, .no-js .bar, .no-svg .baz, .no-js .baz { background-image: url('../images/assets/user-bar-s01cf12a717.png'); background-repeat: no-repeat;}

.bar { width: 24px; height: 21px;}.svg .bar { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0…'); background-size: 24px 21px;}.no-svg .bar, .no-js .bar { background-position: 0 -18px;}

.baz { width: 8px; height: 27px;}.svg .baz { background-image: url('../images/assets/user-bar/necktie.svg?1341407937'); background-size: 8px 27px;}.no-svg .baz, .no-js .baz { background-position: 0 -39px;}

> create images/assets/user-bar-s01cf12a717.png

Sunday, July 22, 12

Page 34: Responsive Web Design (RWD) with Sass+Compass

TOOLKITTO KICKSTART YOUR DEVELOPMENT

Existing Projectrequire 'toolkit'

> compass install toolkit- or -> compass install toolkit/respond-to

New Project> compass create <my_project> -r toolkit --using toolkit- or -> compass create <my_project> -r toolkit --using toolkit/respond-to

Sunday, July 22, 12

Page 35: Responsive Web Design (RWD) with Sass+Compass

TOOLKITTO KICKSTART YOUR DEVELOPMENT

Compass

Toolkit

Susy

Either Breakpoint or Respond-to

Border Box Box Model

Development Modernizr Build with yepnope

loader.js to hold yepnope tests

hammer.js for touch events

Sass stylesheets and default, empty partials

Sunday, July 22, 12

Page 36: Responsive Web Design (RWD) with Sass+Compass

DID I MENTION…

Everything you just saw? Yah, it’s all backend independent. You can use it anywhere, with anything, for any project. Sass Rocks.

Sunday, July 22, 12

Page 37: Responsive Web Design (RWD) with Sass+Compass

GO FORTH, BE RESPONSIVE, AND

MAY THE SASS BE WITH YOUPeople to Follow:@Snugug, @Compass, @TheSassWay, @GoTeamSass, @CodingDesigner, @ScottKellum, @ItsMissCS, @ChrisEppstein, @nex3, @beep, @lukew, @brad_frost, @globalmoxie

Things to Read:http://snugug.com/rwdhttp://snugug.com/pe-patternhttp://snugug.com/breakpointhttp://snugug.com/toolkithttp://snugug.com/rwd-mobilehttp://snugug.com/munich

If you liked this talk, I’m Sam Richard. If not, I was Mason Wendell.

If you have questions, come to my BoFs tomorrow or find me. I’m happy to talk.

Please rate this session (and all of the others)! Thank you!

Sunday, July 22, 12