SlideShare a Scribd company logo
<change your markup,
                   change your life/>
                          <!-- not another html5 talk -->




Saturday, June 11, 2011
o/
                          garann means / @garannm / garann.com




Saturday, June 11, 2011
famous progressive
                          enhancement m&m




                                      http://www.alistapart.com/articles/understandingprogressiveenhancement/
Saturday, June 11, 2011
removing the peanut
                          == bad




                                    http://www.flickr.com/photos/npj/2681920153/
Saturday, June 11, 2011
html
                     </>   is code
                     </>   is content
                     </>   is understood by all browsers
                          </>   let’s see your fancy-pants [popular
                                programming language] do that!




Saturday, June 11, 2011
html the way nature
                           intended




Saturday, June 11, 2011
use what you have
                     </>   inline-block
                     </>   numbered lists
                     </>   navigation between pages
                     </>   editable fields
                     </>   label-input relationships
                     </>   form submission




Saturday, June 11, 2011
this
                <img src=”gozer.jpg” alt=”photo of my dog” />




Saturday, June 11, 2011
makes this




Saturday, June 11, 2011
easier than this
                <div class=”photo”>photo of my dog</div>
                <div class=”ttip”></div>
                ...
                .photo { height: 400px; text-indent: ... }
                .ttip { display: none; position: ... }
                ...
                $(“div.photo”).mouseover(function() {
                 var $t = $(this), alt = $t.text(),
                   p = $t.position(), tt = $(“div.ttip”);
                 tt.css({top:p.top,left:p.left})
                   .text(alt).show();
                })
                .mouseout(function() {
                 $(“div.ttip”).hide();
                });
Saturday, June 11, 2011
this
                <select>
                 <option>give you up</option>
                 <option>let you down</option>
                 <option>run around and desert you</option>
                 <option>make you cry</option>
                 <option>say goodbye</option>
                 <option>tell a lie and hurt you</option>
                </select>




Saturday, June 11, 2011
makes this




