<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-519312822620270063</id><updated>2012-02-16T11:54:27.436-08:00</updated><category term='calendar'/><category term='linq'/><category term='navigation'/><category term='tools'/><category term='javascript'/><category term='regedit'/><category term='ajax'/><category term='lists'/><category term='chart'/><category term='validation'/><category term='jquery'/><category term='typography'/><category term='css'/><category term='sql'/><category term='resources'/><category term='business rules'/><category term='errors'/><category term='optimization'/><category term='forms'/><category term='winxp'/><category term='design'/><category term='layout'/><category term='webdev'/><category term='data'/><category term='utilities'/><title type='text'>Dev Notes</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-1370487898447912779</id><published>2009-10-27T13:21:00.001-07:00</published><updated>2009-10-27T13:27:06.665-07:00</updated><title type='text'>Format DateTime in GridView BoundField or TemplateField</title><content type='html'>&lt;div id="codeSnippetWrapper"&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;Eval has a second parameter which lets you specify the string format. The BoundField has a DataFormatString property:&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;pre class="csharpcode" id="codeSnippet"&gt;&amp;lt;asp:TemplateField&amp;gt;&lt;br /&gt;    &amp;lt;ItemTemplate&amp;gt;&lt;br /&gt;        &amp;lt;asp:Label ID=&lt;span class="str"&gt;&amp;quot;ExampleDate&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; Text=&lt;span class="str"&gt;'&amp;lt;%# Eval(&amp;quot;ExampleDate&amp;quot;, &amp;quot;{0:MM/dd/yyyy}&amp;quot;) %&amp;gt;'&lt;/span&gt;&amp;gt;&amp;lt;/asp:Label&amp;gt;&lt;br /&gt;    &amp;lt;/ItemTemplate&amp;gt;&lt;br /&gt;&amp;lt;/asp:TemplateField&amp;gt;&lt;br /&gt;&amp;lt;asp:BoundField DataField=&lt;span class="str"&gt;&amp;quot;ExampleDate&amp;quot;&lt;/span&gt; HeaderText=&lt;span class="str"&gt;&amp;quot;Example Date 2&amp;quot;&lt;/span&gt; DataFormatString = &lt;span class="str"&gt;&amp;quot;{0:d}&amp;quot;&lt;/span&gt; /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-1370487898447912779?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/1370487898447912779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=1370487898447912779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/1370487898447912779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/1370487898447912779'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2009/10/format-datetime-in-gridview-boundfield.html' title='Format DateTime in GridView BoundField or TemplateField'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-2857329422516774183</id><published>2009-10-27T13:04:00.001-07:00</published><updated>2009-10-27T13:04:00.644-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='data'/><category scheme='http://www.blogger.com/atom/ns#' term='linq'/><title type='text'>LINQ to SQL</title><content type='html'>&lt;p&gt;Grouping in LINQ to SQL is nothing like SQL. It returns an IEnumerable of &lt;a href="http://msdn.microsoft.com/en-us/library/bb344977.aspx"&gt;IGrouping&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-2857329422516774183?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/2857329422516774183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=2857329422516774183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/2857329422516774183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/2857329422516774183'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2009/10/linq-to-sql.html' title='LINQ to SQL'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-332104954872416319</id><published>2009-10-27T08:40:00.001-07:00</published><updated>2009-10-27T12:56:29.372-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='business rules'/><category scheme='http://www.blogger.com/atom/ns#' term='validation'/><title type='text'>Validation and Business Rules</title><content type='html'>&lt;p&gt;From Rocky Lhotka’s Business Objects pg 40: “A lot of business logic involves the enforcement of &lt;em&gt;validation rules&lt;/em&gt;. The fact that one date must be later than another date is a validation rule. Some validation rules involve calculations and others are merely toggles. You can think about validation rules as being either broken or not. And when one or more rules are broken the object is invalid.&lt;/p&gt;  &lt;p&gt;A similar concept is the idea of &lt;em&gt;business rules&lt;/em&gt; that might alter the state of the object. The fact that a given piece of text data must be all uppercase is a business rule. The calculation of one property value based on other property values is a business rule. Most business rules involve some level of calculation… Business rules typically alter the state of the object and usually don’t enforce validation at the same time.”&lt;/p&gt;  &lt;p&gt;A comment on Ayende Rahien’s blog &lt;a href="http://ayende.com/Blog/archive/2007/04/02/Input-Validation-vs.Business-Rules-Validation.aspx"&gt;article&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;“Name is not empty is an invariant of the entity. Not a business rule because it is not something that can happen (yes, I know about bad data and no constraints).”&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-332104954872416319?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/332104954872416319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=332104954872416319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/332104954872416319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/332104954872416319'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2009/10/validation-and-business-rules.html' title='Validation and Business Rules'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-2137056966050371073</id><published>2007-12-21T11:14:00.001-08:00</published><updated>2007-12-21T11:14:32.733-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>[CSSVault] Create Stunning Drop Down Calendars Quickly</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;img alt="Calendar" src="http://cssvault.com/blog/wp-content/uploads/2007/11/calendar.png"&gt; &lt;p&gt;Need a calendar date picker for your web application? &lt;a href="http://www.electricprism.com/aeron/calendar/"&gt;Calendar&lt;/a&gt; is a JavaScript class that automagically creates a graphical calendar date picker for your date fields. The sample calendars are gorgeous, complete with drop shadows and drag and drop capability. The experimental calendar even features a graphic that changes every month — much like a real-life calendar would have. &lt;p&gt;It uses the Mootols JavaScript library. It is very flexible and customizable and comes complete with documentation. &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://cssvault.com/blog/2007/12/04/create-stunning-drop-down-calendars-quickly/"&gt;[CSSVault] Create Stunning Drop Down Calendars Quickly&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-2137056966050371073?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/2137056966050371073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=2137056966050371073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/2137056966050371073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/2137056966050371073'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/cssvault-create-stunning-drop-down.html' title='[CSSVault] Create Stunning Drop Down Calendars Quickly'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-4129708565953901225</id><published>2007-12-21T11:10:00.001-08:00</published><updated>2007-12-21T11:10:48.904-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='data'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='chart'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>[WebAppers] Flot Pure Javascript Plotting Library for jQuery</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;a href="http://code.google.com/p/flot/"&gt;Flot&lt;/a&gt; is a pure Javascript plotting library for jQuery. It produces graphical &lt;strong&gt;plots&lt;/strong&gt; of arbitrary datasets on-the-fly client-side. The focus is on &lt;strong&gt;simple&lt;/strong&gt; usage (all settings are optional), &lt;strong&gt;attractive&lt;/strong&gt; looks and &lt;strong&gt;interactive&lt;/strong&gt; features like zooming. Although Flot is easy to use, it is also advanced enough to be suitable for Web 2.0 data mining/business intelligence purposes which is its original application. The plugin is targeting all newer browsers.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a href="http://code.google.com/p/flot/"&gt;&lt;img alt="flot.png" src="http://www.webappers.com/img/2007/12/flot.png"&gt;&lt;/a&gt; &lt;blockquote&gt; &lt;p&gt;Requirements: No Requirements&lt;br&gt;Demo: &lt;a href="http://code.google.com/p/flot/"&gt;http://code.google.com/p/flot/&lt;/a&gt;&lt;br&gt;License: MIT License&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://feeds.feedburner.com/~r/Webappers/~3/195948085/"&gt;[WebAppers] Flot Pure Javascript Plotting Library for jQuery&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-4129708565953901225?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/4129708565953901225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=4129708565953901225' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/4129708565953901225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/4129708565953901225'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/webappers-flot-pure-javascript-plotting.html' title='[WebAppers] Flot Pure Javascript Plotting Library for jQuery'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-8979169204860124008</id><published>2007-12-21T11:05:00.001-08:00</published><updated>2007-12-21T11:05:17.184-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>[ALA] Never use a Warning when you Mean Undo</title><content type='html'>&lt;h5&gt;by &lt;a href="http://alistapart.com/authors/r/azaraskin"&gt;Aza Raskin&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;&lt;img alt="Never Use a Warning When you Mean Undo" src="http://alistapart.com/d/neveruseawarning/images/neveruseawarning.jpg" align="right"&gt;&lt;/p&gt; &lt;p&gt;Have you ever had that sinking feeling when you realize—just a split second too late—that you shouldn’t have clicked “Okay” in the “Are you sure you want to quit?” dialog? &lt;p&gt;Yes? Well, you’re in good company—everybody has had a similar experience, so there’s no need to feel ashamed about it. &lt;em&gt;It’s not your fault&lt;/em&gt;: it’s your software’s fault. &lt;p&gt;Why? Because software should “know” that we form habits. Software should know that after clicking “Okay” countless times in response to the question, we’ll probably click “Okay” this time too, even if we don’t mean to. Software should know that we won’t have a chance to think before accidentally throwing our work away. &lt;p&gt;Why should it know these things? Because software designers should know that we form habits, whether we want to or not. &lt;p&gt;Habit formation is actually good thing: it saves us the trouble of having to think when confronted with interface banalities and it lessens the probability that our train of thought will get derailed. In the case of the “Are you sure you want to quit?” dialog, our hands have memorized close-and-click as a single continuous gesture. That’s good, because most of the time we don’t want to think about the question—we just do the right thing. Unfortunately, our habits sometimes make us do the wrong thing: we don’t even have time to realize our mistake until after we’ve made it. &lt;p&gt;So, as designers we are led to a general interface principle: &lt;strong&gt;If an interface is to be humane, it must respect habituation.&lt;/strong&gt; &lt;h4&gt;Possible solutions&lt;/h4&gt; &lt;p&gt;What about making the warning harder to ignore? A subtle warning will get passed by, so let’s pull out all the stops: we’ll blink the screen and play a loud stretching noise to ensure that the user is paying attention. Try as we might, it still won’t work. The more in-your-face the warning is, the faster we’ll want to get away from it (by clicking “Okay”) and the more mistakes we’ll make. The thing is, no matter how fully in-your-face the computer presents the warning, we’ll still make the same mistake—clicking “Okay” when we don’t mean to. But it’s still not our fault: as long as it’s possible to habituate to dismissing the message, we’ll habituate, and then we’ll make mistakes. &lt;p&gt;What about making the warning impossible to ignore? If it’s habituation on the human side that is causing the problem, why not design the interface such that we cannot form a habit. That way we’ll always be forced to stop and think before answering the question, so we’ll always choose the answer we mean. That’ll solve the problem, right? &lt;p&gt;This type of thinking is not new: It’s the type-the-nth-word-of-this-sentence-to-continue approach. In the game Guild Wars, for example, deleting a character requires first clicking a “delete” button and then typing the name of the character as confirmation. Unfortunately, it doesn’t always work. In particular: &lt;ol&gt; &lt;li&gt;It causes us to concentrate on the unhabitual-task at hand and not on whether we want to be throwing away our work. Thus, the impossible-to-ignore warning is little better than a normal warning: We end up losing our work either way. This (losing our work) is the worst software sin possible.  &lt;li&gt;It is remarkably annoying, and because it always requires our attention, it necessarily distracts us from our work (which is the second worst software sin).  &lt;li&gt;It is always slower and more work-intensive than a standard warning. Thus, it commits the third worst sin—requiring more work from us than is necessary. &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;In the Guild Wars example, points two and three aren’t particularly apropos because deleting a character is an infrequent action. However, if we had to type the name of a document before being allowed to exit it without saving, we would find it very burdensome. &lt;p&gt;What have we learned? That interfaces that don’t respect habituation are very bad. Making the warning bigger, louder, and impossible-to-ignore doesn’t seem to work; any way we look at it, warnings lead us into a big black interface pit. So let’s get rid of the warning altogether. &lt;h4&gt;Undo to the rescue&lt;/h4&gt; &lt;p&gt;Merely removing warnings doesn’t save our work from peril, but using an “undo” function does. Let me say that again: The solution to our warning woes is undo. With a robust undo, we can close our work with reckless abandon and be secure in the knowledge that we can always get it back. With undo, we can make that horrible “oops!” feeling go away by getting our work back. &lt;a name="FNPTR-1"&gt;&lt;a href="http://alistapart.com/#FOOTNOTE-1"&gt;[1]&lt;/a&gt; &lt;p&gt;Because we form habits, we’ll never be able to guarantee that we won’t have an “oops!” moment. Instead, designers must accept that it will happen and design for it. Whenever we have the opportunity to throw away work, the computer must allow us to undo our actions. &lt;p&gt;This leads to one of the most basic and important mantras of interface design: &lt;strong&gt;Never use a warning when you mean undo&lt;/strong&gt;. &lt;p&gt;Google Mail is a outstanding example of this mantra. When you delete an e-mail, it immediately gives you an option to undo that action. How humane! This neatly sidesteps the issue of warnings (as well as the visibility issue of undo). When we make a mistake (which we are bound to do) it isn’t very costly because we can just undo it. With undo, we spend less time worrying and more time doing work. &lt;p&gt;&lt;img alt="Gmail undo: This conversation has been moved to the trash. Undo link." src="http://alistapart.com/d/neveruseawarning/images/gmail_undo.png"&gt; &lt;p&gt;fig. 1. It’s not too late. Gmail gives users the option to undo their deletes. &lt;p&gt;Of course this is only one layer of undo—and Gmail goes even further. After you delete a message, it isn’t gone forever… it sits in the trash so that you can retrieve it if you decide later that you didn’t actually want to delete it. &lt;p&gt;Alas, this is a lesson that Google Calendar hasn’t learned yet. And, as predicted, I’ve deleted events that I didn’t mean to. Sometimes I’ve deleted the wrong event, which is particularly bad because then I’m not even sure what I’ve deleted. Without undo, there is no way to find out. &lt;p&gt;&lt;img alt="Google calendar warning dialog: Are you sure you want to delete 'Dinner with Asa Jasa'?" src="http://alistapart.com/d/neveruseawarning/images/google_calendar_warning.png"&gt; &lt;p&gt;fig. 2. Be careful! Google Calendar does not allow users to undo accidental deletes. &lt;p&gt;Actually, even Google Mail hasn’t fully embraced the lesson. When you remove a label from Gmail, up comes one of those wretched warnings. Why is it that Google can get it so right in one place, and mere clicks away get it so wrong? Perhaps because “warn-think” is so ingrained that it takes a heroic effort to break free. Even companies which are generally bastions of good design, like 37Signals, get this one dead wrong. &lt;p&gt;&lt;img alt="highrise warning: Are you sure you wnt to delete this task?" src="http://alistapart.com/d/neveruseawarning/images/highrise_warning.png"&gt; &lt;p&gt;fig. 3. 37Signals’ application, Highrise, provides warnings but no undos. &lt;p&gt;Using a warning instead of an undo is the path of least resistance from a programmer’s standpoint, and it doesn’t require any new thinking from a design standpoint. But that isn’t an excuse for our computers to be inhumane. &lt;h4&gt;Conclusion&lt;/h4&gt; &lt;p&gt;Warnings cause us to lose our work, to mistrust our computers, and to blame ourselves. A simple but foolproof design methodology solves the problem: “Never use a warning when you mean undo.” And when a user is deleting their work, you always mean undo. &lt;p&gt;Oh, and the next time you see a warning used instead of undo, send the designer of the application/website a nice e-mail suggesting that they implement an “undo” feature instead. Send them a link to this article. Let’s see if we can’t change the way people design on the web—and in the process make everyone’s computing life more humane and less frustrating in one little way. Let the war on warnings begin! &lt;img alt="" src="http://alistapart.com/pix/eoai.gif"&gt; &lt;p&gt;&lt;a title="http://alistapart.com/articles/neveruseawarning" href="http://alistapart.com/articles/neveruseawarning"&gt;http://alistapart.com/articles/neveruseawarning&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-8979169204860124008?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/8979169204860124008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=8979169204860124008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/8979169204860124008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/8979169204860124008'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/ala-never-use-warning-when-you-mean.html' title='[ALA] Never use a Warning when you Mean Undo'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-7345263283544002545</id><published>2007-12-21T11:02:00.001-08:00</published><updated>2007-12-21T11:02:38.761-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>[PSDTuts] 9 Essential Principles for Good Web Design</title><content type='html'>&lt;small&gt;by &lt;a href="http://psdtuts.com/author/admin/"&gt;Collis&lt;/a&gt;&lt;/small&gt; &lt;p&gt;Web design can be deceptively difficult. Getting a design that is both usable and pleasing, delivers information and builds brand, is technically sound and visually coherent...  &lt;p&gt;Add to this, the fact that many web designers (myself included) are self taught, that web design is still novel enough to be only a side subject in many design institutions and that the medium changes as frequently as the underlying technology does.  &lt;p&gt;So today I've put together my 9 principles for good web design, it's only my opinions and I've tried to link off to more reading on subjects so you don't only hear my voice. Obviously I have lots of disclaimers, rules are made to be broken, different types of design work differently, I don’t always live up to my own advice etc etc.&amp;nbsp; So please read these as they are intended, just some observations I am sharing... &lt;p&gt;&lt;a href="http://capturethevalley.com/"&gt;&lt;img src="http://psdtutsarticles.s3.amazonaws.com/misc/webdesign/1.jpg"&gt;&lt;/a&gt;&lt;br&gt;&lt;small&gt;Capture the Valley uses bars of colour to guide your eye through sections from top to bottom...&lt;/small&gt; &lt;h5&gt;&lt;strong&gt;1. Precedence (Guiding the Eye)&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;Good web design, perhaps even more than other type of design, is about information. One of the biggest tools in your arsenal to do this is precedence.&amp;nbsp; When using a good design, the user should be led around the screen by the designer.&amp;nbsp; I call this &lt;em&gt;precedence &lt;/em&gt;and it's about how much visual weight different parts of your design have.  &lt;p&gt;A simple example of precedence is that in most sites the first thing you see is the logo.&amp;nbsp; This is often because it’s large and set at what has been shown in studies to be the first place people look (the top left).&amp;nbsp; This is a good thing since you probably want a user to immediately know what site they are viewing. &lt;p&gt;But precedence should go much further.&amp;nbsp; You should direct the user’s eyes through a sequence of steps.&amp;nbsp; For example you might want your user to go from logo/brand to a primary positioning statement to punchy image to give the site personality to main body text, with navigation and a side bar taking a secondary position in the sequence.&amp;nbsp; &lt;p&gt;What your user should be looking at is up to you, the web designer, to figure out.&amp;nbsp; &lt;p&gt;To achieve precedence you have many tools at your disposal: &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Position&lt;/strong&gt; - Where something is on a page clearly influences in what order the user sees it  &lt;li&gt;&lt;strong&gt;Colour&lt;/strong&gt; – Using bold and subtle colours is a simple way to tell your user where to look  &lt;li&gt;&lt;strong&gt;Contrast&lt;/strong&gt; – Being different makes things stand out, being the same makes them secondary.  &lt;li&gt;&lt;strong&gt;Size&lt;/strong&gt; – Big takes precedence over little (unless everything is big, in which case little might stand out thanks to Contrast)  &lt;li&gt;&lt;strong&gt;Design Elements&lt;/strong&gt; – if there is a gigantic arrow pointing at something, guess where the user will look? &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt; &lt;h6&gt;Further Reading:&lt;/h6&gt;You can read more of my thoughts on Precedence in an old PSDTUTS post called &lt;a href="http://psdtuts.com/designing-tutorials/elements-of-great-web-design-the-polish/"&gt;Elements of Great Web Design - the polish&lt;/a&gt;. Joshua David McClurg-Genevese discusses principles of &lt;a href="http://www.digital-web.com/articles/principles_and_elements_of_design/"&gt;good web design&lt;/a&gt; and &lt;a href="http://www.digital-web.com/articles/principles_and_elements_of_design/"&gt;design&lt;/a&gt; at Digital-Web. Joshua also has the longest name ever :-) &lt;/em&gt; &lt;p&gt;&lt;a href="http://www.mariusroosendaal.com/"&gt;&lt;img src="http://psdtutsarticles.s3.amazonaws.com/misc/webdesign/2.jpg"&gt;&lt;/a&gt;&lt;br&gt;&lt;small&gt;Marius has a very clean, very simple site with plenty of space&lt;/small&gt; &lt;h5&gt;&lt;strong&gt;2. Spacing&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;When I first started designing I wanted to fill every available space up with stuff. Empty space seemed wasteful. In fact the opposite is true. &lt;p&gt;Spacing makes things clearer. In web design there are three aspects of space that you should be considering: &lt;ul&gt; &lt;li&gt;&lt;em&gt;&lt;strong&gt;Line Spacing&lt;/strong&gt;&lt;br&gt;&lt;/em&gt;When you lay text out the space between the lines directly affects how readable it appears. Too little space makes it easy for your eye to spill over from one line to the next, too much space means that when you finish one line of text and go to the next your eye can get lost. So you need to find a happy medium. You can control line spacing in CSS with the 'line-height' selector. Generally I find the default value is usually too little spacing. Line Spacing is technically called &lt;em&gt;leading&lt;/em&gt; (pronounced ledding) from the process that printers used to use to separate lines of text in ye olde days - by placing bars of lead between the lines. &lt;li&gt;&lt;em&gt;&lt;strong&gt;Padding&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;Generally speaking text should never touch other elements. Images for example should not be touching text, neither should borders or tables. Padding is the space between elements and text. The simple rule here is that you should &lt;em&gt;always&lt;/em&gt; have space there. There are exceptions of course, in particular if the text is some sort of heading/graphic or your name is &lt;a href="http://en.wikipedia.org/wiki/David_Carson_(graphic_designer)"&gt;David Carson&lt;/a&gt; :-) But as a general rule, putting space between text and the rest of the world makes it infinitely more readable and pleasant.  &lt;li&gt;&lt;strong&gt;White Space&lt;/strong&gt;&lt;br&gt;First of all, white space doesn't need to be white. The term simply refers to empty space on a page (or negative space as it's sometimes called). White space is used to give balance, proportion and contrast to a page. A lot of white space tends to make things seem more elegant and upmarket, so for example if you go to an &lt;a href="http://www.marchesepartners.com/site/"&gt;expensive architect site&lt;/a&gt; you'll almost always see a lot of space. If you want to learn to use whitespace effectively, go through a magazine and look at how adverts are laid out. Ads for big brands of watches and cars and the like tend to have a lot of empty space used as an element of design. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt; &lt;h6&gt;Further Reading:&lt;/h6&gt;At WebDesignFromScratch there is a great article called the &lt;a href="http://www.webdesignfromscratch.com/web-2.0-design-style-guide.cfm#simplicity"&gt;Web 2.0 how-to design guide&lt;/a&gt; which discusses Simplicity - a concept that makes a lot of use of spacing. There's plenty of other useful stuff there too!&lt;/em&gt; &lt;p&gt;&lt;a href="http://www.noodlebox.net/portfolio/websites.html"&gt;&lt;img src="http://psdtutsarticles.s3.amazonaws.com/misc/webdesign/3.jpg"&gt;&lt;/a&gt;&lt;br&gt;&lt;small&gt;Noodlebox does a good job of using on/off states in their navigation to keep the user oriented&lt;/small&gt; &lt;h5&gt;&lt;strong&gt;3. Navigation&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;One of the most frustrating experiences you can have on a website is being unable to figure out where to go or where you are. I'd like to think that for most web designers navigation is a concept we've managed to master, but I still find some pretty bad examples out there. There are two aspects of navigation to keep in mind:  &lt;p&gt;&lt;strong&gt;Navigation - Where can you go?&lt;/strong&gt;&lt;br&gt;There are a few common sense rules to remember here. Buttons to travel around a site should be easy to find - towards the top of the page, easy to identify - they should look like navigation buttons, and well described - the text of a button should be pretty clear as to where it's taking you. Aside from the common sense, it's also important to make navigation usable. For example if you have a rollover submenu, ensuring a person can get to the submenu items without losing the rollover is important. Similarly changing the colour or image on rollover is excellent feedback for a user.  &lt;p&gt;&lt;strong&gt;Orientation - Where are you now?&lt;/strong&gt;&lt;br&gt;There are lots of ways you can orient a user so there is no excuse not to. In small sites it might be just a matter of a big heading or a 'down' version of the appropriate button in your menu. In a larger site you might make use of &lt;a href="http://en.wikipedia.org/wiki/Breadcrumb_(navigation)"&gt;bread crumb trails&lt;/a&gt;, sub headings and a sitemap for the truly lost.  &lt;p&gt;&lt;em&gt; &lt;h6&gt;Further Reading:&lt;/h6&gt;SmashingMagazine has a selection of &lt;a href="http://www.smashingmagazine.com/2007/03/14/css-based-navigation-menus-modern-solutions"&gt;CSS-based navigation styles&lt;/a&gt; which are nice to go through - and #3 is one of mine! AListApart also has a good article about orientation called &lt;a href="http://alistapart.com/articles/whereami"&gt;Where Am I?&lt;/a&gt; &lt;/em&gt; &lt;h5&gt;&lt;strong&gt;4. Design to Build&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;Life has gotten a lot easier since web designers transitioned to CSS layouts, but even now it's still important to think about how you are going to build a site when you're still in Photoshop. Consider things like: &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Can it actually be done?&lt;/strong&gt;&lt;br&gt;You might have picked an amazing font for your body copy, but is it actually a standard HTML font? You might have a design that looks beautiful but is 1100px wide and will result in a horizontal scroller for the majority of users. It's really good to know what can and can't be done, which is why I believe all web designers should also build sites, at least sometimes.  &lt;li&gt;&lt;strong&gt;What happens when a screen is resizes?&lt;/strong&gt;&lt;br&gt;Do you need repeating backgrounds, how will they work? Is the design centred or left aligned? &lt;li&gt;&lt;strong&gt;Are you doing anything which is technically difficult? &lt;/strong&gt;&lt;br&gt;Even with CSS positioning, some things like vertical alignment are still a bit painful and sometimes best avoided.  &lt;li&gt;&lt;strong&gt;Could small changes in your design greatly simplify how you build it?&lt;/strong&gt;&lt;br&gt;Sometimes moving an object around in a design can make a big difference in how you have to code your CSS later. In particular when elements of a design cross over each other it adds a little complexity to the build. So if your design has say three elements and each element is completely separate from each other, it would be really easy to build. On the other hand if all three overlap each other, it might still be easy, but will probably be a bit more complicated. You should find a balance between what looks good and small changes that can simplify your build  &lt;li&gt;&lt;strong&gt;For large sites particularly, can you simplify things?&lt;br&gt;&lt;/strong&gt;There was a time when I used to make image buttons for my sites. So if there was a download button for example I would make a little download image. In the last year or so I've switched to using CSS to make my buttons and have never looked back. Sure it means my buttons don't always have the flexibility I might wish for, but the savings in build time from not having to make dozens of little button images are huge. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://ilovetypography.com/"&gt;&lt;img src="http://psdtutsarticles.s3.amazonaws.com/misc/webdesign/4.jpg"&gt;&lt;/a&gt;&lt;br&gt;&lt;small&gt;If anyone knows good type it's iLoveTypography!&lt;/small&gt; &lt;h5&gt;&lt;strong&gt;5. Typography&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;Text is the most common element of design, so it's not surprising that a lot of thought has gone into it. It's important to consider things like: &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Font Choices -&lt;/strong&gt; Different types of fonts say different things about a design. Some look modern, some look retro. Make sure you are using the right tool for the job.  &lt;li&gt;&lt;strong&gt;Font sizes - &lt;/strong&gt;Years ago it was trendy to have really small text. Happily these days people have started to realise that text is meant to be read, not just looked at. Make sure your text sizes are consistent, large enough to be read, and proportioned so that headings and sub headings stand out appropriately.  &lt;li&gt;&lt;strong&gt;Spacing -&lt;/strong&gt; As discussed above, spacing between lines and away from other objects is important to consider. You should also be thinking about spacing between letters, though on the web this is of less importance as you don't have that much control.  &lt;li&gt;&lt;strong&gt;Line Length -&lt;/strong&gt; There is no hard and fast rule, but generally your lines of text shouldn't be too long. The longer they go for, the harder they are to read. Small columns of text work much better (think about how a newspaper lays out text)  &lt;li&gt;&lt;strong&gt;Colour -&lt;/strong&gt; One of my worst habits if making low contrast text. It looks good, but doesn't read so well unfortunately. Still I seem to do it with every website design I've ever made, tsk tsk tsk.  &lt;li&gt;&lt;strong&gt;Paragraphing&lt;/strong&gt; - Before I started designing I loved to Justify everything. It made for nice edges on either side of my paragraphs. Unfortunately justified text tends to create weird gaps between words where they have been auto-spaced. This isn't nice for your eye when reading, so stick to Left-aligned unless you happen to have a magic body of text that happens to space out perfectly. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt; &lt;h6&gt;Further Reading:&lt;/h6&gt;Nick La at WebDesignerWall has a great article about online typography called &lt;a href="http://www.webdesignerwall.com/tutorials/typographic-contrast-flow/"&gt;Typographic Contrast and Flow &lt;/a&gt;&lt;/em&gt; &lt;p&gt;&lt;a href="http://www.happycog.com/design/"&gt;&lt;img src="http://psdtutsarticles.s3.amazonaws.com/misc/webdesign/5.jpg"&gt;&lt;/a&gt;&lt;br&gt;&lt;small&gt;Happycog know usability inside out, their own site is simple and easy to use.&lt;/small&gt; &lt;h5&gt;&lt;strong&gt;6. Usability&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;Web design ain't just about pretty pictures. With so much information and interaction to be effected on a website, it's important that you the designer, provide for it all. That means making your website design usable.  &lt;p&gt;We've already discussed some aspects of usability - navigation, precedence, text - here are three more important ones: &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Adhering to Standards&lt;/strong&gt;&lt;br&gt;There are certain things people expect, not giving them causes confusion. For example, if text has an underline, you expect it to be a link. Doing otherwise is not good usability practice. Sure you can break some conventions, but most of your website should do exactly what people expect it to do!  &lt;li&gt;&lt;strong&gt;Think about what users will actually do&lt;br&gt;&lt;/strong&gt;&lt;a href="http://en.wikipedia.org/wiki/Website_wireframe"&gt;Prototyping&lt;/a&gt; is a common tool used in design to actually 'try' out a design. This is done because often when you actually use a design you notice little things that make a big difference. ALA had an article a while back called &lt;a href="http://alistapart.com/articles/neveruseawarning"&gt;Never Use a Warning When You Mean Undo&lt;/a&gt; which is an excellent example of a small interface design decision that can make life suck for a user.  &lt;li&gt;&lt;strong&gt;Think about user tasks&lt;/strong&gt;&lt;br&gt;When a user comes to your site what are they actually trying to do? List out the different types of tasks people might do on a site, how they will achieve them, and how easy you want to make it for them. This might mean having really common tasks on your homepage (e.g. 'start shopping', 'learn about what we do' etc) or it might mean ensuring something like a search box is always easily accessible. At the end of the day your web design is a tool for people to use, and people don't like using annoying tools! &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt; &lt;h6&gt;Further Reading: &lt;/h6&gt;AListApart has &lt;a href="http://alistapart.com/topics/userscience/usability/"&gt;lots of articles on web usability&lt;/a&gt; &lt;/em&gt; &lt;p&gt;&lt;a href="http://electricpulp.com/"&gt;&lt;img src="http://psdtutsarticles.s3.amazonaws.com/misc/webdesign/6.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;small&gt;Electric pulp manages to look rough, but if you look closely you realise there is a firm grid and things actually all line up &lt;/small&gt; &lt;h5&gt;7. Alignment &lt;/h5&gt; &lt;p&gt;Keeping things lined up is as important in web design as it is in print design. That's not to say that &lt;em&gt;everything&lt;/em&gt; should be in a straight line, but rather that you should go through and try to keep things consistently placed on a page. Aligning makes your design more ordered and digestible, as well making it seem more polished. &lt;p&gt;You may also wish to base your designs on a specific grid. I must admit I don't do this consciously - though obviously a site like PSDTUTS does in fact have a very firm grid structure. This year I've seen a few really good articles on grid design including SmashingMagazine's &lt;a href="http://www.smashingmagazine.com/2007/04/14/designing-with-grid-based-approach/"&gt;Designing with Grid-Based Approach&lt;/a&gt; &amp;amp; AListApart's &lt;a href="http://alistapart.com/articles/outsidethegrid"&gt;Thinking Outside The Grid&lt;/a&gt;. In fact if you're interested in grid design, you should definitely pay a visit to the aptly named &lt;a href="http://www.designbygrid.com/"&gt;DesignByGrid.com&lt;/a&gt; home to all things griddy.  &lt;p&gt;&lt;a href="http://expressionengine.com/"&gt;&lt;img src="http://psdtutsarticles.s3.amazonaws.com/misc/webdesign/7.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;small&gt;The ExpressionEngine site is the soul of clarity. Everything is sharp and clean&lt;/small&gt; &lt;h5&gt;8. Clarity (Sharpness)&lt;/h5&gt; &lt;p&gt;Keeping your design crisp and sharp is super important in web design. And when it comes to clarity it's all about the pixels.  &lt;p&gt;In your CSS everything will be pixel perfect so there's nothing to worry about, but in Photoshop it is not so... To achieve a sharp design you have to: &lt;ul&gt; &lt;li&gt;Keep shape edges snapped to pixels - This might involve manually cleaning up shapes, lines and boxes if you're creating them in Photoshop.  &lt;li&gt;Make sure any text is created using the appropriate anti-aliasing setting - I use 'Sharp' a lot  &lt;li&gt;Ensuring contrast is high so that borders are clearly defined  &lt;li&gt;Over-emphasizing borders just slightly to exaggerate the contrast. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt; &lt;h6&gt;Further Reading: &lt;/h6&gt;I wrote a bit more about clarity in &lt;a href="http://psdtuts.com/designing-tutorials/elements-of-great-web-design-the-polish/"&gt;Elements of Great Web Design - the polish&lt;/a&gt;. I've noticed print designers transitioning to web design in particular don't think in pixels, but it really is vital. &lt;/em&gt; &lt;p&gt;&lt;a href="http://veerle.duoh.com/"&gt;&lt;img src="http://psdtutsarticles.s3.amazonaws.com/misc/webdesign/8.jpg" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;small&gt;Veerle does a great job of keeping even the tiniest details consistent across the board&lt;/small&gt; &lt;h5&gt;&lt;strong&gt;9. Consistency&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;Consistency means making everything match. Heading sizes, font choices, colouring, button styles, spacing, design elements, illustration styles, photo choices... Everything should be themed to make your design coherent between pages and on the same page. &lt;p&gt;Keeping your design consistent is about being professional. Inconsistencies in a design are like spelling mistakes in an essay. They just lower the perception of quality. Whatever your design looks like, keeping it consistent will always bring it up a notch. Even if it's a bad design, at least make it a consistent, bad design.  &lt;p&gt;The simplest way to maintain consistency is to make early decisions and stick to them. With a really large site however things can change in the design process. When I designed &lt;a href="http://flashden.net"&gt;FlashDen&lt;/a&gt; for example, the process took months and by the end some of my ideas for buttons and images had changes so I had to go back and revise earlier pages to match later ones exactly.  &lt;p&gt;Having a good set of CSS stylesheets can also go a long way to making a consistent design. Try to define core tags like &amp;lt;h1&amp;gt; and &amp;lt;p&amp;gt; in such a way as to make your defaults match properly and avoid having to remember specific class names all the time.  &lt;p&gt;&lt;a title="9 Essential Principles for Good Web Design" href="http://psdtuts.com/designing-tutorials/9-essential-principles-for-good-web-design/"&gt;http://psdtuts.com/designing-tutorials/9-essential-principles-for-good-web-design/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-7345263283544002545?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/7345263283544002545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=7345263283544002545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/7345263283544002545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/7345263283544002545'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/psdtuts-9-essential-principles-for-good.html' title='[PSDTuts] 9 Essential Principles for Good Web Design'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-6634507756768431213</id><published>2007-12-20T14:45:00.001-08:00</published><updated>2007-12-20T14:45:58.280-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lists'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>[CssTricks] CSS list-style-position Property</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;h5&gt;Keep your list items INSIDE&lt;/h5&gt; &lt;p&gt;&lt;img alt="liststyleposition.gif" src="http://css-tricks.com/wp-content/uploads/2007/12/liststyleposition.gif"&gt;&lt;br&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;.box ul { } &lt;/p&gt; &lt;p&gt;&lt;code&gt;.box li&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;{&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;list-style: square;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;&lt;b&gt;list-style-position: inside;&lt;/b&gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;color: #2D343F;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-6634507756768431213?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/6634507756768431213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=6634507756768431213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/6634507756768431213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/6634507756768431213'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/csstricks-css-list-style-position.html' title='[CssTricks] CSS list-style-position Property'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-6388489329579184632</id><published>2007-12-20T14:17:00.001-08:00</published><updated>2007-12-20T14:17:46.298-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>[WebAppers] NicEdit Micro Inline WYSIWYG Content Editor</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a href="http://nicedit.com/"&gt;NicEdit&lt;/a&gt; is a Javascript/AJAX inline content editor to allow easy editing of web site content on the fly in the browser. It integrates into any site in seconds to make any element/div editable or convert standard textareas to rich text editing. &lt;p&gt;&lt;a href="http://nicedit.com/"&gt;NicEdit&lt;/a&gt; was created as an alternative for the complexity, many files and large download size (&amp;gt; 200KB) of popular WYSIWYG editors such as TinyMCE and FCKEditor. It implements many of the standard rich text features like these editors but is easier to integrate without impact on download size. Small file size &amp;lt;35KB Total, &amp;lt;10KB Compressed! Only 2 files (js + icons) required for operation. &lt;p&gt;&lt;a href="http://nicedit.com/"&gt;&lt;img alt="niedit.png" src="http://www.webappers.com/img/2007/12/niedit.png"&gt;&lt;/a&gt; &lt;blockquote&gt; &lt;p&gt;Requirements: IE 5.5+, FF 2+, Opera 9+, Safari 3+&lt;br&gt;Demo: &lt;a href="http://nicedit.com/"&gt;http://nicedit.com/&lt;/a&gt;&lt;br&gt;License: MIT License&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://feeds.feedburner.com/~r/Webappers/~3/202590375/"&gt;[WebAppers] NicEdit Micro Inline WYSIWYG Content Editor&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-6388489329579184632?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/6388489329579184632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=6388489329579184632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/6388489329579184632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/6388489329579184632'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/webappers-nicedit-micro-inline-wysiwyg.html' title='[WebAppers] NicEdit Micro Inline WYSIWYG Content Editor'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-4487238494100098000</id><published>2007-12-20T14:07:00.001-08:00</published><updated>2007-12-20T14:07:15.979-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='forms'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>[WebAppers] fValidator Validate input data in HTML forms with iMask</title><content type='html'>&lt;p&gt;That’s why &lt;strong&gt;&lt;a href="http://zend.lojcomm.com.br/fvalidator/"&gt;fValidator&lt;/a&gt;&lt;/strong&gt; exists, with it form validations are many times easier. fValidator is compatible and tested in Internet Explorer, Firefox (and its mozilla friends), Opera and Safari.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;*** It works perfect with &lt;a href="http://zend.lojcomm.com.br/iMask/"&gt;iMask&lt;/a&gt; as it’s complement.&lt;/strong&gt; &lt;p&gt;&lt;a href="http://zend.lojcomm.com.br/fvalidator/"&gt;&lt;img alt="fvalidator-imask.png" src="http://www.webappers.com/img/2007/12/fvalidator-imask.png"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://feeds.feedburner.com/~r/Webappers/~3/203237965/"&gt;[WebAppers] fValidator Validate input data in HTML forms with iMask&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-4487238494100098000?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/4487238494100098000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=4487238494100098000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/4487238494100098000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/4487238494100098000'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/webappers-fvalidator-validate-input.html' title='[WebAppers] fValidator Validate input data in HTML forms with iMask'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-4560291580036880975</id><published>2007-12-18T08:21:00.001-08:00</published><updated>2007-12-18T08:27:44.705-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='navigation'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>[CssTricks] ID Your Body For Greater CSS Control and Specificity</title><content type='html'>&lt;p&gt;If you wanted to change the color of links on one page, you have a few options: &lt;ul&gt; &lt;li&gt;You could declare a separate stylesheet for your contact page.  &lt;li&gt;You could give all those links a unique class on that page.  &lt;li&gt;The best solution is to give your the body a unique ID. &lt;/li&gt;&lt;/ul&gt; &lt;h5&gt;How it’s done&lt;/h5&gt; &lt;p&gt;Apply id to body tag:&lt;pre&gt;&lt;code&gt;&amp;lt;/head&amp;gt; &amp;lt;body id="contact-page"&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Now you can change the color of the links for the entire page:&lt;pre&gt;&lt;code&gt;a {&lt;br /&gt;color: blue;&lt;br /&gt;} #contact-page a { color: red;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h5&gt;How about a more practical example?&lt;/h5&gt;&lt;br /&gt;&lt;p&gt;You got it. One of the most useful implementations of this technique is within &lt;strong&gt;navigation&lt;/strong&gt;. Take a look at this sample navigation: &lt;br /&gt;&lt;p&gt;&lt;img alt="tabbednav.jpg" src="http://css-tricks.com/wp-content/uploads/2007/12/tabbednav.jpg"&gt;&lt;br /&gt;&lt;p&gt;Example code of on one page:&lt;br /&gt;&lt;p&gt;&lt;code&gt;&amp;lt;/head&amp;gt; &amp;lt;body id="field-tips"&amp;gt; ... &amp;lt;li class="fieldtips"&amp;gt;&amp;lt;a href="http://pipes.yahoo.com/fieldtips"&amp;gt;Field tips&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; &amp;lt;li class="forums"&amp;gt;&amp;lt;a href="http://pipes.yahoo.com/forums"&amp;gt;Forums&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; ...&lt;/code&gt;&lt;br /&gt;&lt;p&gt;CSS looks like this. Whenever the body ID and the list item class match up, it becomes the active tab:&lt;pre&gt;&lt;code&gt;#field-tips li.fieldtips, #forums li.forums { background-position: bottom;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="[CssTricks] ID Your Body For Greater CSS Control and Specificity" href="http://feeds.feedburner.com/~r/CssTricks/~3/201682948/"&gt;http://feeds.feedburner.com/~r/CssTricks/~3/201682948/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-4560291580036880975?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/4560291580036880975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=4560291580036880975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/4560291580036880975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/4560291580036880975'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/csstricks-id-your-body-for-greater-css.html' title='[CssTricks] ID Your Body For Greater CSS Control and Specificity'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-5147376465816177577</id><published>2007-12-18T07:59:00.001-08:00</published><updated>2007-12-18T07:59:07.599-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resources'/><category scheme='http://www.blogger.com/atom/ns#' term='layout'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>[Vandelay] 22 Resources to Easily Create CSS Layouts</title><content type='html'>&lt;p&gt;Web designers are always looking for ways to save time and &lt;a href="http://vandelaydesign.com/blog/design/resources-simplify-design/"&gt;simplify the design process&lt;/a&gt;. Well, creating a basic layout doesn’t have to take any time at all. All of the resources listed here will help you to create the structure for CSS-based designs. None of these resources are templates that attempt to replace the need for a design; rather, they all aim to simplify the process by creating a skeleton that you will build upon. &lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.html.it/layoutgala/"&gt;Layout Gala&lt;/a&gt;&lt;/strong&gt; - 40 different CSS-based layouts including fixed and fluid widths. &lt;p&gt;&lt;a href="http://blog.html.it/layoutgala/"&gt;&lt;img height="300" alt="Layout Gala Screenshot" src="http://vandelaydesign.com/images/layout/layoutgala.gif" width="450"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/blueprintcss/"&gt;BluePrintCSS&lt;/a&gt;&lt;/strong&gt; - BluePrintCSS “aims to cut down on your CSS development time. It gives you a solid CSS foundation to build your project on top of, with an easy-to-use grid, sensible typography, and even a stylesheet for printing.” &lt;p&gt;&lt;a href="http://code.google.com/p/blueprintcss/"&gt;&lt;img height="131" alt="BluePrintCSS" src="http://vandelaydesign.com/images/layout/blueprint.gif" width="450"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://intensivstation.ch/en/templates/"&gt;Intensivstation&lt;/a&gt;&lt;/strong&gt; - 16 different CSS-based layouts are provided &lt;p&gt;&lt;a href="http://intensivstation.ch/en/templates/"&gt;&lt;img height="448" alt="Intensivstation Screenshoot" src="http://vandelaydesign.com/images/layout/intens.gif" width="450"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://dynamicdrive.com/style/layouts/category/C11/"&gt;Dynamic Drive’s CSS Library&lt;/a&gt;&lt;/strong&gt; - One of the leading sources of coding and scripts provides 12 CSS-based layouts. &lt;p&gt;&lt;a href="http://dynamicdrive.com/style/layouts/category/C11/"&gt;&lt;img height="289" alt="Dynamic Drive Screenshot" src="http://vandelaydesign.com/images/layout/dynamicdrive.gif" width="450"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://csscreator.com/?q=tools/layout"&gt;CSSCreator.com&lt;/a&gt;&lt;/strong&gt; - Rather than providing templates, CSS Creator is a tool that allows you to enter some information about the layout that you want to create, and it produces the code. You choose things like width, columns and colors. &lt;p&gt;&lt;a href="http://csscreator.com/?q=tools/layout"&gt;&lt;img height="88" alt="CSS Creator Screenshot" src="http://vandelaydesign.com/images/layout/csscreator.gif" width="348"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.inknoise.com/experimental/layoutomatic.php"&gt;Layout-o-matic&lt;/a&gt;&lt;/strong&gt; - Inknoise has a tool that is similar to CSS Creator. You choose a few variables and it will give you the code for a basic CSS layout. &lt;p&gt;&lt;a href="http://www.inknoise.com/experimental/layoutomatic.php"&gt;&lt;img height="211" alt="Layout-o-matic Screenshot" src="http://vandelaydesign.com/images/layout/layoutomatic.gif" width="450"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.bluerobot.com/web/layouts/"&gt;The Layout Reservoir&lt;/a&gt;&lt;/strong&gt; - BlueRobot.com provides the CSS for 3 different layouts. &lt;p&gt;&lt;a href="http://www.bluerobot.com/web/layouts/"&gt;&lt;img height="229" alt="The Layout Reservoir Screenshot" src="http://vandelaydesign.com/images/layout/reservoir.gif" width="450"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://code-sucks.com/css%20layouts/"&gt;Code Sucks.com&lt;/a&gt;&lt;/strong&gt; - There are over 90 different layouts to choose from, including fixed width and faux columns. &lt;p&gt;&lt;a href="http://code-sucks.com/css%20layouts/"&gt;&lt;img height="341" alt="Code Sucks Screenshot" src="http://vandelaydesign.com/images/layout/codesucks.gif" width="450"&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://code-sucks.com/css%20layouts/"&gt;&lt;/a&gt;&lt;a href="http://csseasy.com/"&gt;CSSeasy&lt;/a&gt; - At CSSeasy you’ll find 8 different layouts to choose from. &lt;p&gt;&lt;a href="http://csseasy.com/"&gt;&lt;img height="278" alt="CSSeasy Screenshot" src="http://vandelaydesign.com/images/layout/csseasy.gif" width="450"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://tomorrows-laundry.com/"&gt;Tomorrow’s Laundry&lt;/a&gt;&lt;/strong&gt; - WordPress theme designers will love the blank theme layouts from Tomorrow’s Laundry. Four different layouts provide the basic building blocks for your theme designs. &lt;p&gt;&lt;a href="http://tomorrows-laundry.com/"&gt;&lt;img height="165" alt="Tomorrow's Laundry Screenshot" src="http://vandelaydesign.com/images/layout/laundry.gif" width="450"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.yvoschaap.com/wpthemegen/"&gt;WordPress Theme Generator&lt;/a&gt;&lt;/strong&gt; - Another resource for WordPress designers, the theme generator will let you choose the layout you want and it generates the code. &lt;p&gt;&lt;strong&gt;&lt;a href="http://developer.yahoo.com/yui/grids/"&gt;Yahoo! Developer Network&lt;/a&gt;&lt;/strong&gt; - YUI Grids CSS provide a starting point for your layouts for fluid or fixed width. &lt;p&gt;&lt;strong&gt;&lt;a href="http://ssi-developer.net/main/templates/"&gt;SSI Developer&lt;/a&gt;&lt;/strong&gt; - At SSI Developer there are a variety of two and three column layouts. Each layout indicates the browsers in which it has been tested. &lt;p&gt;&lt;strong&gt;&lt;a href="http://mollio.org/"&gt;Mollio&lt;/a&gt;&lt;/strong&gt; - Mollio offers several attractive layouts, but they give a disclaimer that there may be some rendering problems with IE7. &lt;p&gt;&lt;strong&gt;&lt;a href="http://csstinderbox.raykonline.com/"&gt;CSS Tinderbox&lt;/a&gt;&lt;/strong&gt; - Here you’ll find four simple but attractive layouts. &lt;p&gt;&lt;strong&gt;&lt;a href="http://mitchbryson.com/free-css-templates"&gt;Mitch Bryson&lt;/a&gt;&lt;/strong&gt; - Mitch provides eight different CSS-based layouts to choose from. &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.wannabegirl.org/firdamatic/"&gt;Firdamatic&lt;/a&gt;&lt;/strong&gt; - Another tool similar to CSS Creator and Layout-o-matic, Firdomatic will let you choose several items and then it will create the code for your layout. &lt;p&gt;&lt;strong&gt;&lt;a href="http://strictlycss.com/articles/article/40/the-only-css-layout-you-need"&gt;Strictly CSS&lt;/a&gt;&lt;/strong&gt; - Strictly CSS has an article that provides ten different CSS layouts based on the same HTML code. &lt;p&gt;&lt;strong&gt;&lt;a href="http://maxdesign.com.au/presentation/page_layouts/"&gt;Max Design&lt;/a&gt;&lt;/strong&gt; - Twenty-three different layouts in several different categories are available from Max Design. &lt;p&gt;&lt;strong&gt;&lt;a href="http://glish.com/css/"&gt;Glish.com&lt;/a&gt;&lt;/strong&gt; - Here is an article that includes links to a number of CSS-based layouts. &lt;p&gt;&lt;strong&gt;&lt;a href="http://mycelly.com/"&gt;mycelly.com&lt;/a&gt;&lt;/strong&gt; - Twelve different layouts. &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.thenoodleincident.com/tutorials/box_lesson/boxes.html"&gt;Little Boxes&lt;/a&gt;&lt;/strong&gt; - Sixteen more layouts. &lt;p&gt;&lt;a title="[Vandelay] 22 Resources to Easily Create CSS Layouts" href="http://vandelaydesign.com/blog/design/css-layout-tools/"&gt;http://vandelaydesign.com/blog/design/css-layout-tools/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-5147376465816177577?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/5147376465816177577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=5147376465816177577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/5147376465816177577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/5147376465816177577'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/vandelay-22-resources-to-easily-create.html' title='[Vandelay] 22 Resources to Easily Create CSS Layouts'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-3661290024587950701</id><published>2007-12-17T20:34:00.001-08:00</published><updated>2007-12-17T20:34:49.833-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='typography'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>[Sitepoint] Typography Terms</title><content type='html'>&lt;p&gt;&lt;a href="http://i2.sitepoint.com/graphics/type_terms.thumb.png"&gt;&lt;img height="100" alt="" src="http://i2.sitepoint.com/graphics/type_terms.thumb.png" width="400"&gt;&lt;/a&gt; &lt;p&gt;&lt;img height="0" alt="" src="http://www.sitepoint.com/phpadsnew/adlog.php?bannerid=472&amp;amp;clientid=377&amp;amp;zoneid=73&amp;amp;source=&amp;amp;block=0&amp;amp;capping=0&amp;amp;cb=7f3d937419c08589863605aa93226bef" width="0"&gt; &lt;p&gt;&lt;strong&gt;1) baseline&lt;/strong&gt; &lt;p&gt;The baseline is the imaginary horizontal line on which most characters sit. The only character that hangs below the baseline in Figure 4.5 is the lowercase "q."  &lt;p&gt;&lt;strong&gt;2) cap height&lt;/strong&gt; &lt;p&gt;The cap height or capline is another imaginary line. This one marks the height of all capital letters in a typeface. Notice that the cap height is below the maximum height of the typeface.  &lt;p&gt;&lt;strong&gt;3) crossbar&lt;/strong&gt; &lt;p&gt;A stroke that connects two lines in the capital letterforms of "A" and "H" is called a crossbar. A horizontal stroke that does not connect two lines, like the one in the lower case "f" or "t," is known as a &lt;strong&gt;cross stroke&lt;/strong&gt;. &lt;p&gt;&lt;strong&gt;4) serif&lt;/strong&gt; &lt;p&gt;Serif is the name given to the finishing strokes at the bottoms and tops of certain typefaces. I'll talk more about serifs when we get into typeface distinctions.  &lt;p&gt;&lt;strong&gt;5) meanline&lt;/strong&gt; &lt;p&gt;Another imaginary horizontal line that marks the top edge of the lowercase letters is the meanline. Contrary to the way it sounds, the meanline isn't always exactly centered between the baseline and the cap height.  &lt;p&gt;&lt;strong&gt;6) bowl&lt;/strong&gt; &lt;p&gt;The bowl of a letter is the rounded curve that encloses negative space in a letterform. Examples of bowls can be seen in the letters "D," "o," and "g."  &lt;p&gt;&lt;strong&gt;7) descender&lt;/strong&gt; &lt;p&gt;The lower portion of the lowercase letters "g," "j," "p," "q," and "y" that extend below the baseline of a typeface is known as the descender. The only other characters that typically extend below the baseline are the old-style numerals in some typefaces. These types of numerals, examples of which from the Georgia typeface can be seen in Figure 4.6, were thought to blend better with lowercase roman numerals, and they look particularly good when used within a body of text. &lt;p&gt;&lt;a href="http://i2.sitepoint.com/graphics/type_georgia-numerals.thumb.png"&gt;&lt;em&gt;Old-style numerals in the font Georgia (click to view image)&lt;/em&gt;&lt;img height="71" alt="" src="http://i2.sitepoint.com/graphics/type_georgia-numerals.thumb.png" width="400"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;8) counter&lt;/strong&gt; &lt;p&gt;The negative space within a letter is called the counter. In some letters, like "A," "o," and "P," the counter is fully enclosed. The non-closed negative spaces in letters like "G," "u," and "c" are also known as counters.  &lt;p&gt;&lt;strong&gt;9) stem&lt;/strong&gt; &lt;p&gt;A stem is the main vertical or diagonal stroke in a letterform. These include the vertical portions of the letters "I" and "H," as well as all of the stokes in the letter "W."  &lt;p&gt;&lt;strong&gt;10) tittle&lt;/strong&gt; &lt;p&gt;This is probably my favorite typeface term. Tittle is the name given to the dot above the lowercase "j" and "i."  &lt;p&gt;&lt;strong&gt;11) terminal&lt;/strong&gt; &lt;p&gt;The end of a stem or stroke that has no serif is known as a terminal. Even the ends of some serif typefaces have terminals, as you can see in the letter "c" in Figure 4.6.  &lt;p&gt;&lt;strong&gt;12) ascender&lt;/strong&gt; &lt;p&gt;The tops of most lowercase letters form an imaginary line that's known as the meanline. Some lowercase letters have an ascender, which is an extension that rises above the &lt;strong&gt;meanline&lt;/strong&gt;. Those letters are "b," "d," "f," "h," "k," "l," and "t."  &lt;p&gt;&lt;strong&gt;13) leg&lt;/strong&gt; &lt;p&gt;The lower, angled strokes seen in the letters "K," "R," and "Q" are known as legs. These are also sometimes referred to as tails.  &lt;p&gt;&lt;strong&gt;14) ligature&lt;/strong&gt; &lt;p&gt;You may not have noticed in Figure 4.5, but the "f" and "i" of the word "fix" are actually combined into one character. This combination of characters is known as a ligature. Ligatures exist to give the spacing between certain characters a greater aesthetic balance, as Figure 4.7 illustrates.  &lt;p&gt;&lt;a href="http://i2.sitepoint.com/graphics/type_ligature.png"&gt;&lt;em&gt;Example of a ligature (click to view image)&lt;/em&gt;&lt;img height="188" alt="" src="http://i2.sitepoint.com/graphics/type_ligature.png" width="300"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;15) x-height&lt;/strong&gt; &lt;p&gt;The x-height is exactly what you would expect it to be: the height of the lowercase x in a typeface. Essentially the x-height is the distance between the baseline and the meanline of a typeface. Although it's not very practical, you can actually use x-height as a relative unit of measurement in CSS (ex). &lt;p&gt;&lt;a title="http://www.sitepoint.com/article/principles-beautiful-typography/3" href="http://www.sitepoint.com/article/principles-beautiful-typography/3"&gt;http://www.sitepoint.com/article/principles-beautiful-typography/3&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-3661290024587950701?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/3661290024587950701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=3661290024587950701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/3661290024587950701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/3661290024587950701'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/sitepoint-typography-terms.html' title='[Sitepoint] Typography Terms'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-1455169980036286945</id><published>2007-12-17T16:13:00.001-08:00</published><updated>2007-12-17T16:13:01.383-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='typography'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>[Sitepoint] The 9 Web-Safe Fonts</title><content type='html'>&lt;img height="481" alt="" src="http://i2.sitepoint.com/graphics/type_safe-fonts.thumb.png" width="400"&gt; &lt;p&gt;&lt;a title="http://www.sitepoint.com/article/principles-beautiful-typography/2" href="http://www.sitepoint.com/article/principles-beautiful-typography/2"&gt;http://www.sitepoint.com/article/principles-beautiful-typography/2&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-1455169980036286945?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/1455169980036286945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=1455169980036286945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/1455169980036286945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/1455169980036286945'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/sitepoint-9-web-safe-fonts.html' title='[Sitepoint] The 9 Web-Safe Fonts'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-9095885664146118848</id><published>2007-12-17T15:19:00.001-08:00</published><updated>2007-12-17T15:19:47.207-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='winxp'/><category scheme='http://www.blogger.com/atom/ns#' term='regedit'/><category scheme='http://www.blogger.com/atom/ns#' term='utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='errors'/><title type='text'>Unable to login because of account restrictions</title><content type='html'>&lt;p&gt;Here's the error I would get when login in with any of the users on the machine. It would occur in both normal and safemode even after using a linux live distro to reset the passwords and unlock the accounts.&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;strong&gt;Unable to Log You on Because of an Account Restriction&lt;/strong&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;It turns out the problem was caused because the following registry value had been deleted:&lt;br&gt;&lt;strong&gt;HKLM\SYSTEM\ControlSet1\Control\Lsa\Authentication Packages&lt;/strong&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;Normally it is set to "&lt;strong&gt;msv1_0&lt;/strong&gt;", but had been changed when the system had gotten infected with a virus. During the cleanup process, I think I must have deleted that value.... and poof... no more logging in. &lt;br&gt;NtPasswd (&lt;a href="http://home.eunet.no/pnordahl/ntpasswd/"&gt;http://home.eunet.no/pnordahl/ntpasswd/&lt;/a&gt; ) is a really slick tool that I used to fix the problems. It's a linux live distro that's really small and boots quickly and comes with a fully functional registry editor! It also lets you reset passwords and unlock accounts. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-9095885664146118848?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/9095885664146118848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=9095885664146118848' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/9095885664146118848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/9095885664146118848'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/unable-to-login-because-of-account.html' title='Unable to login because of account restrictions'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-3404283850311217911</id><published>2007-12-17T09:37:00.001-08:00</published><updated>2007-12-18T08:00:03.444-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resources'/><category scheme='http://www.blogger.com/atom/ns#' term='forms'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>[Noupe] 47+ Excellent Ajax CSS Forms Posted in: Ajax, Javascript, CSS</title><content type='html'>&lt;p&gt;&lt;a title="47+ Excellent Ajax CSS Forms" href="http://www.noupe.com/ajax/47-excellent-ajax-css-forms.html"&gt;47+ Excellent Ajax CSS Forms from [Noupe&lt;/a&gt;]&amp;nbsp; &lt;p&gt;Forms needs a solid visual structure, a profound hierarchy of form elements &lt;strong&gt;(Fields and Labels)&lt;/strong&gt;, powerful techniques and Functionality &lt;strong&gt;(AJAX)&lt;/strong&gt; to make the form look and work creatively. There is a great bunch of creative, outstanding and individually designed from scratch forms.  &lt;p&gt;Thanks to AJAX, we can provide real-time feedback to our users using server-side validation scripts and eliminate the need for redundant validation functions and processing data.  &lt;p&gt;Let’s take a look, hopefully you’ll find new ideas you can develop further on your own.  &lt;hr&gt;  &lt;h6&gt;Styling Forms&lt;/h6&gt; &lt;hr&gt;  &lt;p&gt;1) &lt;a href="http://dnevnikeklektika.com/uni-form/"&gt;Uni Form&lt;/a&gt; - an attempt to standardize form markup (xhtml) and css, "modularize" it, to get nice looking, well structured, highly customizable, semantic, accessible and usable forms.  &lt;p&gt;&lt;a href="http://dnevnikeklektika.com/uni-form/"&gt;&lt;img alt="" src="http://noupe.com/img/f15.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;2) &lt;a href="http://jeffhowden.com/code/css/forms/"&gt;CSS-Only, Table-less Forms&lt;/a&gt; - A great example of a well designed form using modern css techniques. It works in Win/IE6, Firefox v1.0+, Win/Opera v8.0, has minor layout differences in Mac/Safari v1.0.3 and Mac/Safari v1.2, and is usable but fairly buggered in Mac/IE5.2.  &lt;p&gt;&lt;a href="http://jeffhowden.com/code/css/forms/"&gt;&lt;img alt="Table-less Form" src="http://noupe.com/img/f17.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;3) &lt;a href="http://www.roscripts.com/Tableless_forms-112.html"&gt;Tableless Forms&lt;/a&gt; - has a great login form example, with a graphic in the input field.  &lt;p&gt;&lt;a href="http://www.roscripts.com/uploads/CSS_forms/forms.html"&gt;Demo&lt;br&gt;&lt;img alt="" src="http://noupe.com/img/f29.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;4) &lt;a href="http://www.cssplay.co.uk/menu/form.html"&gt;A form with style&lt;/a&gt; - How to style and stop web forms from looking ugly.  &lt;p&gt;&lt;a href="http://www.cssplay.co.uk/menu/form.html"&gt;&lt;img alt="" src="http://noupe.com/img/f20.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;h6&gt;Styling Form Elements&lt;/h6&gt; &lt;hr&gt;  &lt;p&gt;5) &lt;a href="http://www.badboy.ro/articles/2007-01-30/niceforms/"&gt;Niceforms 1.0&lt;/a&gt; - is a script that will replace the most commonly used form elements with custom designed ones. One of these improvements would be the possibility of selecting a radio or check box by clicking its adjacent label, it also highlights the labels of the selected boxes to make the selections even clearer and more…  &lt;p&gt;&lt;a href="http://www.badboy.ro/assets/articles/niceforms1.0/niceforms.html"&gt;&lt;img alt="niceforms" src="http://noupe.com/img/f2.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;6) &lt;a href="http://lipidity.com/fancy-form/"&gt;Fancy Form&lt;/a&gt; - FancyForm is a powerful checkbox replacement script used to provide the ultimate flexibility in changing the appearance and function of HTML form elements. It’s easy to use and degrades gracefully on all older, non-supporting browsers.  &lt;p&gt;&lt;a href="http://lipidity.com/fancy-form/"&gt;&lt;img alt="FancyForm" src="http://noupe.com/img/f13.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;7) &lt;a href="http://www.456bereastreet.com/archive/200701/styling_form_controls_with_css_revisited/"&gt;Styling form controls with CSS, revisited&lt;/a&gt; - 224 screenshots showing the effects of various CSS rules applied to form controls. The screenshots are taken from 8 browsers on 4 operating systems, for a total of 14 different browser + OS combinations.  &lt;p&gt;&lt;a href="http://www.456bereastreet.com/archive/200701/styling_form_controls_with_css_revisited/"&gt;&lt;img alt="" src="http://noupe.com/img/f3.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;8 ) &lt;a href="http://24ways.org/2006/showing-good-form"&gt;Showing Good Form&lt;/a&gt; - Demo of accessible complex, grid-style (i.e. table-like) form using semantic markup (fieldset, legend, label etc…) and CSS.  &lt;p&gt;&lt;a href="http://24ways.org/examples/showing-good-form/demo.html"&gt;Demo :&lt;br&gt;&lt;img alt="" src="http://24ways.org/examples/showing-good-form/article-example1.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;9) &lt;a href="http://www.filamentgroup.com/lab/buttonElement/"&gt;Styling the Button Element with Sliding Doors&lt;/a&gt; - A technique that demonstrates a cross-browser technique for button elements with sliding doors.  &lt;p&gt;&lt;a href="http://www.filamentgroup.com/lab/buttonElement/"&gt;&lt;img alt="" src="http://noupe.com/img/f12.jpg"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;h6&gt;Form Usability and Accessibility&lt;/h6&gt; &lt;hr&gt;  &lt;p&gt;10) &lt;a href="http://www.alistapart.com/articles/prettyaccessibleforms"&gt;Prettier Accessible Forms&lt;/a&gt; - Nick Rigby takes a look at how to make better and accessible forms using CSS instead of old-school tables.  &lt;p&gt;&lt;a href="http://www.alistapart.com/d/prettyaccessibleforms/example_3/"&gt;Demo :&lt;br&gt;&lt;img alt="" src="http://noupe.com/img/f9.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;11) &lt;a href="http://c82.net/article.php?ID=25"&gt;Check it, don’t select it&lt;/a&gt; - An attempt to use multiple checkboxes in a scrollable list - better than using ctrl-click in a normal multi-select listbox  &lt;p&gt;&lt;a href="http://c82.net/samples/checklist-samples.html"&gt;Fancy Demo :&lt;br&gt;&lt;img alt="" src="http://noupe.com/img/f4.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;12) &lt;a href="http://www.usability.com.au/resources/forms.cfm"&gt;Sensible Forms&lt;/a&gt; - Web Usability - Roger Hudson provides a stunningly clear tutorial on how a form that is well designed with good visual layout will benefit all sighted users  &lt;hr&gt;  &lt;h6&gt;Ajax Forms Processing&lt;/h6&gt; &lt;hr&gt;  &lt;p&gt;13) &lt;a href="http://www.dustindiaz.com/ajax-contact-form/"&gt;AJAX Contact Form&lt;/a&gt; - Excellent example of accessible AJAX. Uses unobtrusive Javascript. By Dustin Diaz.  &lt;p&gt;&lt;a href="http://www.dustindiaz.com/testJax/"&gt;Demo :&lt;br&gt;&lt;img alt="An AJAX contact form" src="http://noupe.com/img/f10.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;14) &lt;a href="http://www.brandspankingnew.net/archive/2006/08/ajax_auto-suggest_auto-complete.html"&gt;AutoSuggest: An AJAX auto-complete text field&lt;/a&gt; - where it adds a popdown menu of suggested values to a text field. The user can either click directly on a suggestion to enter it into the field, or navigate the list using the up and down arrow keys, selecting a value using the tab key.  &lt;p&gt;&lt;a href="http://www.brandspankingnew.net/specials/ajax_autosuggest/ajax_autosuggest_autocomplete.html"&gt;Demo :&lt;br&gt;&lt;img alt="AutoSuggest" src="http://noupe.com/img/f11.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;15) &lt;a href="http://digitarald.de/project/fancyupload/"&gt;FancyUpload using Mootools&lt;/a&gt; - Swf meets Ajax for beautiful file uploads using Mootools.  &lt;p&gt;&lt;a href="http://digitarald.de/playground/uplooad.html"&gt;Demo :&lt;br&gt;&lt;img alt="" src="http://digitarald.de/image/180/0/1/fff/upload/digifancyuploadmx1.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;16) &lt;a href="http://www.malsup.com/jquery/form/"&gt;jQuery Form Plugin&lt;/a&gt; - allows you to easily and unobtrusively upgrade HTML forms to use AJAX to gather information from the form element to determine how to manage the submit process which allows you to have full control over how the data is submitted.  &lt;hr&gt;  &lt;p&gt;17) &lt;a href="http://www.deliciousdays.com/cforms-plugin"&gt;Cforms&lt;/a&gt; - An AJAX Contact form plugin for Wordpress, offering convenient deployment of multiple contact forms throughout your blog or even on the same page.  &lt;p&gt;&lt;a href="http://www.deliciousdays.com/cforms-plugin"&gt;&lt;img alt="" src="http://www.deliciousdays.com/wp-content/themes/dd/cc.php?http://www.deliciousdays.com/wp-content/themes/dd/images/cforms/admin1.jpg" width="412"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;h6&gt;Awesome Form Validation&lt;/h6&gt; &lt;hr&gt;  &lt;p&gt;18 ) &lt;a href="http://tetlaw.id.au/view/javascript/really-easy-field-validation"&gt;Really Easy Field validation with Prototype&lt;/a&gt; - Here’s a form validation script that is very easy to use.  &lt;p&gt;&lt;a href="http://tetlaw.id.au/upload/dev/validation/"&gt;Demo :&lt;br&gt;&lt;img alt="Easy Field validation with Prototype" src="http://noupe.com/img/f14.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;19) &lt;a href="http://www.livevalidation.com/"&gt;Live Validation&lt;/a&gt; - is a small open source javascript library built for giving users real-time validation information as they fill out forms.  &lt;p&gt;&lt;a href="http://www.livevalidation.com/examples"&gt;Demo :&lt;br&gt;&lt;img alt="" src="http://noupe.com/img/f19.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;20) &lt;a href="http://www.roscripts.com/Ajax_form_validation-152.html"&gt;Ajax form validation&lt;/a&gt; - Learn how to use AJAX in order to process and validate your forms.  &lt;p&gt;&lt;a href="http://www.roscripts.com/uploads/articles/151/"&gt;&lt;img alt="Ajax form validation" src="http://noupe.com/img/f1.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;21) &lt;a href="http://zend.lojcomm.com.br/fValidator/exampleB.asp"&gt;fValidator&lt;/a&gt; - fValidator is an open source (free) unobtrusive javascript tool for easy handling form validation.  &lt;p&gt;&lt;a href="http://zend.lojcomm.com.br/fValidator/exampleB.asp"&gt;&lt;img alt="" src="http://noupe.com/img/f19.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;h6&gt;Form Field Hints&lt;/h6&gt; &lt;p&gt;22) &lt;a href="http://www.askthecssguy.com/2007/05/validation_hints_for_your_form_1.html"&gt;Validation Hints for your form&lt;/a&gt; - This article will explain one way of achieving Validation Hints effect while the user type using JavaScript and CSS.  &lt;p&gt;&lt;a href="http://www.askthecssguy.com/examples/validationhints/formfieldhints.html"&gt;&lt;img alt="validation hints" src="http://noupe.com/img/f5.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;23) &lt;a href="http://juicystudio.com/experiments/numbertransfer.php"&gt;Form Help without Popups&lt;/a&gt; - A nice technique for adding help info to forms without using pop-up windows.  &lt;p&gt;&lt;a href="http://juicystudio.com/experiments/numbertransfer.php"&gt;&lt;img alt="validation hints" src="http://noupe.com/img/f32.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;h6&gt;Hide Form Fields&lt;/h6&gt; &lt;hr&gt;  &lt;p&gt;24) &lt;a href="http://www.stuffandnonsense.co.uk/archives/trimming_form_fields.html"&gt;Trimming form fields&lt;/a&gt; - Wouldn’t it be a cool idea to give users the option to hide these optional fields at their own discretion, and with a clever use of Javascript, the DOM and some CSS we can.  &lt;p&gt;&lt;a href="http://www.stuffandnonsense.co.uk/archives/examples/trimming_form_fields_3.html"&gt;Demo :&lt;br&gt;&lt;img alt="Trimming form fields" src="http://noupe.com/img/f16.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;h6&gt;Great Tips for Creating Forms&lt;/h6&gt; &lt;hr&gt;  &lt;p&gt;25) &lt;a href="http://css-tricks.com/tips-for-creating-great-web-forms/"&gt;Tips For Creating Great Web Forms&lt;/a&gt; - so truly important CSS tips for all form builders out there.  &lt;hr&gt;  &lt;p&gt;26) &lt;a href="http://www.sitepoint.com/article/simple-tricks-usable-forms"&gt;Simple Tricks for More Usable Forms&lt;/a&gt; - A number of simple tricks for improving the usability of forms, and hopefully inspire you to improve on them and create your own.  &lt;hr&gt;  &lt;h6&gt;A Must See Examples&lt;/h6&gt; &lt;hr&gt;  &lt;p&gt;27) &lt;a href="http://www.cyberdummy.co.uk/test/slider/"&gt;DOM Javascript Slider Bar&lt;/a&gt;  &lt;p&gt;&lt;a href="http://www.cyberdummy.co.uk/test/slider/"&gt;&lt;img alt="" src="http://noupe.com/img/f18.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;28) &lt;a href="http://digitalbush.com/projects/masked-input-plugin"&gt;Masked Input Plugin&lt;/a&gt;  &lt;p&gt;&lt;a href="http://digitalbush.com/projects/masked-input-plugin"&gt;&lt;img alt="" src="http://noupe.com/img/f21.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;29) &lt;a href="http://www.dustindiaz.com/ajax-contact-updated/"&gt;Ajax Contact Form + YUI&lt;/a&gt;  &lt;p&gt;&lt;a href="http://www.dustindiaz.com/basement/shake-shake-shake.php"&gt;Demo: &lt;br&gt;&lt;img alt="" src="http://noupe.com/img/f22.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;30) &lt;a href="http://nidahas.com/sandbox/form_template.html"&gt;A CSS-based Form Template&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;31) &lt;a href="http://www.agavegroup.com/agWork/prettyForms/"&gt;Pretty Forms&lt;/a&gt;  &lt;p&gt;&lt;a href="http://www.agavegroup.com/agWork/prettyForms/"&gt;&lt;img alt="" src="http://noupe.com/img/f23.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;32) &lt;a href="http://psyrens.com/captcha/"&gt;AJAX CAPTCHA&lt;/a&gt;  &lt;p&gt;&lt;a href="http://psyrens.com/captcha/"&gt;&lt;img alt="" src="http://noupe.com/img/f27.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;33) &lt;a href="http://extjs.com/deploy/ext-2.0-alpha1/examples/form/anchoring.html"&gt;Anchor Layout with Forms&lt;/a&gt;  &lt;p&gt;&lt;a href="http://extjs.com/deploy/ext-2.0-alpha1/examples/form/anchoring.html"&gt;&lt;img alt="" src="http://noupe.com/img/f24.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;34) &lt;a href="http://aariadne.com/uploadform/"&gt;Ext File Upload Form Widget Example&lt;/a&gt;  &lt;p&gt;&lt;a href="http://aariadne.com/uploadform/"&gt;&lt;img alt="" src="http://noupe.com/img/f26.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;35) &lt;a href="http://livepipe.net/projects/control_textarea/"&gt;Control.TextArea- Prototype&lt;/a&gt;  &lt;p&gt;&lt;a href="http://livepipe.net/projects/control_textarea/"&gt;&lt;img alt="" src="http://noupe.com/img/f28.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;36) &lt;a href="http://www.ideasfreelance.com/lab/instant_edit/"&gt;Instant Edit&lt;/a&gt;  &lt;p&gt;&lt;a href="http://www.ideasfreelance.com/lab/instant_edit/"&gt;&lt;img alt="" src="http://noupe.com/img/f33.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;37) &lt;a href="http://www.cyberdummy.co.uk/test/username-ajax.php"&gt;AJAX Check Username&lt;/a&gt;  &lt;p&gt;&lt;a href="http://www.cyberdummy.co.uk/test/username-ajax.php"&gt;&lt;img alt="" src="http://noupe.com/img/f34.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;38) &lt;a href="http://www.dhtmlgoodies.com/index.html?whichScript=ajax_chained_select"&gt;AJAX chained select&lt;/a&gt;  &lt;p&gt;&lt;a href="http://www.dhtmlgoodies.com/scripts/ajax-chained-select/ajax-chained-select.html"&gt;Demo :&lt;br&gt;&lt;img alt="" src="http://noupe.com/img/f35.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;h6&gt;Tutorials&lt;/h6&gt; &lt;p&gt;39) &lt;a href="http://www.codeassembly.com/How-to-make-a-password-strength-meter-for-your-register-form/"&gt;Password strength meter for your register form&lt;/a&gt; - A small tutorial on how to build a password strength meter like the one on Google’s new account form.  &lt;p&gt;&lt;a href="http://www.codeassembly.com/examples/passwordstrength.php"&gt;Demo :&lt;br&gt;&lt;img alt="" src="http://noupe.com/img/f30.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;40) &lt;a href="http://www.captain.at/howto-ajax-form-post-get.php"&gt;AJAX Form POST/GET&lt;/a&gt; - HTML Form Submit with AJAX/Javascript Example/Tutorial  &lt;hr&gt;  &lt;p&gt;41) &lt;a href="http://particletree.com/features/degradable-ajax-form-validation/"&gt;Degradable Ajax Form Validation&lt;/a&gt; - Learn how to provide real-time feedback to the user using server-side validation scripts.  &lt;hr&gt;  &lt;p&gt;42) &lt;a href="http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom"&gt;STYLING FILE INPUTS WITH CSS AND THE DOM&lt;/a&gt; - Shaun Inman shows us a guide to achieving consistent, stylish file upload inputs via clever use of js and css.  &lt;hr&gt;  &lt;p&gt;43) &lt;a href="http://www.evoart.info/?p=36"&gt;Form Styling with CSS&lt;/a&gt;  &lt;hr&gt;  &lt;h6&gt;Online Form Builder&lt;/h6&gt; &lt;hr&gt;  &lt;p&gt;44) &lt;a href="http://wufoo.com/"&gt;Wufoo Form Builder&lt;/a&gt; - Free HTML Form Builder - Create Forms, Surveys and Invitations and more…  &lt;p&gt;&lt;a href="http://wufoo.com/gallery/designs/"&gt;&lt;img alt="wufoo form builder" src="http://noupe.com/img/f6.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;45 ) &lt;a href="http://www.webformfactory.com/"&gt;Web Form Factory&lt;/a&gt; - is an open source web form generator which automatically generates the necessary backend code to tie your form to a database.  &lt;p&gt;&lt;a href="http://www.webformfactory.com/"&gt;&lt;img alt="Web Form Factory" src="http://noupe.com/img/f7.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;46) &lt;a href="http://www.jotform.com/"&gt;Jot Form&lt;/a&gt; - is a great Web based WYSIWYG form builder. You can select a form type(Contact Us, Satisfaction Survey, Job Application, Suggest Website , Membership Registration, Party RSVP , Wedding Attendance, Reservation, Submit Product, and others).  &lt;p&gt;&lt;a href="http://www.jotform.com/"&gt;&lt;img alt="Jot Form" src="http://noupe.com/img/f8.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;p&gt;47) &lt;a href="http://www.formassembly.com/form-garden.php"&gt;Form Assembly&lt;/a&gt; - A Beautiful Collection of CSS Stylesheets For Web Forms  &lt;p&gt;&lt;a href="http://www.formassembly.com/form-garden.php"&gt;&lt;img alt="" src="http://noupe.com/img/f36.gif"&gt;&lt;/a&gt;  &lt;hr&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-3404283850311217911?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/3404283850311217911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=3404283850311217911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/3404283850311217911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/3404283850311217911'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/noupe-47-excellent-ajax-css-forms.html' title='[Noupe] 47+ Excellent Ajax CSS Forms Posted in: Ajax, Javascript, CSS'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-5518922338137823740</id><published>2007-12-17T08:55:00.001-08:00</published><updated>2007-12-17T09:14:23.619-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='winxp'/><category scheme='http://www.blogger.com/atom/ns#' term='utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><title type='text'>[Lifehacker] Speed Up Your Startup Time with BootVis</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;img height="190" alt="bootvis.png" src="http://www.lifehacker.com/assets/resources/2007/12/bootvis.png" width="463" align="center"&gt;&lt;br&gt;Windows only: Freeware application BootVis analyzes your Windows startup, tracking the programs that automatically run and the drivers Windows loads, to show you what processes are slowing down your startup.  &lt;p&gt;&lt;a href="http://www.majorgeeks.com/download.php?det=664"&gt;BootVis&lt;/a&gt; [Major Geeks via &lt;a href="http://www.inspectmygadget.com/2007/12/12/windows-xp-software-bootvis-the-solution-for-slow-startups/"&gt;Inspect My Gadget&lt;/a&gt;] &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://lifehacker.com/software/featured-windows-download/speed-up-your-startup-time-with-bootvis-334199.php"&gt;[Lifehacker] Speed Up Your Startup Time with BootVis&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-5518922338137823740?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/5518922338137823740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=5518922338137823740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/5518922338137823740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/5518922338137823740'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/lifehacker-speed-up-your-startup-time.html' title='[Lifehacker] Speed Up Your Startup Time with BootVis'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-3688459029101203208</id><published>2007-12-13T11:07:00.001-08:00</published><updated>2007-12-13T11:07:55.001-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>“Checkmark” Your Visited Links with Pure CSS</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;img alt="checkmark-example.gif" src="http://css-tricks.com/wp-content/uploads/2007/12/checkmark-example.gif"&gt; &lt;p&gt;Web browsers know which links on a page have been visited by a user (until the cache is cleared out, that is). It is up to you the designer to take advantage of that web browser’s knowledge, if you choose to do so. I’m sure you don’t need to guess, this all happens with CSS. If you choose to not apply any styling to links (&amp;lt;a&amp;gt; elements or “anchor” elements), most browsers have default styling that applies. Typically, blue with underline. In Firefox, visited links become purple with underline. &lt;p&gt;You can take control of the styling of these anchor elements in your CSS by targeting them with pseudo classes. The goal of this tutorial is to get a check mark preceding visited links for a nice visual indicator. You can see an example of this live on &lt;a href="http://www.mikeindustries.com/blog/"&gt;Mike Davidson’s blog&lt;/a&gt;. We will be targeting the &lt;strong&gt;a:visited&lt;/strong&gt; pseudo class, but I will include information on the other anchor pseudo classes later in this article. &lt;h5&gt;The perfect scenario for a pseudo-pseudo class&lt;/h5&gt; &lt;p&gt;Since the goal here is to add the check mark to the links, this is a perfect scenario for the “before” or “after” pseudo classes in CSS. These classes allow you to literally specify page elements and add content to them, right from the CSS. Here is an example:&lt;pre&gt;&lt;code&gt;blockquote:before {&lt;br /&gt;    content: "From the article: ";&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;This will literally put the text “From the article: ” before every single blockquote on your page. Does this muddy the waters between the separation of design and content? Well… maybe a little. But not really. Just don’t think of these content additions as content, think of them as flair, a little something extra for your web design. Because this exists solely in your CSS, this isn’t content that screen readers are going to see or that will make it into your RSS feed.&lt;br /&gt;&lt;p&gt;Do you see where I am going with this pseudo-pseudo thing?&lt;pre&gt;&lt;code&gt;a:visited:before {&lt;br /&gt;   content:  "";&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;We can target visited links and then add content before this with this CSS statement. Now all we need to do is get a check mark in that content. This isn’t quite as intuitive. You can’t use regular glyphs here like you can in HTML. For example, putting &amp;amp;reg; will not work in most browsers. You will actually see that string of characters instead of the registration glyph. Instead you use a forward slash and the ASCII code for the character. 2713 is the code for a check mark. So we have:&lt;pre&gt;&lt;code&gt;a:visited:before {&lt;br /&gt;   content:  "\2713 ";&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Tada! Done! This works perfectly in Firefox, Opera, Safari and.. Oh, wait…&lt;br /&gt;&lt;h5&gt;Internet Explorer 6 doesn’t support non-anchor pseudo classes&lt;/h5&gt;&lt;br /&gt;&lt;p&gt;Awww, that sucks. This is where you need to ask yourself if you care or not. I popped open Mike’s blog to see if he dealt with the IE6 problem. Nope, his links just go grey and underline when visited, but forgo the check mark thing. This is a completely acceptable form of forward-enhancement in design. You use a good browser? Good for you, you get extra nice features. You use an old crappy browser? That’s OK, the page will still look and read fine.&lt;br /&gt;&lt;p&gt;But I have my heart set on this now, let’s get this done! We can do this without the use of the :before or :after selectors, let’s just use the plain a:visited (which IE6 understands just fine), and style that to include the check mark. It’s not going to be text, but we’ll just make that check mark into a graphic and include it that way, check it out:&lt;pre&gt;&lt;code&gt;a:visited {&lt;br /&gt;     padding-left: 14px;&lt;br /&gt;     background: url("http://feeds.feedburner.com/images/checkmark.gif)" left no-repeat;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Now we can celebrate for real. Hooray! This works well in all browsers. Check out the &lt;a href="http://css-tricks.com/examples/CheckVisitedLInks/"&gt;example page.&lt;/a&gt;&lt;br /&gt;&lt;h5&gt;The other anchor pseudo selectors&lt;/h5&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;a:link&lt;/strong&gt; - This one isn’t used a whole heck of a lot because it’s sort of redundant. If it’s an anchor element it’s a link already. The reason it exists is for specificity. You can declare styling here that will not cascade to other anchor styling like it would if you just styled the a element alone. &lt;br /&gt;&lt;li&gt;&lt;strong&gt;a:visited&lt;/strong&gt; - You know this one by now. This is what you use to style links that have been visited, as decided by your browser. &lt;br /&gt;&lt;li&gt;&lt;strong&gt;a:hover&lt;/strong&gt; - This is the most common. Use this to style the rollover state of your links &lt;br /&gt;&lt;li&gt;&lt;strong&gt;a:active&lt;/strong&gt; - I have to admit I was confused by this one for a long time. This is the best way for me to explain it. The active state is what you see if you were to &lt;strong&gt;click and hold&lt;/strong&gt; on a link. You typically will not see the active state for very long, as the page is likely whisking you away to another page. I think it can be fun for a little flair though. Sometimes just a color change on the active state is a nice little touch. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Here is a &lt;a href="http://css-tricks.com/remember-selectors-with-love-and-hate/"&gt;nice way to remember&lt;/a&gt; what the anchor pseudo classes are.&lt;br /&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/CssTricks?a=KlwyCf"&gt;&lt;img src="http://feeds.feedburner.com/~a/CssTricks?i=KlwyCf" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~r/CssTricks/~3/193828219/"&gt;“Checkmark” Your Visited Links with Pure CSS&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-3688459029101203208?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/3688459029101203208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=3688459029101203208' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/3688459029101203208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/3688459029101203208'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/checkmark-your-visited-links-with-pure.html' title='“Checkmark” Your Visited Links with Pure CSS'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-519312822620270063.post-6223824903059943990</id><published>2007-12-13T10:59:00.001-08:00</published><updated>2007-12-13T11:05:20.486-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Min-width and Max-width template</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Some problems seem to appear again and again, and one of them is &lt;strong&gt;page width&lt;/strong&gt;. How wide should a site be? Should you adapt to 800px resolution? 1024px? Fully fluid with percentages? Perhaps elastic using em-units? There are lots to choose from. What I’ve found is that there’s one solution that almost always works. You most probably already know it, but I thought it might be helpful for some to have a template you just copy and use.  &lt;p&gt;The idea is to use a fluid width but limit it by using &lt;code&gt;min-width&lt;/code&gt; and &lt;code&gt;max-width&lt;/code&gt;. As with almost all CSS tricks, we do a little bit of hacking for Internet Explorer 6 (IE6). Link to the working &lt;a href="http://friendlybit.com/files/min-max-template/"&gt;min/max template&lt;/a&gt; is available, and an explanation follows.  &lt;p&gt;I’m picking 760px as the minimum width. It fits within a maximized browser window on 800×600 resolution, accounting for scrollbars. Next we need some kind of max-width, and for this I’m going to pick 960px. I could probably go a bit higher but 960 is nicely divisible with a lot of numbers, 3, 4, 5, 6, 8, 10, 12, 15, and 16, making for nice columns (see &lt;a href="http://cameronmoll.com/archives/2006/12/gridding_the_960/"&gt;Gridding the 960&lt;/a&gt;). Lastly we need some way to tell the browser to follow the width of the browser window when resizing, and width: 100% does that.&lt;pre&gt;&lt;code&gt;#wrapper {&lt;br /&gt;   min-width: 760px;&lt;br /&gt;   max-width: 960px;&lt;br /&gt;   width: 100%;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;This assumes that you have a div with id wrapper around all your content. &lt;br /&gt;&lt;p&gt;The above works perfectly in both Firefox, IE7, Opera, and Safari. But (as usual) there’s one culprit: IE6. To solve this I’m going to use the fact that IE allows for javascript execution inside CSS files. Have a look at the code below:&lt;pre&gt;&lt;code&gt;#wrapper {&lt;br /&gt;   width: 960px;&lt;br /&gt;   width: expression(&lt;br /&gt;      (document.documentElement.clientWidth &amp;gt; 962)? "960px" :&lt;br /&gt;         (document.documentElement.clientWidth &amp;lt; 762)? "760px" :&lt;br /&gt;            "auto"&lt;br /&gt;   );&lt;br /&gt;   height: 1%;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;First, the element gets a width by means of a IE expression(). The expression looks at the window width and if it’s too wide it sets it to 960. It also limits it downwards to 760 pixels. At last we need to set trigger hasLayout on the element, and I usually use height: 1% for that (zoom: 1 works aswell). &lt;br /&gt;&lt;p&gt;[&lt;strong&gt;Update&lt;/strong&gt;: Martin suggests we add a default width when IE have javascript turned off. Excellent, added it to the example. The default width will be applied in IE if javascript is turned off.] &lt;br /&gt;&lt;p&gt;[&lt;strong&gt;Update&lt;/strong&gt;: Matthjis notes that there is a &lt;a href="http://www.cameronmoll.com/archives/000892.html"&gt;bug in IE6&lt;/a&gt; that causes it to freeze sometimes when using the same number for the conditional as for the max or min-value. Updated the code to reflect this. ] &lt;br /&gt;&lt;p&gt;(The expression is built up with two tertiary operators, so &lt;code&gt;(condition)? "true value": "false value";&lt;/code&gt;, with a couple of numbers in it. Check it, it makes sense.) &lt;br /&gt;&lt;p&gt;The IE6-stuff above will of course not validate (and doesn’t work in other browsers), so what we do is enclose it inside a conditional comment. The final &lt;a href="http://friendlybit.com/files/min-max-template/"&gt;min-/max-width example&lt;/a&gt; has all the code you need (I’ve added centering too), but you should of course move the code to an external file. &lt;br /&gt;&lt;p&gt;Happy hacking! &lt;br /&gt;&lt;p&gt;&lt;a href="http://feeds.friendlybit.com/~f/FriendlyBit?a=h4eJTAZ9"&gt;&lt;img src="http://feeds.friendlybit.com/~f/FriendlyBit?i=h4eJTAZ9" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.friendlybit.com/~f/FriendlyBit?a=6GG6NH9j"&gt;&lt;img src="http://feeds.friendlybit.com/~f/FriendlyBit?i=6GG6NH9j" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.friendlybit.com/~f/FriendlyBit?a=6ah1YQ8l"&gt;&lt;img src="http://feeds.friendlybit.com/~f/FriendlyBit?i=6ah1YQ8l" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.friendlybit.com/~f/FriendlyBit?a=EO6lnLQ2"&gt;&lt;img src="http://feeds.friendlybit.com/~f/FriendlyBit?i=EO6lnLQ2" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://friendlybit.com/css/min-width-and-max-width-template/"&gt;Min-width and Max-width template&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/519312822620270063-6223824903059943990?l=devblog.uberwaffle.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devblog.uberwaffle.com/feeds/6223824903059943990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=519312822620270063&amp;postID=6223824903059943990' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/6223824903059943990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/519312822620270063/posts/default/6223824903059943990'/><link rel='alternate' type='text/html' href='http://devblog.uberwaffle.com/2007/12/min-width-and-max-width-template.html' title='Min-width and Max-width template'/><author><name>JoelB</name><uri>http://www.blogger.com/profile/00232299119518939167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
