<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Eddie Welker.com &#187; web design</title>
	<atom:link href="http://www.eddiewelker.com/category/web-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.eddiewelker.com</link>
	<description>Hahaha.</description>
	<lastBuildDate>Mon, 28 Nov 2011 21:39:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>High Performance CSS code design</title>
		<link>http://www.eddiewelker.com/2011/04/06/high-performance-css-code-design/</link>
		<comments>http://www.eddiewelker.com/2011/04/06/high-performance-css-code-design/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 05:44:25 +0000</pubDate>
		<dc:creator>Eddie</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[oocss]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://www.eddiewelker.com/?p=330</guid>
		<description><![CDATA[In the last few years much emphasis has been placed on web performance issues. Browser vendors have optimized JavaScript engines, JavaScript libraries have been honed, and content delivery has been improved. Unfortunately, CSS has received less attention. Developers have been advised how to optimally transfer CSS files, and instructed to use CSS shorthand, but very [...]]]></description>
			<content:encoded><![CDATA[<p>In the last few years much emphasis has been placed on web performance issues.  Browser vendors have optimized JavaScript engines, JavaScript libraries have been honed, and content delivery has been improved.  Unfortunately, CSS has received less attention.  Developers have been advised how to optimally transfer CSS files, and instructed to use CSS shorthand, but very little has targeted CSS code itself.</p>
<p><a href="http://www.stubbornella.org/">Ms. Nicole Sullivan</a> is among those looking to improve CSS code.  She has been promoting &#8220;<a href="https://github.com/stubbornella/oocss">OOCSS</a>,&#8221; or &#8220;<a href="https://github.com/stubbornella/oocss">Object Oriented CSS</a>,&#8221; her methodology for how to design and refactor CSS<sup><a href="#n1">1</a></sup>.   She has collected a number of best practices for architecting a CSS framework.   The benefits are simple: CSS will perform better, become more modular, as well as being grounded with a consistent API, making it easier to learn and use.  This is accomplished by reducing the file size and complexity of our CSS.</p>
<p>While many of these techniques can be considered common practice for experienced CSS programmers, implementing them can be difficult.  The art is in analyzing trade-offs and picking the optimal path.  That said, these rules are not for everyone, or every site.  It all boils down to deciding if the site&#8217;s performance gain is greater than the time it takes to learn and use the techniques.</p>
<h3>Useful for sites with</h3>
<ul>
<li>Many pages</li>
<li>A common visual and structural design</li>
<li>Critical performance requirements</li>
</ul>
<h3>Less useful for sites with</h3>
<ul>
<li>A few pages or just one page</li>
<li>Varying design (possibly &#8220;portfolio&#8221; or design sites)</li>
<li>Few performance concerns</li>
</ul>
<p>So how do we get started?  We go hunting for bad code smells.  In Chapter 3 of <a href="http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672"><em>Refactoring: Improving the Design of Existing Code</em></a>, <a href="http://martinfowler.com/">Martin Fowler</a> and <a href="http://twitter.com/kentbeck">Kent Beck</a> coin the phrase &#8220;code smell,&#8221; meaning &#8220;structures in the code that suggest the possibility of refactoring.&#8221;  Simply put, we go looking for chunks of code that our intuition tells us could be cleaned.  In the chapter heading, Grandma Beck is quoted (then talking about child-rearing), &#8220;If it stinks, change it.&#8221;  We&#8217;ll take a more formal approach to finding these code smells, going from easy to difficult.   First, we&#8217;ll sniff around the CSS selectors, and then move onto the CSS properties.  Finally we&#8217;ll look for visual design patterns that can direct the structure of our CSS.</p>
<h2>Selectors</h2>
<p>Selectors are both the easiest place to find code smells in CSS and the easiest to correct.  Three big code smells tend to stink up CSS selectors; unused selectors, location-based selectors, and overly specific selectors.  Each contributes significantly to increased CSS file size.</p>
<h3>Unused Selectors</h3>
<p>Code that does nothing is obviously wasteful, and is the first candidate for removal.  Tools like dust me selectors that can spider a site can identify all of the unused or orphaned styles that your stylesheets still contain.</p>
<h3>Location-based Selectors</h3>
<p>Location-based selectors prohibit code reuse because they are intended to isolate styles for a specific part of the page, yet frequently used HTML components are often reused in a different context.  Therefore, its counterproductive to hard-code that initial context into a selector.</p>
<p>Location-based selectors are easy to spot.  The pattern is a long list of selectors that starts with the same initial selector, as follows (assuming the source is reasonably ordered).</p>
<p><code>.sidebar {…}<br />
.sidebar .nav {…}<br />
.sidebar .nav .box {…}<br />
.sidebar .nav .box .header {…}<br />
.sidebar .nav .box .body p {…}</code></p>
<p>Because each selector chain starts with a location-based selector, none of them are reusable.  What if we add a new group of pages that use the same .box structure but need to be placed in the content, header, or footer?  A novice would add more comma separated selector chains, but that amounts to copying code.<br />
<code><br />
.sidebar .nav .box, .content .nav .box, .header .nav .box, .footer .nav .box {…}</code></p>
<p>The correct approach is to factor out the common functionality while ditching the location-based rules.  Now the styles can be reused regardless of the box location.</p>
<p><code>.box {…}<br />
.box .header {…}<br />
.box .footer {…}</code></p>
<p>Why not break the .box and .header/.footer chains apart?   Here the .box class encapsulates the .header and .footer behaviors, hiding these names from the global scope and allowing the &#8220;header&#8221; and &#8220;footer&#8221; classnames to be used elsewhere.</p>
<p>To those looking ahead to HTML5, you should already recognize how this pattern can be applied to section elements containing header and footer elements.</p>
<h3>Varying specificity</h3>
<p>By 2010, everyone should be aware that adding &#8220;style&#8221; attributes directly to HTML elements is a bad idea (and code smell).  What about everything else?</p>
<p>Selectors that contain properties set as <code>!important</code> should be avoided because their specificity makes them difficult to override.</p>
<p>Browser selector hacks like <code>* html {…}</code> should be avoided because they tend to require redefinition of both the problem properties and all other properties, leading to duplicate code.  When hacks are needed, use property hacks like the star (IE7 and less) and underscore (IE6 and less) instead.</p>
<p>Because IDs can be used only once per-page, selectors containing IDs can typically only be used in a specific place on each page.  IDs are great when you need to grab something from the DOM in JavaScript, but avoid them in your CSS.</p>
<p>Element selectors should be used to provide element defaults, especially when redefining styles previously zeroed out by a reset stylesheet.  Using them for anything but defaults tends to yield repetitive CSS.</p>
<p>Keeping selector specificity as similar as possible makes it easy to use classes that only define differences.</p>
<p>HTML:</p>
<p><code>
<div>Default (black) box</div>
<p></code></p>
<p><code><!--because the selectors are the same specificity, it's easy to add multiple classes --></p>
<div>Green box</div>
<div> Red box</div>
<p></code></p>
<p>CSS:</p>
<p><code>.box { padding:1em; color:black; border: 1px solid black; }</code></p>
<p><code> </code></p>
<p><code>/* simple selectors because the specificity is equal to the base ".box" object's selector */<br />
.green_border { border: 2px solid green; }<br />
.red_border { border: 2px solid red; }</code></p>
<h2>Properties</h2>
<p>Properties appear in CSS more frequently than selectors, and as a result their quantity masks their code smells a bit.  However we can exploit their frequency to find repetitive code<sup><a href="#n2">2</a></sup>.</p>
<h3>Margin: 0 and padding: 0</h3>
<p>Resetting the margin and padding properties to zero is extremely common.  Using a reset stylesheet will help you do this everywhere in one place.  A reset will zero all margin and padding properties, leaving only the non-zero values left to set.  If you find that your CSS contains more instances setting the margin or padding to another value (for example, 1em), you can edit your reset or add a global rule setting this alternate default.</p>
<p>Before:</p>
<p>(my.css)</p>
<p><code>.portlet {margin:0; padding:0; … }<br />
.header {margin:0; padding:0; … }<br />
.footer {margin:0; padding:0; …}<br />
</code></p>
<p>After:</p>
<p>(Reset.css)</p>
<p><code>div {margin:0; padding:0}</code></p>
<p>(my.css)</p>
<p><code>.portlet { … }<br />
.header { … }<br />
.footer { … }</code></p>
<h3>Float</h3>
<p>Overuse of the float property is a code smell indicating repetition in placing items on a page.  Use of a grid structure will reduce duplication caused by object placement.  Rather than have each element float itself, a grid structure will do this all one time only.</p>
<h3>Font-size</h3>
<p>It&#8217;s rare for sites to use multiple sizes of body text on one page, or site wide.  Therefore most font-size properties are likely used to define header-like text sizes.   <a href="http://www.stubbornella.org/content/2010/07/01/top-5-mistakes-of-massive-css/" target="_self">Ms. Sullivan does an excellent job pointing out</a>, that of a finite number of font-sizes that can be used on a page, there are even fewer that a user can differentiate (for example the difference between 15px and 16px browser font sizes).  Font-size therefore is usually a code smell for repeating headers.</p>
<h3>Mingling box model, visual formatting model, and presentational properties</h3>
<p>The CSS specification groups similar properties into sections.  The Box model is the most famous (because it had previously been the most infamous).  Everyone is familiar with its margins, paddings, and borders building on widths and heights.  The Visual formatting model uses the display, position, float, clear, and z-index properties to dictate the layout of the boxes in the document.  The CSS specification makes no mention of &#8220;presentational properties,&#8221; but that&#8217;s a term I use to include color, background, font, and text properties that style the boxes or their contents.</p>
<p>Separating selectors along these lines allows for greater code reuse.  The box model properties are the most easily re-used of the three.  It is not uncommon for a number of boxes on the page to share the same properties, so moving these properties into a new class will allow you to apply these styles in a consistent and efficient manner.  The visual formatting properties are typically less likely to be reused, therefore separating them from the boxes will allow greater reuse of both the visual formatting and box properties.</p>
<p>It must be noted, however, that there will be cases where the same box model properties will often be paired with the same visual formatting properties. In that case it is perfectly acceptable to leave them coupled together.</p>
<p>Presentational properties are the least likely set to be reused. This isn&#8217;t surprising because they are typically dependent on the contents of the boxes.  That makes these the most logical candidate for extraction, because doing so will increase the usability of the remaining properties.</p>
<p>Keep in mind we are still trying to build a consistent API for others to use.  Creating new patterns of box model, visual formatting model, and presentational property oriented classes will give future developers a wide range of flexibility to mix-and-match these classes while styling new elements.</p>
<h2>Visual design patterns</h2>
<p>In the last section, we looked at the effects of mingling box model, visual formatting model, and presentational properties.  Searching for visual design patterns is the next logical step, albeit a complicated one.</p>
<p>This technique is tricky.  Unlike the others, this has the additional restriction in that it is usually only suitable for finished designs.  Attempting this on an in-development design may send you on the road toward madness.  Additionally, it doesn&#8217;t lend itself very well to searching code.  In effect we are looking for repeating groups of CSS properties… but these properties can typically span multiple selectors!  So instead of looking to the code for patterns, we look for patterns in the other direction, at the visual output.</p>
<p>This technique also takes the longest, since it requires looking at all of the pages on a site as a whole.</p>
<h3>Headers</h3>
<p>Finding headers on the page should be fairly simple, and to be honest, you&#8217;ve probably taken care of this searching for repeated font-size properties as described above.  However a visual inventory may convince you that your headers are more alike than different, and you may find an opportunity to tighten the differences.  You may even decide to dump one of the variations—even better.</p>
<h3>Portlets</h3>
<p>In a portal or information dashboard oriented design, each chunk of output, whether contained in a box/window type structure, or structure-less (think Apple&#8217;s Dashboard) is bound to share common characteristics. In the structure-less design you can focus on extracting the visual formatting properties into reusable classes defining position.  Box or window contained portlets can be constructed using a combination of box model, and presentational properties.  And if you&#8217;re using a dashboard design, these chunks of output can probably be arranged using a grid structure.</p>
<h3>Grids</h3>
<p>Alignment is the key to identifying patterns where grids can be applied.  Take five steps back from your monitor and look at the top-level page objects.  If some of these objects are loosely aligned, they can probably be included into a grid.  Sketch the grid and the objects within on a piece of paper.  Now walk three steps forward, and look at the each individual section in your wireframe.  If you identify objects aligned in your sections, you may be primed for using a nested grid.  Sketch that grid (have you realized that you&#8217;re wireframing yet?).  Keep going until you&#8217;ve exhausted all of the sections you&#8217;ve drawn (have you realized you&#8217;re using recursion yet?)</p>
<p>Then start the tedious process of tearing out the previous code and replacing with a grid structure.. The end product will be far more efficient and easier to maintain.  (Which grid should you use? Which every you choose!  As long as you are using one your code will be cleaner and more efficient.)</p>
<h3>&#8220;Media Blocks&#8221;</h3>
<p>One pattern that Ms. Sullivan found frequently on the Facebook site is something she has coined a &#8220;Media Block,&#8221; which <a href="http://www.stubbornella.org/content/2010/06/25/the-media-object-saves-hundreds-of-lines-of-code/">she defines</a> as &#8220;an image to the left, with descriptive content to the right.&#8221;  Simply put, this is just a compound object, which is slightly more abstract than the previous examples.  She analyzes these media blocks in two steps.  First define their constant functional properties (what they do), then identify the variables in the design (parts could fluctuate in certain conditions).</p>
<p>Not all sites will contain objects like these, but if yours does, identifying the patterns will help to reduce code duplication and promote code reuse.</p>
<h3>More</h3>
<p>This short list couldn&#8217;t hope to represent the entirety of the visual design patterns that can be found on a website.  That&#8217;s why a site inventory is required.  If you find similar patterns repeating multiple times, this is a chance for you to optimize.</p>
<h2>Results</h2>
<p>Once these rules have been applied, your file size should be smaller, so less information has to be downloaded, making the page load faster.  The overall complexity of your CSS rules should also be reduced, meaning the browser will have less redundant rules to apply, and your page should load faster.  And finally, you will have defined an API for common CSS across your site, making it easier for developers to create new pages.</p>
<hr />
<h2>Footnotes</h2>
<p><sup><a id="n1">1</a></sup> Personally, I find the choice of the &#8220;OOCSS&#8221; or &#8220;Object Oriented CSS&#8221; name both poor and misleading.  To call something &#8220;Object Oriented&#8221; when the metaphor doesn&#8217;t fit (CSS has no data per se, and it certainly has no methods) is confusing, especially when the audience is likely to be familiar with the term.  To then give your CSS library the same name and overload the term twice obscures a very useful set of CSS refactoring methods.</p>
<p><sup><a id="n2">2</a></sup> This can be accomplished with the Unix tool grep, a powerful text searching utility.  It is also possible to accomplish this through your editor, as long as it supports searching multiple files at once.  It is especially useful to be able to count occurrences across files.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eddiewelker.com/2011/04/06/high-performance-css-code-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Check-in</title>
		<link>http://www.eddiewelker.com/2009/08/03/check-in/</link>
		<comments>http://www.eddiewelker.com/2009/08/03/check-in/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 02:42:19 +0000</pubDate>
		<dc:creator>Eddie</dc:creator>
				<category><![CDATA[bikes]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[me]]></category>
		<category><![CDATA[photography]]></category>
		<category><![CDATA[pubmed]]></category>
		<category><![CDATA[summer]]></category>

		<guid isPermaLink="false">http://www.eddiewelker.com/?p=247</guid>
		<description><![CDATA[Not a technical post, but a personal update.  I promised over a week ago.]]></description>
			<content:encoded><![CDATA[<p>Not a technical post, but a personal update.  I promised over a week ago. <a title="Air Me by eddie.welker, on Flickr" href="http://www.flickr.com/photos/ed_welker/3753939045/"><img class="alignright" style="border: 0pt none; margin-left: 1em; margin-bottom: 1em;" src="http://farm4.static.flickr.com/3494/3753939045_227dd6b275_m.jpg" alt="Air Me" width="240" height="240" /></a></p>
<p>I&#8217;ve been exceptionally busy at work, we&#8217;re beginning to finish up a much needed, <a href="http://www.library.drexel.edu/blogs/drexelbioscience/?tag=nih">much</a> <a href="http://laikaspoetnik.wordpress.com/2009/04/01/pubmed-changes-at-the-front-door/">discussed</a> by <a href="http://eagledawg.blogspot.com/2009/05/pubmed-update-now-online-now-share-your.html">librarians</a>, redesign of <a href="http://pubmed.gov">PubMed</a>.  We&#8217;ve put a ton of user interaction effort into this project, as well as a good sprinkling of graphic design (watch out, I even did some parts!)  I think people will be really positive about these new changes.</p>
<p>[Just for the record, if someone happens to stumble upon this from the librarian community, yes, release date is still end of summer, and yes, there will be a Beta period, so no need to worry about a short timeline to update your class or instructional slides.  We do listen!]</p>
<p>It&#8217;s also been exciting that we&#8217;ve brought a few new people on board.  Always exciting to have new hires, despite the fact that it&#8217;s a lot of work&#8230; and all of the trainings I have to do.</p>
<p>What else&#8230;  I&#8217;m planning on attending the <a href="http://delvenyc.com/">DelveUI masterclasses</a> this week in Brooklyn.  It will be interesting to see what some of the heads of state have to say about the field.  I&#8217;m a little excited, this masterclass format isn&#8217;t the usual boring no-content fluff that you hear at most conferences. I get the feeling that there will actually be code present!  My thanks to the lovely <a href="http://www.sushiandrobots.com/">Jina &#8220;Sushi &amp; Robots&#8221; Bolton</a> for the opportunity for the free ticket.</p>
<p>I&#8217;ve been reading&#8230; way too many things.  I&#8217;ve been reading <a href="http://www.packtpub.com/learning-jquery-1.3/book">Learning jQuery 1.3</a>, <a href="http://www.packtpub.com/user-interface-library-for-jquery/book">jQuery UI 1.6</a>, and <a href="http://www.amazon.com/gp/product/1933988355?ie=UTF8&amp;tag=eddwelsblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1933988355">jQuery in Action</a> and you&#8217;ll see the reviews of those two books very soon.  (Can you tell that we&#8217;ve switched to jQuery at NCBI?)  I&#8217;m a little behind with that reading, but I&#8217;ve been working hard on other things.  Additionally, I went on an Amazon spree, and started reading <a href="http://www.amazon.com/gp/product/0596153813?ie=UTF8&amp;tag=eddwelsblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596153813">Programming the Semantic Web</a>, <a href="http://www.amazon.com/gp/product/0954300653?ie=UTF8&amp;tag=eddwelsblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0954300653">An Introduction to Lambda Calculi for Computer Scientists</a>, <a href="http://www.amazon.com/gp/product/0192801422?ie=UTF8&amp;tag=eddwelsblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0192801422">To Mock a Mockingbird</a>, <a href="http://www.amazon.com/gp/product/0262062666?ie=UTF8&amp;tag=eddwelsblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0262062666">101 Things I learned in Architecture School</a>, <a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;tag=eddwelsblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0735619670">Code Complete 2</a>.   Last but not least, I&#8217;ve also been reading any photography book that I can get my hands on.</p>
<p>Yes, that is a lot of books, and I haven&#8217;t had much time for them.  I&#8217;ve been working hard at work, and I want to relax a bit when I come home.  Once summer ends, things will return to a slightly more regular pace.  I&#8217;ve been learning so much on the job, that I&#8217;m not very worried about falling behind in reading.</p>
<p>It&#8217;s the summer, so I have been riding&#8230; not a ton, but some.  I wish I had time to do more, but I don&#8217;t have time for everything.  I have been taking long-ish 7 mile rides home, and then going out to play some basketball with my roommates.  That&#8217;s a good time.  As soon as I finish this post, I am going to go and fix my fixie&#8230; <a href="http://www.flickr.com/photos/ed_welker/499906278/">my favorite Bianchi</a>&#8230; I somehow mashed the pedals hard enough to shear off part of the thread of both the crank and the pedal, so there go the original cranks and some lovely <a href="http://sheldonbrown.com/harris/pedals.html#platform">MKS Sylvan Track Pedals</a> that were on there. I&#8217;ve got a new, generic replacement crankset and new Sylvan&#8217;s.  Also, I&#8217;m moving from a 42&#215;15 to a 46&#215;17, but with the change in crank length (172.5 down to 165mm) I&#8217;ll have the same gear ratio as before.  I&#8217;m interested in seeing how the shorter cranks feel.</p>
<p>Not to mention <a href="http://www.letour.fr/us/homepage_horscourseTDF.html">le Tour</a> this year&#8230; I was captivated.</p>
<p><a title="Fish by eddie.welker, on Flickr" href="http://www.flickr.com/photos/ed_welker/3686013626/"><img class="alignright" style="border: 0pt none; margin: 1em 0em 1em 1em;" src="http://farm3.static.flickr.com/2670/3686013626_b14883b58f_m.jpg" alt="Fish" width="160" height="240" /></a>And then <a href="http://www.flickr.com/photos/ed_welker/">I&#8217;ve been taking some photos</a>.  Still have been good on my New Year&#8217;s resolution of taking a photo every day&#8230; with the exception of Jan 20 (yes, Inauguration Day, the day more people in my Washington DC area took photos than any other this year).</p>
<p>I also got an iPhone.  While <a href="http://www.flickr.com/photos/ed_welker/sets/72157620701884345/">I was in California</a> for <a href="http://www.flickr.com/photos/ed_welker/sets/72157620771003449/">Joel and Olga&#8217;s wedding</a>, I dropped my phone of more than 5 years on a rug, and the antenna that had been barely holding on for a few months finally fell off completely.  I had previously told myself that I would try to wait until my phone broke before getting a new one. So I was going to buy one at the first sight of antenna problems, until it was suggested that I wait for a new version.  Well, my phone&#8217;s demise and the new version&#8217;s release coincided, so now I have a 3GS.  Really the thing I like most is having my calendar with me at all times.  The only other part I really like is the speaker, so I can listen to music while on my bike for the first time.</p>
<p>Alright, so that&#8217;s about that for the moment. Go out and do something summer-y, that&#8217;s what I&#8217;m doing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eddiewelker.com/2009/08/03/check-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review of “Web Form Design, Filling in the Blanks”</title>
		<link>http://www.eddiewelker.com/2008/08/04/review-of-%e2%80%9cweb-form-design-filling-in-the-blanks%e2%80%9d/</link>
		<comments>http://www.eddiewelker.com/2008/08/04/review-of-%e2%80%9cweb-form-design-filling-in-the-blanks%e2%80%9d/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 02:33:45 +0000</pubDate>
		<dc:creator>Eddie</dc:creator>
				<category><![CDATA[accessibility]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[luke wroblewski]]></category>
		<category><![CDATA[web form design]]></category>

		<guid isPermaLink="false">http://edwardwelker.com/2008/08/04/review-of-%e2%80%9cweb-form-design-filling-in-the-blanks%e2%80%9d/</guid>
		<description><![CDATA[“Forms suck.  If you don’t believe me, try to find people who like filling them in.” Are you kidding, I paid for a book that begins like that?  My first reaction was that I could have written that!  Well I didn’t write it, and I also feel that I got my money’s worth out of [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>“Forms suck.  If you don’t believe me, try to find people who like filling them in.”</p></blockquote>
<p>Are you kidding, I paid for a book that begins like that?  My first reaction was that I could have written that!  Well I didn’t write it, and I also feel that I got my money’s worth out of <a href="http://www.rosenfeldmedia.com/books/webforms/"><em>Web Form Design, Filling in the Blanks</em></a>, by <a href="http://www.lukew.com/">Luke Wroblewski</a>.<img src="http://farm3.static.flickr.com/2215/2456180445_223bf5342c_m.jpg" title="Cover of Web Form Design" alt="Cover of Web Form Design" align="right" border="0" height="240" hspace="10" vspace="10" width="160" /></p>
<p>Forms are hard.  I don’t think I need to mention how hard they can be for users… nor do I need to mention what’s at stake if a user finds your form too difficult.  Every web developer who doesn’t have his/her head in the clouds should know that.  Forms, however, are also very difficult to create&#8230; <em>correctly!</em>  A well designed form requires a lot of careful, detailed thought.  You have so much to consider… usability issues, accessibility issues, and you usually don’t have anything to go on except for your personal experience.  This book will help you methodically approach form design, and give you the experience of an expert to guide your decisions.</p>
<p><em>Web Form Design</em> is useful, because Mr. Wroblewski takes a very detailed approach to each aspect of form design.  Within each chapter, he thoroughly analyzes the major elements to consider when designing a form.   For example, the chapter on “Actions” is devoted to action items such as submit and cancel buttons.  One of the sub-sections discusses where to place these items on the page.  The author first presents the reader with the following image demonstrating all of the reasonable placements for the submit and cancel actions.</p>
<p><img src="http://farm3.static.flickr.com/2238/2366430953_c7366dc3eb.jpg" title="Figure from Web Form Design" alt="Figure from Web Form Design" border="0" height="500" hspace="10" vspace="10" width="281" /></p>
<p>Using eye-tracking and usability data, he then discusses the pros and cons of each arrangement, without ever deciding one is better then all others.  This is key because it lets the reader, knowledge in hand, decide his/her own course of action.</p>
<p>The book is especially valuable because of the user data, eye-tracking data, and case studies presented within. Mr. Wroblewski’s backs his reasoning with either a summary of these tests or with an example culled from his experiences.  He reinforces his points with a number of demonstration images, all available from the <a href="http://www.flickr.com/photos/rosenfeldmedia/sets/72157604272550634/">book’s flickr page</a>.  Then he includes a short “best practices” section to close each chapter, outlining what was discussed.  These can be used almost as checklists.  Interspersed in the text are sidebars which present real-life examples and perspectives from numerous field authorities.</p>
<p><em>Web Form Design</em> is written well enough so that it can be easily read within a few hours.  However, it’s real place is beside you the next time that you have to design or write a form, so that you will be able to make intelligent design decisions, rather than just best guesses.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eddiewelker.com/2008/08/04/review-of-%e2%80%9cweb-form-design-filling-in-the-blanks%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