Saturday, June 11, 2011
easier than this
                <input type=”text” class=”dropdown” id=”my-dd”/>
                <ul class=”dropdown-list” data-dd=”my-dd”>
                 <li>give you up</li>
                 <li>let you down</li>
                 <li>run around and desert you</li>
                 <li>make you cry</li>
                 <li>say goodbye</li>
                 <li>tell a lie and hurt you</li>
                </ul>
                ...
                .dropdown-list { border: 1px solid #ccc; ...}
                ...
                $(“input.dropdown”).focus( ... ).blur( ... );
                $(“ul.dropdown-list li”).click( ... );

Saturday, June 11, 2011
don’t screw with the
                                baseline
                     </>   too much resetting
                     </>   too many generic event handlers
                     </>   too many elements doing the wrong thing
                     </>   == too much work




Saturday, June 11, 2011
markup
                <div class=”user-content”>
                 ...
                 <ul>
                   <li>A list</li>
                   <li>With stuff in it</li>
                   <li>That has bullets :O</li>
                 </ul>
                 ...
                </div>




Saturday, June 11, 2011
..made more difficult
                ul, ol { list-style-type: none; }
                ...
                .user-content ul { list-style-type: disc; }
                .user-content ul ul { list-style-type: circle; }
                ...
                .user-content ol { list-style-type: decimal; }
                .user-content ol ol { list-style-type: lower-roman; }




Saturday, June 11, 2011
overwrite only when
                         necessary
                     </>   bullets on lists
                     </>   margins on paragraphs
                     </>   onsubmit=”return false;”
                     </>   preventDefault() to use a link
                     </>   links that link somewhere
                     </>   http://necolas.github.com/normalize.css




Saturday, June 11, 2011
polyfills not plugins
                     </>   use the right solution
                     </>   build now for the future
                     </>   take advantage of html
                          </>   (even if it doesn’t exist yet)




Saturday, June 11, 2011
this
                <input type=”text” placeholder=”Type here” />




Saturday, June 11, 2011
instead of this
                <input type=”text” class=”plchldr” />
                <span class=”plchldr-txt”>Type here</span>
                ...
                $(“input.plchldr”).each(function() {
                 var $t = $(this);
                 $t.text($t.next().text())
                   .addClass(“plchldr-empty”);
                 $t.focus(function() {
                   $t.text(“”).removeClass(“plchldr-empty”)
                 });
                 ...
                });




Saturday, June 11, 2011
*except for this
                $(“.ie7 input[placeholder]”).each(function() {
                 var $t = $(this);
                 $t.text($t.attr(“placeholder”))
                   .addClass(“plchldr-empty”);
                 $t.focus(function() {
                   $t.text(“”).removeClass(“plchldr-empty”)
                 });
                 ...
                });




Saturday, June 11, 2011
design patterns for
                               markup




Saturday, June 11, 2011
homes for htmls
                     </>   includes
                          </>   unrelated single-use pieces
                     </>   server-side templates
                          </>   compositions of elements
                     </>   client-side templates
                          </>   enhancements




Saturday, June 11, 2011
once it’s on the client
                     </>   common stuff in the page
                     </>   rarer stuff on demand
                     </>   smaller pieces as js vars
                     </>   don’t load anything more than once




Saturday, June 11, 2011
all OOP everything
                     </>   js isn’t object-oriented
                          </>   but we make it that way
                     </>   machine code: also not object-oriented
                          </>   we use abstractions
                     </>   html: not object-oriented
                          </>   or even a programming language
                          </>   MOAR ABSTRACTIONS



Saturday, June 11, 2011
singleton-ish
                     </>   create markup once you need it
                     </>   save private reference
                     </>   treat rendering as instantiation
                     </>   expose specific functionality




Saturday, June 11, 2011
singleton-ish
                app.Tooltip = {
                 _tt: $(“#tooltip”),
                 render: function(txt,pos) {
                   if (!this._tt.length) {
                     this._tt = $(‘<div id=”tooltip”>’)
                      .appendTo(‘body’);
                   }
                   this._tt.text(txt);
                   this._tt.css({left:pos.left,top:pos.top}).show();
                 },
                 hide: function() {
                   this._tt.hide();
                 }
                };

Saturday, June 11, 2011
factory-ish
                     </>   get markup once it’s needed
                     </>   same function for
                          </>   render once (e.g., init)
                          </>   add more




Saturday, June 11, 2011
factory-ish
                app.Address = {
                 _html: null,
                 addNew: function(container) {
                   if (this._html) container.append(this._html);
                   else this._load(container);
                 },
                 _load: function(container) {
                   var that = this;
                   $.get(“addrTemplate.html”,function(tmpl) {
                    that._html = $.tmpl(tmpl,null);
                    that.addNew(container);
                   });
                 }
                };

Saturday, June 11, 2011
markup in your
                                  modules
                     </>   js != module
                     </>   js + css + markup == module
                          </>   data and functionality
                          </>   appearance
                          </>   actual interface




Saturday, June 11, 2011
markup in your
                            modules
                app.myObj = function () {
                 that = {
                   _props: {},
                   init: function() { ... },
                   save: function() { ... },
                   _render: function() {
                     // e.g. factory goes here
                     ...
                   }
                 };
                 return that;
                };




Saturday, June 11, 2011
markup needs its own
                     controllers
                     </>   everything is not a module
                     </>   rendering
                          </>   multiple ways
                     </>   event handling
                     </>   state management




Saturday, June 11, 2011
markup needs its own
                     controllers
                $(document).ready(function() {
                 $(“form”).hide();
                 $(“#submitThingy”).live(“click”,function() {
                   var f = $(“form”);
                   $.post(f.attr(“action”),f.serialize(),function() {
                    f.hide();
                   });
                 });
                 $(“#editButton”).live(“click”,function() {
                   $(“form”).show();
                 });
                });




