112
y sweet & RESPONSIVE DESIGN

Sweet and Sassy Responsive Design

Embed Size (px)

Citation preview

Page 1: Sweet and Sassy Responsive Design

ysweet & RESPONSIVE DESIGN

Page 2: Sweet and Sassy Responsive Design

@minamarkham

Page 3: Sweet and Sassy Responsive Design
Page 4: Sweet and Sassy Responsive Design
Page 5: Sweet and Sassy Responsive Design

not SASS

Page 6: Sweet and Sassy Responsive Design

Ingredients

Page 7: Sweet and Sassy Responsive Design

Flexible Grids Flexible Media Media Queries

Page 8: Sweet and Sassy Responsive Design

“WHY SHOULD I CARE?”

Page 9: Sweet and Sassy Responsive Design

Presentational Classes

Page 10: Sweet and Sassy Responsive Design

Media Queries

Page 11: Sweet and Sassy Responsive Design

Conditional Classes

Page 12: Sweet and Sassy Responsive Design
Page 13: Sweet and Sassy Responsive Design

@mixins

Page 14: Sweet and Sassy Responsive Design
Page 15: Sweet and Sassy Responsive Design

Friendly

Page 16: Sweet and Sassy Responsive Design

Mobile First

Page 17: Sweet and Sassy Responsive Design

$ gem install foundation

Page 18: Sweet and Sassy Responsive Design

Flexible Grids

Page 19: Sweet and Sassy Responsive Design

<nav class="col8">

Page 20: Sweet and Sassy Responsive Design

@include grid-column(2);

Page 21: Sweet and Sassy Responsive Design

.hero-unit { @include grid-column(2); } .promo-unit { @include grid-column(4); }

Page 22: Sweet and Sassy Responsive Design

<section class="hero-unit"> <aside class="promo-unit">

Page 23: Sweet and Sassy Responsive Design

Flexible Media

Page 24: Sweet and Sassy Responsive Design

max-width: 100%

Page 25: Sweet and Sassy Responsive Design

<img class="show-for-small" src="small.jpg" />

Page 26: Sweet and Sassy Responsive Design

Interchange

Page 27: Sweet and Sassy Responsive Design

<img data-interchange="[small.jpg, (default)], [small.jpg, (small)],

[medium.jpg, (medium)]">

Page 28: Sweet and Sassy Responsive Design

<noscript> <img src="default.jpg">

</noscript>

Page 29: Sweet and Sassy Responsive Design

Media Queries

Page 30: Sweet and Sassy Responsive Design

@media

Page 31: Sweet and Sassy Responsive Design

Every time you see 320px, 480px, 768px, 1024px used as breakpoint

values, a kitten gets its head bitten off by an angel…or something like that.

– Brad Frost

Page 32: Sweet and Sassy Responsive Design

device-in

Page 33: Sweet and Sassy Responsive Design

content-out

Page 34: Sweet and Sassy Responsive Design

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

Time for a breakpoint!

– Stephen Hay

Page 35: Sweet and Sassy Responsive Design
Page 36: Sweet and Sassy Responsive Design

@mixin mq($breakpoint, $query: 'min-width', $type: 'screen') {…}

Page 37: Sweet and Sassy Responsive Design

@if $no-mqs { @if $no-mqs >= $breakpoint { @content; }}

Page 38: Sweet and Sassy Responsive Design

