Refresh Oklahoma City
http://refreshokc.org http://960.gs
Nathan Smith = Principal UI Architect @projekt202
we make software make sense
http://sonspring.com http://projekt202.com
Relax. Please dont try to take notes feverishly.
Email http://sonspring.com/contact Twitter http://twitter.com/nathansmith Slides http://slideshare.net/nathansmith/refresh-okc
Feel free to email me later, and download these slides as well. These links are at the end, too.
Before we get started, lets agree: Code is not magic
An important discipline when using any framework is striving to understand the underlying language. In other words, use it as a tool Not a black box.
Veteran ninjas master a variety of tools Not just one.
FRAMEWORK
BY H AND
Use a framework as an extension of yourself Not just as a crutch.
http://imdb.com/title/tt1046173
Christian Heilmann developer evangelist at Mozilla Our craft is becoming a commodity and the people in charge dont care about the quality of the markup, CSS or how short our JavaScript is. What matters is how fast you can get it to market, how many people it reaches and how cheaply it can be built.
http://thinkvitamin.com/code/web-development-is-moving-on-are-you
Matthew Anderson designer at OneHub.com
Point being, choose your battles wisely. In the time you could argue the relevance of naming conventions like these I just built a 16-column layout.
http://onehub.com/past/2009/5/13/why-we-chose-960gs-css-framework
Allow me to clear up a (potential) misconception...
Truth be told, I dont really care if you use the 960 Grid System or not. I tell people who get all emotional over semantics (ID & classes have none) that it takes less energy to not use something than to argue about it.
It also takes considerably more energy to do research. Being ignorant is blissful and easy!
Semantics can reside in microformats class names, because parsers are built to look for them specically
http://microformats.org
The W3Cs Semantic Web doesnt involve CSS
http://www.w3.org/DesignIssues/Semantic.html
CSS gets no at the Semantic Web party The term Semantic Web refers to W3Cs vision of the Web of linked data. Semantic Web technologies enable people to create data stores on the Web, build vocabularies, and write rules for handling data. Linked data are empowered by technologies such as RDF, SPARQL, OWL, and SKOS. World Wide Web Consortium (W3C)
http://www.w3.org/standards/semanticweb
So lets get this straight...
Semantics live here
<tag class="peanut_butter jelly">Yummy content</tag>
Not here
... Except in the case of microformats.
Jeff Crofts Frameworks for Designers article
http://www.alistapart.com/articles/frameworksfordesigners
Jeff Croft was never one to mince words...
http://jeffcroft.com/blog/2007/nov/17/whats-not-love-about-css-frameworks
Dont be a Luddite (Note: I was with Sass/SCSS) The Luddites were a social movement of British textile artisans in the nineteenth century who protested often by destroying mechanized looms against the changes produced by the Industrial Revolution, which they felt were leaving them without work and changing their way of life.
http://en.wikipedia.org/wiki/Luddite
Added semantics via role="..." & HTML5 tags <header role="banner"> <nav>...</nav> </header> <div role="main"> <article> <section>...</section> </article> <aside>...</aside> </div> <footer role="contentinfo"> ... </footer>
http://adactio.com/journal/4267 http://dev.w3.org/html5/html4-differences/#new-elements
Added semantics via role="..." & HTML5 tags <header role="banner"> <nav>...</nav> </header> <div role="main"> <article> <section>...</section> </article> <aside>...</aside> </div> <footer role="contentinfo"> ... </footer>
http://adactio.com/journal/4267 http://dev.w3.org/html5/html4-differences/#new-elements
#anyways #whatevs #whocares #sobored
Um, okay, but why grids?
My design skillz are so awesome, Ive never needed to use grids.
For design thats really, really, ridiculously good looking
Also, to do other things good too.
http://en.wikipedia.org/wiki/Zoolander
FYI: I dont especially love CSS.
The reason I create and use CSS frameworks is because I hate doing mundane tasks repeatedly (yawn). Id rather be working in JavaScript.
JavaScript books Ive worked on...
Co-author Tech editor Tech editor
jQueryEnlightenment.com
JavaScriptEnlightenment.com
oreilly.com/catalog/9780596159788
All involving Cody Lindley, who has been a JavaScript mentor to me: http://codylindley.com
Front-end is the opposite of a mythological hydra There are many dragons sharing the same public facade in web development: ColdFusion, Java, .NET, Perl, PHP, Ruby, Python... To render in a browser, it all has to pass through HTML. So, I think that front-end is a good place to be! :)
http://en.wikipedia.org/wiki/Lernaean_Hydra
#anyways #whatevs #whocares #sobored
But I digress.
Ill forever be known as the 960 guy. But I guess thats not so bad... Right?
Whats this whole 960.gs thing all about?
The premise of the system is ideally suited to rapid prototyping, but it would work equally well when integrated into a production environment. There are printable sketch sheets, design templates, and CSS les that have identical measurements.
960 SHIps WITH PrINtABlE *.PDf SKeTCH SHeEts, BeCAUSe sOmEtIMeS THe BeSt DEsIGn ToOl IS No ToOl At ALl!
WE OfTeN JUMp RIgHT INtO DEsIGn Or CODe SoFtWARe, BUt SKeTCHInG THIngS OUt CAN Be MUCH mOrE eFfICIEnT.
WHEn I WOrKED AS AN InFoRmATIoN ARCHItECt, SoMe Of mY BeSt WOrK WAS DOnE SImPlY USInG PeN AnD PApEr.
Dogfooding = When you use your own product
The 960 Grid System is an effort to streamline web development by providing commonly used dimensions, based on a width of 960 pixels. There are two variants: 12 and 16 columns, which can be used separately or in tandem. If you like, theres also a 24-column version.
NOM, NOM, NOM I use 960 regularly! :)
12, 16, and 24 columns available by default
The 12-column grid is divided into portions that are 60 pixels wide. The 16-column grid consists of 40 pixel increments. Each column has 10 pixels of margin on the left and right, which create 20 pixel wide gutters between columns. The 24-column grid is also included. It consists of columns 30 pixels wide, with 10 pixel gutters, and a 5 pixel buffer on each side of the container.
#anyways #whatevs #whocares #sobored
Show me teh codez!
Typical use case for a 12-column grid
<div class="container_12"> <div class="grid_4"> I am 1/3 wide. </div> <div class="grid_4"> I am 1/3 wide. </div> <div class="grid_4"> Me too! </div> <div class="clear"></div> <!-- Yuck, I know --> <div class="grid_6"> I am 1/2 wide. </div> <div class="grid_6"> I am 1/2 wide. </div> </div>
Typical use case for a 12-column grid
<div class="container_12"> <div class="grid_4"> I am 1/3 wide. </div> <div class="grid_4"> I am 1/3 wide. </div> <div class="grid_4"> Me too! </div> <div class="clear"></div> <!-- Yuck, I know --> <div class="grid_6"> I am 1/2 wide. </div> <div class="grid_6"> I am 1/2 wide. </div> </div>
Nested grids & Column rearrangement
<div class="container_12"> <div class="grid_6 push_6"> <div class="grid_2 alpha"> First nested grid. </div> <div class="grid_2"> Middle. No special class. </div> <div class="grid_2 omega"> Last nested grid. </div> </div> <div class="grid_6 pull_6"> Last in markup, first visually. </div> </div>
Nested grids: alpha = rst, omega = last (per row)
<div class="container_12"> <div class="grid_6 push_6"> <div class="grid_2 alpha"> First nested grid. </div> <div class="grid_2"> Middle. No special class. </div> <div class="grid_2 omega"> Last nested grid. </div> </div> <div class="grid_6 pull_6"> Last in markup, first visually. </div> </div>
Column rearrangement (SEO maybe)
<div class="container_12"> <div class="grid_6 push_6"> <div class="grid_2 alpha"> First nested grid. </div> <div class="grid_2"> Middle. No special class. </div> <div class="grid_2 omega"> Last nested grid. </div> </div> <div class="grid_6 pull_6"> Last in markup, first visually. </div> </div>
http://960.gs/demo.html
http://960.gs/demo.html
Have xed-width grids become too pervasive?
http://twitter.com/jcroft/status/49880667374354433
Have xed-width grids become too pervasive?
http://twitter.com/nathansmith/status/49882179379015680
Many more possibilities via grid generators
http://grids.heroku.com
Templates available for your weapon of choice...
Acorn
Fireworks
Flash
InDesign
GIMP
Inkscape
Illustrator
OmniGrafe
Photoshop Expression Design
QuarkXPress
Visio
Adobe Fireworks 960.gs extension (Photoshop too)
Grids can accelerate progress while maintaining order
http://www.ickr.com/photos/meckert75/3732780382
Michael Phelps following a painted line at the bottom of a pool doesnt make him a less talented swimmer.
http://livinggallery.oneindia.in/main.php?g2_itemId=32903
Our best practices are killing us Nicole Sullivan
Three best practice myths... 1. Dont add any extra elements 2. Dont add classes 3. Use descendent selectors exclusively
http://www.slideshare.net/stubbornella/our-best-practices-are-killing-us
Our best practices are killing us Nicole Sullivan
Three best practice myths... 1. Dont add any extra elements 2. Dont add classes 3. Use descendent selectors exclusively
http://www.slideshare.net/stubbornella/our-best-practices-are-killing-us
Take all rules in development with a grain of salt
Sensibly revised... 1. Add extra elements sparingly 2. Add classes thoughtfully 3. Avoid descendent selector kludge...
How would you style these <a> links?
<ul class="menu"> <li> <a href="/">Home</a> </li> <li> <a href="/about">About</a> </li> </ul>
Use only the selectors that are necessary.
.menu a { /* Terse = Get er done! */ } ul.menu li a { /* Too heavy = Overkill. */ }
Still true: Smart CSS aint always sexy CSS
http://www.digital-web.com/articles/smart_CSS_aint_always_sexy_CSS
Inspiration: Khoi Vinn
http://www.subtraction.com/2004/12/31/grid-computi
Inspiration: Cameron Moll
http://www.cameronmoll.com/archives/2006/12/gridding_the_960
Inspiration: Cameron Moll
http://www.cameronmoll.com/archives/2006/12/gridding_the_960
Inspiration: Olav Bjrky
http://bjorkoy.com/2007/08/launch-blueprint-a-css-framework
Inspiration: Brandon Schauer
http://www.adaptivepath.com/ideas/e000863
http://www.adaptivepath.com/ideas/e000863
Inspiration: Mark Boulton
http://www.markboulton.co.uk/journal/comments/ve-simple-steps-to-designing-grid-systems-part-1
Frameworks are kind of like sheet music. They are organized, and can keep teams on the same page.
http://www.ickr.com/photos/avlxyz/3280803912
Like jazz, responsive design is contextual. No two approaches are exactly the same.
Responsive Web Design - using @media queries
http://www.alistapart.com/articles/responsive-web-design
Hicksdesign.co.uk = Beautiful responsive web design
http://hicksdesign.co.uk
Media queries for mobile arent a magic bullet
http://www.cloudfour.com/css-media-query-for-mobile-is-fools-gold
LifeChurch.tv - Separate site for mobile & desktop
http://m.lifechurch.tv http://www.lifechurch.tv
Percentage-based grid, screenshot in Firefox 4.0
http://host.sonspring.com/yui3_grid
310px
150px
Percentage-based grid, screenshot in Chrome 10.0
http://host.sonspring.com/yui3_grid
309px
149px
960s 24 column grid = Exact multiples of 10
http://960.gs/demo_24_col.html
Whither: Grid framework or Responsive design?
VS
Doing a xed-width design using a grid framework is relatively easy. Whereas, doing a responsive design that looks solid at every resolution is multivariate and there is not (yet) an automated, foolproof solution.
Pet peeve: Use tomorrows technology, today!
The mere fact were even able to use it today makes it todays technology. As designers and developers, its easy to get so caught up in wanting to use the latest and greatest (to a fault) that we forget to try and tackle present-day problems with proven technologies.
Where media queries fall short, JavaScript shines
http://twitter.com/igorskee/status/52152273178079232
Smart JS hackers = Context-aware image sizing
http://lamentgroup.com/lab/responsive_images_experimenting_with_context_aware_image_sizing
Symphony + Jazz = Crazy ~ Like playing jazz ute
http://en.wikipedia.org/wiki/Anchorman:_The_Legend_of_Ron_Burgundy
Adapt.js - Serve 960s (or any) CSS dynamically
http://adapt.960.gs
Note: Not an endorsement, just a Twitter link...
http://twitter.com/zeldman/status/59432011693166592
For what its worth, a lot of people linked to it...
How to use Adapt.js = A human-readable cong
<script> // Edit to suit your needs. var ADAPT_CONFIG = { // Where is your CSS? path: 'assets/css/', // false = Only run once, when page first loads. // true = Change on window resize and page tilt. dynamic: true, // Optional callback... myCallback(i, width) callback: myCallback, // First range entry is the minimum. // Last range entry is the maximum. // Separate ranges by "to" keyword. range: [ '0px to 760px = mobile.css', '760px to 980px = 720.css', '980px to 1280px = 960.css', '1280px to 1600px = 1200.css', '1600px to 1920px = 1560.css', '1920px = fluid.css' ] }; </script>
How to use Adapt.js = A human-readable cong
<script> // Edit to suit your needs. var ADAPT_CONFIG = { // Where is your CSS? path: 'assets/css/', // false = Only run once, when page first loads. // true = Change on window resize and page tilt. dynamic: true, // Optional callback... myCallback(i, width) callback: myCallback, // First range entry is the minimum. // Last range entry is the maximum. // Separate ranges by "to" keyword. range: [ '0px to 760px = mobile.css', '760px to 980px = 720.css', '980px to 1280px = 960.css', '1280px to 1600px = 1200.css', '1600px to 1920px = 1560.css', '1920px = fluid.css' ] }; </script>
What about adding JavaScript page-weight?
845 bytes
Minied, Adapt.js is less than 1 KB. (Allow me to put into perspective)
60 40 pixel JPG @ 70% quality = 908 bytes
908 bytes
My son, guring out that the wind can spin pinwheels
http://www.ickr.com/photos/nathansmith/5625332824
Or, as my dad used to tell me as a kid...
Dont worry about problems smaller than a gnats backside.
Note: If the extra HTTP request for JS is a concern, the le size is small enough to just include inline in the documents <head>.
Not to go all Ron Burgundy on you, but... Kind of a [small] deal I didnt set out to write a terse snippet of JavaScript. Thats just how easy the problem was to solve. Seriously though, consider what will be best for your project. Nothing is a magic bullet. Code is just code.
http://en.wikipedia.org/wiki/Anchorman:_The_Legend_of_Ron_Burgundy
To reiterate: I dont care if you use 960.gs or Adapt.js
In fact, heres a slew of alternatives you might like better. You should explore every option, and choose one that makes sense to you. Or, if nothing seems like a good t, Id encourage you to create one!
Sencha Touch
http://sencha.com/touch
Dojo Mobile
http://dojotoolkit.org/features/mobile
jQuery Mobile
http://jquerymobile.com
http://jeromeetienne.github.com/jquery-mobile-960
Blueprint CSS Framework
http://blueprintcss.org
HTML5 Boilerplate - Mobile
http://html5boilerplate.com/mobile
Less Framework 4
http://lessframework.com
1140 CSS Grid
http://cssgrid.net
The Square Grid
http://thesquaregrid.com
Respond.js - Parses CSS3 @media queries
https://github.com/scottjehl/Respond
And the list goes on...
But you get the point. There are plenty of options out there to choose from.
(I just want to mention two more things)
Forms = Quite possibly, the worst part of web design
To prevent developers from wasting countless hours on styling dumb form elements
Note: I wasted countless hours styling dumb form elements, so you dont have to!
Its been awhile in the making...
Future plans include a tutorial on how to use jQuery to add styling hooks to form elements, since I know from experience that is no cup of tea.
Source = Me when announcing 960.gs in 2008! Excuse = New HTML5 elements set me back :)
http://sonspring.com/journal/960-grid-system
I nally distilled my approach to forms
http://formalize.me
I prefer using Sass to expedite writing CSS
I didnt think I would like Sass, but I do. Oh, and if youre going to use Sass, use Sass, not SCSS.
http://sass-lang.com
Questions? Comments? Hate mail? :)
Email http://sonspring.com/contact Twitter http://twitter.com/nathansmith Slides http://slideshare.net/nathansmith/refresh-okc
Thanks for attending my presentation! Feel free to email or say hi on Twitter.