Saturday, June 11, 2011
markup needs its own
                     controllers
                app.page = {
                 aForm: $(“form”),
                 init: function() {
                   this.aForm.hide();
                   $(“#editButton”).live(“click”,that.edit);
                 },
                 edit: function() {
                   this.aForm.show();
                   $(“#submitThingy”).click(that.save);
                 },
                 save: function() {
                   $.post( ... );
                 }
                };
                app.page.init();
Saturday, June 11, 2011
this is your job




Saturday, June 11, 2011
go fast or go home
                <div class=”bottomRight”>
                 <div class=”bottomLeft”>
                   <div class=”topRight”>
                    <div class=”topLeft”>
                      <p>WTF, really??</p>
                    </div>
                   </div>
                 </div>
                </div>
                ...
                <!-- plus the images, plus the css -->




Saturday, June 11, 2011
go fast or go home
                     </>   dowebsitesneedtolookexactlythesameinevery
                           browser.com/
                          </>   no
                     </>   markup weight
                     </>   non-markup weight
                     </>   speed vs. pixel perfection




Saturday, June 11, 2011
look better naked
                <strong>Please fill out this form</strong>
                <label>Name: </label>
                <input type=”text” id=”txtName” />
                <label>Email: </label>
                <input type=”text” id=”txtEmail” />
                <label>State: </label>
                <select id=”selState”>
                 <option>Texas</option>
                 <option>Not Texas</option>
                </select>




Saturday, June 11, 2011
look better naked
                <h1>Please fill out this form</h1>
                <form action=”/url” method=”POST”>
                 <label>Name:
                   <input type=”text” id=”txtName” />
                 </label><br/>
                 <label>Email:
                   <input type=”text” id=”txtEmail” />
                 </label><br/>
                 <label>State:
                   <select id=”selState”>
                    <option>Texas</option>
                    <option>Not Texas</option>
                   </select>
                 </label>
                </form>
Saturday, June 11, 2011
look better naked
                     </>   presentational markup is bad
                          </>   (it says so on the internet)
                     </>   presentational markup is good for
                           presentation
                     </>   is it in the standards?
                     </>   manage the trade-offs




Saturday, June 11, 2011
js + css shouldn’t have
                         to share
                <div class=”coolModule”>
                 <img src=”aFace.jpg” alt=”J. User” />
                 <h3>J. User said:</h3>
                 <p>What if I want coolModule to behave differently
                   sometimes? Or what if I don’t want to override
                   the style to use the same functionality with a
                   different look?</p>
                </div>




Saturday, June 11, 2011
js + css shouldn’t have
                         to share
                <div class=”comment expandable” id=”mostRecent”>
                 <img src=”aFace.jpg” alt=”J. User” />
                 <h3>J. User said:</h3>
                 <p>What if I want coolModule to behave differently
                   sometimes? Or what if I don’t want to override
                   the style to use the same functionality with a
                   different look?</p>
                </div>




Saturday, June 11, 2011
js + css shouldn’t have
                         to share
                     </>   try to give id’s to javascript
                     </>   try to give classes to css
                     </>   use different classes for js
                     </>   class names should describe
                          </>   content type for css
                          </>   behavior/module for js




Saturday, June 11, 2011
reordering shouldn’t
                              hurt
                .aModule .leftThing .littleForm .fancyButton {
                  color: #a1eeee;
                }
                ...
                $(“.leftThing div > div a.fancyButton”).click(...);
                $(“#specialThing”).delegate(“a.fancyButton”, ... );




Saturday, June 11, 2011
reordering shouldn’t
                              hurt
                     </>   wire-up within scope or module
                     </>   no long selectors
                     </>   no delegating to sketchy containers
                     </>   markup wants to be free




Saturday, June 11, 2011
you write javascript;
                        you make html


Saturday, June 11, 2011
o/
                                thanks for being super!!




                          contact: @garannm or garann@gmail.com
Saturday, June 11, 2011

More Related Content

PPTX
jQuery Presentasion
PDF
Organizing Code with JavascriptMVC
PPTX
How to increase Performance of Web Application using JQuery
PDF
永不止步的“重构”
PDF
jQuery Features to Avoid
PPTX
Unobtrusive javascript with jQuery
PPTX
jQuery Fundamentals
PDF
Stack Overflow Austin - jQuery for Developers
jQuery Presentasion
Organizing Code with JavascriptMVC
How to increase Performance of Web Application using JQuery
永不止步的“重构”
jQuery Features to Avoid
Unobtrusive javascript with jQuery
jQuery Fundamentals
Stack Overflow Austin - jQuery for Developers

What's hot (18)

PDF
XML Schemas
PDF
Using Templates to Achieve Awesomer Architecture
PDF
jQuery - Introdução
PDF
jQuery Basic API
PDF
PDF
Sequel @ madrid-rb
PPTX
JQuery
PPTX
Basics of j query
PDF
jQuery Essentials
PDF
jQuery: Nuts, Bolts and Bling
PPTX
A Rich Web experience with jQuery, Ajax and .NET
PPTX
Getting the Most Out of jQuery Widgets
PDF
Ciconf 2012 - Better than Ad-hoc
PPTX
SharePoint and jQuery Essentials
PPTX
PDF
Building Non-shit APIs with JavaScript
XML Schemas
Using Templates to Achieve Awesomer Architecture
jQuery - Introdução
jQuery Basic API
Sequel @ madrid-rb
JQuery
Basics of j query
jQuery Essentials
jQuery: Nuts, Bolts and Bling
A Rich Web experience with jQuery, Ajax and .NET
Getting the Most Out of jQuery Widgets
Ciconf 2012 - Better than Ad-hoc
SharePoint and jQuery Essentials
Building Non-shit APIs with JavaScript
Ad

Viewers also liked (6)

PPT
La neu dels pirineus power point!
PDF
所有的投資人都在找尋一個投資方法 -世紀富華變額年金保險
PPS
Es Dios
PPS
Kaya mawa South Africa
PPS
Pinturas de Anna Kostenko
PPT
Turks & Caicos Islands ~ Luxury Homes
La neu dels pirineus power point!
所有的投資人都在找尋一個投資方法 -世紀富華變額年金保險
Es Dios
Kaya mawa South Africa
Pinturas de Anna Kostenko
Turks & Caicos Islands ~ Luxury Homes
Ad

Similar to Changeyrmarkup (20)

PDF
让开发也懂前端
PDF
HTML5 and jQuery for Flex Developers
PDF
HTML5 Pearson preso
PDF
HTML5 - Yeah!
PDF
HTML XHTML HTML5
PDF
Tim stone.html5.rjug.20110316
PDF
Cleaner, Leaner, Meaner: Refactoring your jQuery
PDF
HTML 5: The Future of the Web
KEY
The Devil and HTML5
KEY
The Inclusive Web: hands-on with HTML5 and jQuery
PDF
Calloway introduction
PDF
Html5 coredevsummit
PDF
Tools For jQuery Application Architecture (Extended Slides)
PDF
HTML5 - getting started
KEY
Javascript done right - Open Web Camp III
PDF
HTML5: Building the Next Generation of Web Applications
PDF
The State of Front End Web Development 2011
PDF
In depth with html5 java2days 2010
PDF
Mansoura University CSED & Nozom web development sprint
PDF
Dr. Strangelove: or How I learned to love HTML, CSS, and Javascript
让开发也懂前端
HTML5 and jQuery for Flex Developers
HTML5 Pearson preso
HTML5 - Yeah!
HTML XHTML HTML5
Tim stone.html5.rjug.20110316
Cleaner, Leaner, Meaner: Refactoring your jQuery
HTML 5: The Future of the Web
The Devil and HTML5
The Inclusive Web: hands-on with HTML5 and jQuery
Calloway introduction
Html5 coredevsummit
Tools For jQuery Application Architecture (Extended Slides)
HTML5 - getting started
Javascript done right - Open Web Camp III
HTML5: Building the Next Generation of Web Applications
The State of Front End Web Development 2011
In depth with html5 java2days 2010
Mansoura University CSED & Nozom web development sprint
Dr. Strangelove: or How I learned to love HTML, CSS, and Javascript

Recently uploaded (20)

PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Encapsulation theory and applications.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPT
Teaching material agriculture food technology
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Electronic commerce courselecture one. Pdf
PPTX
Big Data Technologies - Introduction.pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
Spectroscopy.pptx food analysis technology
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Chapter 3 Spatial Domain Image Processing.pdf
MYSQL Presentation for SQL database connectivity
Encapsulation theory and applications.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Teaching material agriculture food technology
Spectral efficient network and resource selection model in 5G networks
The Rise and Fall of 3GPP – Time for a Sabbatical?
Diabetes mellitus diagnosis method based random forest with bat algorithm
MIND Revenue Release Quarter 2 2025 Press Release
Electronic commerce courselecture one. Pdf
Big Data Technologies - Introduction.pptx
Programs and apps: productivity, graphics, security and other tools
Spectroscopy.pptx food analysis technology
NewMind AI Weekly Chronicles - August'25 Week I
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton

Changeyrmarkup

  • 1. <change your markup, change your life/> <!-- not another html5 talk --> Saturday, June 11, 2011
  • 2. o/ garann means / @garannm / garann.com Saturday, June 11, 2011
  • 3. famous progressive enhancement m&m http://www.alistapart.com/articles/understandingprogressiveenhancement/ Saturday, June 11, 2011
  • 4. removing the peanut == bad http://www.flickr.com/photos/npj/2681920153/ Saturday, June 11, 2011
  • 5. html </> is code </> is content </> is understood by all browsers </> let’s see your fancy-pants [popular programming language] do that! Saturday, June 11, 2011
  • 6. html the way nature intended Saturday, June 11, 2011
  • 7. use what you have </> inline-block </> numbered lists </> navigation between pages </> editable fields </> label-input relationships </> form submission Saturday, June 11, 2011
  • 8. this <img src=”gozer.jpg” alt=”photo of my dog” /> Saturday, June 11, 2011
  • 10. easier than this <div class=”photo”>photo of my dog</div> <div class=”ttip”></div> ... .photo { height: 400px; text-indent: ... } .ttip { display: none; position: ... } ... $(“div.photo”).mouseover(function() { var $t = $(this), alt = $t.text(), p = $t.position(), tt = $(“div.ttip”); tt.css({top:p.top,left:p.left}) .text(alt).show(); }) .mouseout(function() { $(“div.ttip”).hide(); }); Saturday, June 11, 2011
  • 11. this <select> <option>give you up</option> <option>let you down</option> <option>run around and desert you</option> <option>make you cry</option> <option>say goodbye</option> <option>tell a lie and hurt you</option> </select> Saturday, June 11, 2011
  • 13. easier than this <input type=”text” class=”dropdown” id=”my-dd”/> <ul class=”dropdown-list” data-dd=”my-dd”> <li>give you up</li> <li>let you down</li> <li>run around and desert you</li> <li>make you cry</li> <li>say goodbye</li> <li>tell a lie and hurt you</li> </ul> ... .dropdown-list { border: 1px solid #ccc; ...} ... $(“input.dropdown”).focus( ... ).blur( ... ); $(“ul.dropdown-list li”).click( ... ); Saturday, June 11, 2011
  • 14. don’t screw with the baseline </> too much resetting </> too many generic event handlers </> too many elements doing the wrong thing </> == too much work Saturday, June 11, 2011
  • 15. markup <div class=”user-content”> ... <ul> <li>A list</li> <li>With stuff in it</li> <li>That has bullets :O</li> </ul> ... </div> Saturday, June 11, 2011
  • 16. ..made more difficult ul, ol { list-style-type: none; } ... .user-content ul { list-style-type: disc; } .user-content ul ul { list-style-type: circle; } ... .user-content ol { list-style-type: decimal; } .user-content ol ol { list-style-type: lower-roman; } Saturday, June 11, 2011
  • 17. overwrite only when necessary </> bullets on lists </> margins on paragraphs </> onsubmit=”return false;” </> preventDefault() to use a link </> links that link somewhere </> http://necolas.github.com/normalize.css Saturday, June 11, 2011
  • 18. polyfills not plugins </> use the right solution </> build now for the future </> take advantage of html </> (even if it doesn’t exist yet) Saturday, June 11, 2011
  • 19. this <input type=”text” placeholder=”Type here” /> Saturday, June 11, 2011
  • 20. instead of this <input type=”text” class=”plchldr” /> <span class=”plchldr-txt”>Type here</span> ... $(“input.plchldr”).each(function() { var $t = $(this); $t.text($t.next().text()) .addClass(“plchldr-empty”); $t.focus(function() { $t.text(“”).removeClass(“plchldr-empty”) }); ... }); Saturday, June 11, 2011
  • 21. *except for this $(“.ie7 input[placeholder]”).each(function() { var $t = $(this); $t.text($t.attr(“placeholder”)) .addClass(“plchldr-empty”); $t.focus(function() { $t.text(“”).removeClass(“plchldr-empty”) }); ... }); Saturday, June 11, 2011
  • 22. design patterns for markup Saturday, June 11, 2011
  • 23. homes for htmls </> includes </> unrelated single-use pieces </> server-side templates </> compositions of elements </> client-side templates </> enhancements Saturday, June 11, 2011
  • 24. once it’s on the client </> common stuff in the page </> rarer stuff on demand </> smaller pieces as js vars </> don’t load anything more than once Saturday, June 11, 2011
  • 25. all OOP everything </> js isn’t object-oriented </> but we make it that way </> machine code: also not object-oriented </> we use abstractions </> html: not object-oriented </> or even a programming language </> MOAR ABSTRACTIONS Saturday, June 11, 2011
  • 26. singleton-ish </> create markup once you need it </> save private reference </> treat rendering as instantiation </> expose specific functionality Saturday, June 11, 2011
  • 27. singleton-ish app.Tooltip = { _tt: $(“#tooltip”), render: function(txt,pos) { if (!this._tt.length) { this._tt = $(‘<div id=”tooltip”>’) .appendTo(‘body’); } this._tt.text(txt); this._tt.css({left:pos.left,top:pos.top}).show(); }, hide: function() { this._tt.hide(); } }; Saturday, June 11, 2011
  • 28. factory-ish </> get markup once it’s needed </> same function for </> render once (e.g., init) </> add more Saturday, June 11, 2011
  • 29. factory-ish app.Address = { _html: null, addNew: function(container) { if (this._html) container.append(this._html); else this._load(container); }, _load: function(container) { var that = this; $.get(“addrTemplate.html”,function(tmpl) { that._html = $.tmpl(tmpl,null); that.addNew(container); }); } }; Saturday, June 11, 2011
  • 30. markup in your modules </> js != module </> js + css + markup == module </> data and functionality </> appearance </> actual interface Saturday, June 11, 2011
  • 31. markup in your modules app.myObj = function () { that = { _props: {}, init: function() { ... }, save: function() { ... }, _render: function() { // e.g. factory goes here ... } }; return that; }; Saturday, June 11, 2011
  • 32. markup needs its own controllers </> everything is not a module </> rendering </> multiple ways </> event handling </> state management Saturday, June 11, 2011
  • 33. markup needs its own controllers $(document).ready(function() { $(“form”).hide(); $(“#submitThingy”).live(“click”,function() { var f = $(“form”); $.post(f.attr(“action”),f.serialize(),function() { f.hide(); }); }); $(“#editButton”).live(“click”,function() { $(“form”).show(); }); }); Saturday, June 11, 2011
  • 34. markup needs its own controllers app.page = { aForm: $(“form”), init: function() { this.aForm.hide(); $(“#editButton”).live(“click”,that.edit); }, edit: function() { this.aForm.show(); $(“#submitThingy”).click(that.save); }, save: function() { $.post( ... ); } }; app.page.init(); Saturday, June 11, 2011
  • 35. this is your job Saturday, June 11, 2011
  • 36. go fast or go home <div class=”bottomRight”> <div class=”bottomLeft”> <div class=”topRight”> <div class=”topLeft”> <p>WTF, really??</p> </div> </div> </div> </div> ... <!-- plus the images, plus the css --> Saturday, June 11, 2011
  • 37. go fast or go home </> dowebsitesneedtolookexactlythesameinevery browser.com/ </> no </> markup weight </> non-markup weight </> speed vs. pixel perfection Saturday, June 11, 2011
  • 38. look better naked <strong>Please fill out this form</strong> <label>Name: </label> <input type=”text” id=”txtName” /> <label>Email: </label> <input type=”text” id=”txtEmail” /> <label>State: </label> <select id=”selState”> <option>Texas</option> <option>Not Texas</option> </select> Saturday, June 11, 2011
  • 39. look better naked <h1>Please fill out this form</h1> <form action=”/url” method=”POST”> <label>Name: <input type=”text” id=”txtName” /> </label><br/> <label>Email: <input type=”text” id=”txtEmail” /> </label><br/> <label>State: <select id=”selState”> <option>Texas</option> <option>Not Texas</option> </select> </label> </form> Saturday, June 11, 2011
  • 40. look better naked </> presentational markup is bad </> (it says so on the internet) </> presentational markup is good for presentation </> is it in the standards? </> manage the trade-offs Saturday, June 11, 2011
  • 41. js + css shouldn’t have to share <div class=”coolModule”> <img src=”aFace.jpg” alt=”J. User” /> <h3>J. User said:</h3> <p>What if I want coolModule to behave differently sometimes? Or what if I don’t want to override the style to use the same functionality with a different look?</p> </div> Saturday, June 11, 2011
  • 42. js + css shouldn’t have to share <div class=”comment expandable” id=”mostRecent”> <img src=”aFace.jpg” alt=”J. User” /> <h3>J. User said:</h3> <p>What if I want coolModule to behave differently sometimes? Or what if I don’t want to override the style to use the same functionality with a different look?</p> </div> Saturday, June 11, 2011
  • 43. js + css shouldn’t have to share </> try to give id’s to javascript </> try to give classes to css </> use different classes for js </> class names should describe </> content type for css </> behavior/module for js Saturday, June 11, 2011
  • 44. reordering shouldn’t hurt .aModule .leftThing .littleForm .fancyButton { color: #a1eeee; } ... $(“.leftThing div > div a.fancyButton”).click(...); $(“#specialThing”).delegate(“a.fancyButton”, ... ); Saturday, June 11, 2011
  • 45. reordering shouldn’t hurt </> wire-up within scope or module </> no long selectors </> no delegating to sketchy containers </> markup wants to be free Saturday, June 11, 2011
  • 46. you write javascript; you make html Saturday, June 11, 2011
  • 47. o/ thanks for being super!! contact: @garannm or garann@gmail.com Saturday, June 11, 2011