@else { @media #{$type} and (#{$query}: #{$breakpoint}) { @content; } }

Page 39: Sweet and Sassy Responsive Design

$small: 20em; $medium: 48em;

$large: 90em;

Page 40: Sweet and Sassy Responsive Design

@include mq($large) {…}

Page 41: Sweet and Sassy Responsive Design

usage

Page 42: Sweet and Sassy Responsive Design

.hero-unit { @include mq($small) {font-size: 1.2em;} @include mq($large) {font-size: 1.5em;} @include mq(30em) {font-size: 2em;} } .promo-unit { @include mq($small) {font-size: 1.5em;} @include mq($large) {font-size: 2em;}}

Page 43: Sweet and Sassy Responsive Design

@media and screen and (min-width: 20em) { .hero-unit {font-size: 2em;}} !

@media and screen and (min-width: 20em) { .promo-unit {font-size: 1.5em;}}

Page 44: Sweet and Sassy Responsive Design

@media and screen and (min-width: 20em) { .hero-unit {font-size: 2em;}} !

@media and screen and (min-width: 20em) { .promo-unit {font-size: 1.5em;}}

Page 45: Sweet and Sassy Responsive Design

“BUT… WHAT ABOUT CODE BLOAT?”

Page 46: Sweet and Sassy Responsive Design

…we hashed out whether there were performance implications of combining vs scattering Media Queries and came to the conclusion that the difference,

while ugly, is minimal at worst, essentially non-existent at best.

– Sam Richard

Page 47: Sweet and Sassy Responsive Design

But…

Page 48: Sweet and Sassy Responsive Design

Sass::MediaQueryCombiner

Page 49: Sweet and Sassy Responsive Design

.hero-unit { @include mq(20em) {font-size: 2em;} @include mq(30em) {font-size: 2.5em;}} .promo-unit { @include mq(20em) {font-size: 1.5em;} @include mq(50em) {font-size: 2em;}}

Page 50: Sweet and Sassy Responsive Design

@media and screen and (min-width: 20em) { .hero-unit {font-size: 2em;} .promo-unit {font-size: 1.5em;}}

Page 51: Sweet and Sassy Responsive Design

$ gem install sass-media_query_combiner

Page 52: Sweet and Sassy Responsive Design

The Catch

Page 53: Sweet and Sassy Responsive Design

Ruby 1.9.2 Untested on large-scale

Rearranges CSS

Page 54: Sweet and Sassy Responsive Design

If your CSS doesn’t look like this, you’re doing it wrong.

Page 55: Sweet and Sassy Responsive Design

“But… What about IE?”

Page 56: Sweet and Sassy Responsive Design

This is why we can’t have nice things

Page 57: Sweet and Sassy Responsive Design

$no-mqs: false default! $old-ie: false default!

Page 58: Sweet and Sassy Responsive Design

@mixin old-ie { @if $old-ie { @content; }}

Page 59: Sweet and Sassy Responsive Design

$no-mqs: 48em $old-ie: true

Page 60: Sweet and Sassy Responsive Design

.foobar { @include old-ie { ... } }

Page 61: Sweet and Sassy Responsive Design

Baking it Up

Page 62: Sweet and Sassy Responsive Design

.promo-unit { @include grid-column(4); @include mq(20em) {font-size: 2em;} @include mq(30em) {font-size: 2.5em;} font-size: 1.3em; margin-top: 1em; float: left;}

Page 63: Sweet and Sassy Responsive Design

Quick Demo

Page 64: Sweet and Sassy Responsive Design

Recap

Page 65: Sweet and Sassy Responsive Design

Mixins FTW! Dynamic Content Modularize Styles

Page 66: Sweet and Sassy Responsive Design

Resources

Page 67: Sweet and Sassy Responsive Design

sass-lang.com

Page 68: Sweet and Sassy Responsive Design

foundation.zurb.com

Page 69: Sweet and Sassy Responsive Design

susy.oddbird.net/

Page 70: Sweet and Sassy Responsive Design

neat.bourbon.io/

Page 71: Sweet and Sassy Responsive Design

thesassway.com

Page 72: Sweet and Sassy Responsive Design

sassmeister.com

Page 73: Sweet and Sassy Responsive Design
Page 74: Sweet and Sassy Responsive Design

thanks!

mina.so/sassy-rwd

@minamarkham

Page 75: Sweet and Sassy Responsive Design

7 Habits of Highly Effective Media Queries http://bradfrostweb.com/blog/post/7-­‐habits-­‐of-­‐highly-­‐effective-­‐media-­‐queries/  

Responsive Web Design in Sass: Using Media Queries in Sass 3.2 http://thesassway.com/intermediate/responsive-web-design-in-sass-using-media-queries-in-sass-32

Yes, you really can make complex webapps responsive http://adioso.com/blog/2013/06/responsifying-adioso/

Sass & Media Queries | http://sasscast.tumblr.com/post/38673939456/sass-and-media-queries Sass Style Guide | http://css-tricks.com/sass-style-guide/

Sass Globbing | https://github.com/chriseppstein/sass-globbing Sass Media Query Combiner |https://github.com/aaronjensen/sass-­‐media_query_combiner

Media Query Test | http://aaronjensen.github.io/media_query_test/ Media Query Mixin | https://gist.github.com/Snugug/2490750

credits & such

Page 76: Sweet and Sassy Responsive Design
Page 77: Sweet and Sassy Responsive Design
Page 78: Sweet and Sassy Responsive Design
Page 79: Sweet and Sassy Responsive Design
Page 80: Sweet and Sassy Responsive Design
Page 81: Sweet and Sassy Responsive Design
Page 82: Sweet and Sassy Responsive Design

Namespacing

Page 83: Sweet and Sassy Responsive Design

the almighty ampersand

Page 84: Sweet and Sassy Responsive Design

.btn { &:hover {…} }

Page 85: Sweet and Sassy Responsive Design

.btn:hover {…}

Page 86: Sweet and Sassy Responsive Design

.btn { form & {…} }

Page 87: Sweet and Sassy Responsive Design

form .btn {…}

Page 88: Sweet and Sassy Responsive Design

&- or &_

Page 89: Sweet and Sassy Responsive Design

.btn { &-secondary {…} &_secondary {…} }

.btn

Page 90: Sweet and Sassy Responsive Design

.btn-secondary {…}

.btn_secondary {…}

Page 91: Sweet and Sassy Responsive Design

nesting

Page 92: Sweet and Sassy Responsive Design

inception rule

Page 93: Sweet and Sassy Responsive Design

< 3 levels deep

Page 94: Sweet and Sassy Responsive Design

.btn { &-secondary { &-icon {…} } }

secondary.btn

Page 95: Sweet and Sassy Responsive Design

.btn-secondary {…}

.btn-secondary-icon {…}

Page 96: Sweet and Sassy Responsive Design

@media

Page 97: Sweet and Sassy Responsive Design

@mixin mq($breakpoint, $query: 'min-width', $type: 'screen') {…}

Page 98: Sweet and Sassy Responsive Design

.promo-title { @include mq(20em) {font-size: 2em;} @include mq(30em) {font-size: 2.5em;} @include mq(50em) {font-size: 3em;} font-size: 1.3em; margin-top: 1em; float: left; }

Page 99: Sweet and Sassy Responsive Design

.btn {…}

.btn-large {…} !

<div class=“btn btn-large”>

Page 100: Sweet and Sassy Responsive Design

@extend all the things!

Page 101: Sweet and Sassy Responsive Design

.btn {…}

.btn-large {@extend .btn;} !

<div class=“btn-large”>

Page 102: Sweet and Sassy Responsive Design

%btn {…} .btn-large {@extend %btn;} !

<div class=“btn-large”>

Page 103: Sweet and Sassy Responsive Design

don’t @extend between modules

Page 104: Sweet and Sassy Responsive Design

mina.so/sassy-starter

Page 105: Sweet and Sassy Responsive Design
Page 106: Sweet and Sassy Responsive Design

refactor all the things!

Page 107: Sweet and Sassy Responsive Design
Page 108: Sweet and Sassy Responsive Design

refactor all the things?

Page 109: Sweet and Sassy Responsive Design

Baby steps

Page 110: Sweet and Sassy Responsive Design

extract components create variables

apply naming conventions nest and @extend

Page 111: Sweet and Sassy Responsive Design

mina.so/smacss-menu

Page 112: Sweet and Sassy Responsive Design

Before: 161 lines After: 97 lines