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

<channel>
	<title>Gilles Vandenoostende &#187; webdev</title>
	<atom:link href="http://blog.vandenoostende.com/tag/webdev/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.vandenoostende.com</link>
	<description>My blog</description>
	<lastBuildDate>Mon, 06 Feb 2012 10:46:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Our (CSS) best practices are killing us</title>
		<link>http://www.stubbornella.org/content/2011/04/28/our-best-practices-are-killing-us/</link>
		<comments>http://blog.vandenoostende.com/2011/our-css-best-practices-are-killing-us/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 12:36:22 +0000</pubDate>
		<dc:creator>@gillesv</dc:creator>
				<category><![CDATA[Linked List ∞]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[markup]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.vandenoostende.com/?p=295</guid>
		<description><![CDATA[[...] In fact, in most cases, the things we considered best practices were leading to the bad outcomes we sought to avoid. I realized (unpopular though it might be), that we couldn’t make it work out well by trying harder. Each time we start a new project, we think “this time, I’m going to keep the code clean. [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>[...] In fact, in most cases, the things we considered best practices were <strong>leading to the bad outcomes</strong> we sought to avoid. I realized (unpopular though it might be), that we couldn’t make it work out well by <strong>trying harder</strong>. Each time we start a new project, we think “this time, I’m going to keep the code clean. This time the project will be a shining example of what can be done with CSS.” And without fail, over time, as more content and features are added to the site, the code becomes a spaghetti tangle of duplication and unpredictability.</p></blockquote>
<p>I was linked to this in the comments of <a title="The problem with CSS pre-processors" href="http://blog.vandenoostende.com/2011/the-problem-with-css-pre-processors/#comments">my previous post</a> and a lot of the points in this article rang true to me.</p>
<p>Web (front-end) developers are constantly trying to walk a tight-rope between semantic purity, standards compliance, writing flexible, maintainable code and just getting the job done <a title="Beer o'Clock" href="http://isitbeeroclock.com/">in time</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vandenoostende.com/2011/our-css-best-practices-are-killing-us/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The problem with CSS pre-processors</title>
		<link>http://blog.vandenoostende.com/2011/the-problem-with-css-pre-processors/</link>
		<comments>http://blog.vandenoostende.com/2011/the-problem-with-css-pre-processors/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 12:01:58 +0000</pubDate>
		<dc:creator>@gillesv</dc:creator>
				<category><![CDATA[Develop]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[less]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.vandenoostende.com/?p=289</guid>
		<description><![CDATA[Miller Medeiros: I will try to explain the most common problems I see every time someone shows a code sample or I see a project written using any of these languages/pre-processors. I&#8217;ve documented my love for LESS on this very blog many times, but it&#8217;s good to see someone pointing out the potential dangers of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.millermedeiros.com/" rel="me">Miller Medeiros</a>:</p>
<blockquote><p>I will try to explain the most common problems I see every time someone shows a code sample or I see a project written using any of these languages/pre-processors.</p></blockquote>
<p>I&#8217;ve documented my love for <a title="LESS CSS" href="http://lesscss.org/">LESS</a> on <a title="Sensible Mediaqueries, with LESS" href="http://blog.vandenoostende.com/2011/sensible-mediaqueries/">this very blog</a> many times, but it&#8217;s good to see someone pointing out the potential dangers of using them: excessive code duplication and the performance hit associated with over-specific selectors<strong>[1]</strong>. Be sure to read the <a title="blog.millermedeiros.com" href="http://blog.millermedeiros.com/2011/11/the-problem-with-css-pre-processors/">full article</a> first, then come back if you want.</p>
<p>Done? Good. Now I&#8217;ll ask you: are these problems with pre-processors, or with how people are using them?</p>
<p>If your only programming experience lies with CSS or HTML, then by all means do yourself a favor and stay away from pre-compilers. I know from experience how easy it is to get carried away with a new language. If you&#8217;re not careful you could quickly end up shooting yourself in the foot by overcomplicating things.</p>
<p>But if you have a good grasp of plain CSS, you know some object-oriented programming and you understand how your LESS/SASS code will compile to CSS&#8230; Why the hell not? You should never see potential abuses by some as a reason to dismiss an entire concept for everyone. Pre-compilers don&#8217;t write bad CSS, bad programmers do!</p>
<p>&nbsp;</p>
<p><strong>[1]</strong> Although unless you&#8217;re writing the next Google, Facebook or some other mammoth web-app, I don&#8217;t think over-specificity means <em>all that much</em> for performance unless you&#8217;re desperate to eek out a precious few <em>milliseconds</em>, of course. It has its effects certainly, but I see it more as a problem hindering efficient code re-use, than with performance. If you find it helps you organize your code so you can more easily find your way, I think it&#8217;s a fair trade-off: After all, CPUs will only become faster, while programmer&#8217;s brains are pretty much stuck at where they are now. You can always optimize and refactor afterwards, if need be.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vandenoostende.com/2011/the-problem-with-css-pre-processors/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>W3Clove ∞</title>
		<link>http://w3clove.com/</link>
		<comments>http://blog.vandenoostende.com/2011/w3clove-%e2%88%9e/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 20:09:51 +0000</pubDate>
		<dc:creator>@gillesv</dc:creator>
				<category><![CDATA[Linked List ∞]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.vandenoostende.com/?p=240</guid>
		<description><![CDATA[Really handy tool to batch-validate an entire site&#8217;s HTML. It&#8217;s a very slow at the moment, but as it&#8217;s in beta I&#8217;ll assume it&#8217;s only going to get better.]]></description>
			<content:encoded><![CDATA[<p>Really handy tool to batch-validate an entire site&#8217;s HTML. It&#8217;s a very slow at the moment, but as it&#8217;s in beta I&#8217;ll assume it&#8217;s only going to get better.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vandenoostende.com/2011/w3clove-%e2%88%9e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lynx would not be impressed ∞</title>
		<link>http://christianheilmann.com/2011/11/16/lynx-would-not-be-impressed-on-semantics-and-html/</link>
		<comments>http://blog.vandenoostende.com/2011/lynx_would_not_be_impressed/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 09:17:48 +0000</pubDate>
		<dc:creator>@gillesv</dc:creator>
				<category><![CDATA[Linked List ∞]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[semantics]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.vandenoostende.com/?p=212</guid>
		<description><![CDATA[Principal Developer Evangelist of the Mozilla Developer Network Christian Heilmann weighs in on the semantics issue: A lot of the debate about semantic value and using the correct HTML is kept alive by people who have been around for a long time and seen browsers fail in more ways we care to remember. Valid markup and sensible structure was [...]]]></description>
			<content:encoded><![CDATA[<p>Principal Developer Evangelist of the <a href="http://developer.mozilla.org/">Mozilla Developer Network</a> Christian Heilmann weighs in on the semantics issue:</p>
<blockquote><p>A lot of the debate about semantic value and using the correct HTML is kept alive by people who have been around for a long time and seen browsers fail in more ways we care to remember. Valid markup and sensible structure was our only chance to reach maintainability and make sense of the things around us. This was especially important in the long long ago. I remember using <a href="http://lynx.browser.org/">Lynx</a> to surf the web.</p></blockquote>
<p>What follows is a brief history of webdesign and he wraps up with some advice for the pragmatic use of HTML</p>
<blockquote>
<ul>
<li>If you write a document by hand, use all the semantics you can add in. This is your handwriting, your code is your poetry and people learn from looking at what you did.</li>
<li>If you need to write a hard-core application and every byte is a prisoner try to play nice with the semantics but follow your end goal of delivering speed. Make sure to tell people though that your code is the end result of conversions and optimisations and not for humans to look at.</li>
<li>Regardless of what you build – when you can use new technology (maybe in connection with old, like <code>&lt;div class="section"&gt;&lt;section&gt;&lt;/section&gt;&lt;/div&gt;</code>) use it.</li>
<li>Remember that the web is not your browser and computer – add fallbacks for other browsers when using bleeding edge technology. When the others catch up you won’t have to alter your code!</li>
<li>The main focus of markup and web code that is not optimised for edge case apps is to make it easy for people to maintain it. If people can see in the HTML what is going on – win. If what only works with JS is generated by JS- even better.</li>
<li>More markup is not a crime when it is markup that adds value. Arguments that STRONG is worse than B because it means more code and slower loading pages are irrelevant in times of gzipping on the server</li>
<li>We can only escape the chicken and egg problem of new HTML when we use it. Right now, if you ask for support in browsers for new elements the answer from most vendors is that nobody uses them so why bother. And when you ask people why they don’t use them they tell you because browsers don’t support them. One of us has to start changing that.</li>
</ul>
</blockquote>
<p>Recommended reading for those of us walking the tightrope between semantic purity and just getting the job done.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vandenoostende.com/2011/lynx_would_not_be_impressed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mark Boulton: Responsive Advertising ∞</title>
		<link>http://www.markboulton.co.uk/journal/comments/responsive-advertising</link>
		<comments>http://blog.vandenoostende.com/2011/mark-boulton-responsive-advertising-%e2%88%9e/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 09:32:31 +0000</pubDate>
		<dc:creator>@gillesv</dc:creator>
				<category><![CDATA[Linked List ∞]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.vandenoostende.com/?p=192</guid>
		<description><![CDATA[The template &#62; slot &#62; ad mental model is engrained both in advertisers, planners and web sites. Providing space for ads needs to be broadened into multiple spaces for one ad concept. This requires closer collaboration between advertisers and web sites, designers and marketeers and sales teams. Mark Boulton offers some ideas for marrying fluid, responsive webdesign with the need [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>The template &gt; slot &gt; ad mental model is engrained both in advertisers, planners and web sites. Providing <em>space</em> for ads needs to be broadened into <em>multiple spaces</em> for one ad <em>concept</em>. This requires closer collaboration between advertisers and web sites, designers and marketeers and sales teams.</p></blockquote>
<p><a title="Mark Boulton.co.uk" href="http://www.markboulton.co.uk/">Mark Boulton</a> offers some ideas for marrying fluid, responsive webdesign with the need for fixed-width advertising banner formats.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vandenoostende.com/2011/mark-boulton-responsive-advertising-%e2%88%9e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Choose your webfonts wisely ∞</title>
		<link>http://elliotjaystocks.com/blog/choose-your-web-fonts-wisely/</link>
		<comments>http://blog.vandenoostende.com/2011/choose-your-webfonts-wisely-%e2%88%9e/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 00:05:49 +0000</pubDate>
		<dc:creator>@gillesv</dc:creator>
				<category><![CDATA[Linked List ∞]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.vandenoostende.com/?p=178</guid>
		<description><![CDATA[I’ve just been reminded of a very important lesson that I occasionally forget: test web fonts on Windows, because a lot of them look shit. Elliot Jay Stocks on the science behind webfont hinting and what to look out for when designing your next site with @font-face.]]></description>
			<content:encoded><![CDATA[<blockquote><p>I’ve just been reminded of a very important lesson that I occasionally forget: test web fonts on Windows, because a lot of them look shit.</p></blockquote>
<p><a title="Elliot Jay Stocks" href="http://elliotjaystocks.com/">Elliot Jay Stocks</a> on the science behind webfont hinting and what to look out for when designing your next site with @font-face.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vandenoostende.com/2011/choose-your-webfonts-wisely-%e2%88%9e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts on Adobe Muse</title>
		<link>http://blog.vandenoostende.com/2011/thoughts-on-adobe-muse/</link>
		<comments>http://blog.vandenoostende.com/2011/thoughts-on-adobe-muse/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 07:30:21 +0000</pubDate>
		<dc:creator>@gillesv</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[Develop]]></category>
		<category><![CDATA[markup]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.vandenoostende.com/?p=151</guid>
		<description><![CDATA[A few days ago Adobe released a public demo/beta of their new web-design tool: Muse. Modelled after Indesign (it&#8217;s made by the same engineers) it aims to allow print-designers to create HTML sites without writing a single line of code. Naturally, this didn&#8217;t work. Many influential webdesigners have already slammed the app&#8217;s many shortcomings &#8211; both [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago Adobe released a public demo/beta of their new web-design tool: <a title="Adobe Muse" href="http://muse.adobe.com/">Muse</a>. Modelled after Indesign (it&#8217;s made by the same engineers) it aims to allow print-designers to create HTML sites without writing a single line of code.</p>
<p>Naturally, this didn&#8217;t work. Many <a href="http://elliotjaystocks.com/blog/adobe-muse-a-step-in-the-wrong-direction/">influential</a> <a href="http://seansperte.com/entry/mused">webdesigners</a> have already slammed the app&#8217;s many shortcomings &#8211; both technical and conceptual, so I won&#8217;t bother to repeat their perfectly valid criticisms. Suffice to say, I wouldn&#8217;t recommend it.</p>
<p>As far as I&#8217;m concerned, Muse&#8217;s biggest shortcoming is the absolutely attrocious quality of the HTML code it generates. But even if Adobe fixed that, by for example switching to a better layout framework and reduced the amount of code by 80%, it would still be a poor substitute for a skillful webdesigner and a text-editor. The reason for this? Semantics.</p>
<p><a href="http://www.zeldman.com/">Jeffrey Zeldman</a> wrote a post last year entitled <a href="http://www.zeldman.com/2010/07/05/an-indesign-for-html-and-css/">&#8220;An indesign for HTML and CSS&#8221;</a>:</p>
<blockquote><p>But Nack’s “constructive” suggestion for Adobe, quoting Michael Slade, is to create “the modern day equivalent of Illustrator and PageMaker for CSS, HTML5 and JavaScript.”</p>
<p>Nack acknowledges that this will be difficult. I propose that it will be impossible. Says Nack:</p>
<blockquote><p>As I noted the other day, “Almost no one would look inside, say, an EPS file and harrumph, ‘Well, that’s not how I’d write PostScript’–but they absolutely do that with HTML.”</p></blockquote>
<p>Well, there is a reason they absolutely do that with HTML. PostScript is a programming language designed to describe page layouts and text shapes in a world of known, fixed dimensions (the world of print), with no underlying semantics. PostScript doesn’t care whether an element is a paragraph, a headline, or a list item. It doesn’t care if a bit of content on one page cites another bit of content on a different page. PostScript is a visual plotting language. And HTML is anything but.</p></blockquote>
<p>HTML isn&#8217;t just a collection of blocks representing pretty pictures: it describes a document, whose content is meant to be consumable by just about anything. A properly written and formatted HTML document should remain human-readable even when viewing the raw source-code. This is an incredibly vital advantage of HTML over other technologies, and to just discard this like a used hankerchief, when the semantic web is right around the corner is hugely irresponsible on Adobe&#8217;s part.</p>
<p>Adobe is essentially lying to untold numbers of print-designers by telling them &#8220;Yes, you could &#8211; nay, <em>should</em> &#8211; be making websites, even if you can&#8217;t code&#8221;. And this my friends, could only lead to calamity: can you imagine handing Muse-generated HTML off to a back-end developer to integrate? He&#8217;d laugh you out of the room! For all Adobe&#8217;s claims to the contrary they are actually widening the gap between designers and developers with every new release.</p>
<p>Indesign can now export Flash sites, DVD menus and those god-awful iPad magazines that are nothing but 500MB zips of &#8220;interactive&#8221; Jpegs (magazines that, by the way, will look like absolute arse when Apple decides to release a retina-display packing iPad). I&#8217;m betting the only reason they didn&#8217;t release Muse as an Indesign plugin was because Indesign isn&#8217;t included in the Web-Premium Creative Suite.</p>
<p>Adobe&#8217;s philosophy that (print-)designers should never have to learn anything other than graphic design is hurting every single app in the creative suite today. Every release, more and more features no professional actually uses are added to already overly complicated and bloated apps.</p>
<p>&#8220;Look!&#8221; they&#8217;ll say, &#8220;without a single line of code I can use inverse-kinematics in Flash!&#8221; For a sales pitch that&#8217;s a pretty compelling feature. A feature noone uses of course, because full-on character animation is rare in a webdesign workflow &#8211; and the professionals I know still do it by hand.</p>
<p>But the feature&#8217;s there, and it&#8217;s taking up space in your tool-palette, memory, keyboard-shortcuts and even required a rewrite of the Flash IDE which means it now consumes 3 to 10% of your CPU (depending on how fast your machine is) at all times, wether you&#8217;re doing something or not. And I&#8217;m sure you can give exampes of similarly useless features across the entire suite.</p>
<p>Bloat and inefficiency aren&#8217;t even the worst side-effects of these additions: it&#8217;s the fact that with every year that passes, the barrier for creative people to get into these apps gets higher and higher. Flash went from being the easiest animation-tool ever to a hugely complicated development framework spread accross three different apps, and multiple programming languages. The animation-tool is still there of course, but it&#8217;s become so bloated, so slow and so unstable that I doubt it could ever enthrall newbies like it enthralled me all those years ago.</p>
<p>Same thing with Dreamweaver: I learnt a great deal about webdesign and hand-coding from toying with Dreamweaver&#8217;s design-view. I didn&#8217;t realize that tables for layout was bad, but then &#8211; noone really did back then. I just drew the layout and then switched to code-view to see how it&#8217;s done. I taught myself a great deal about then-contemporary webdesign techniques, and after a while I switched to hand-coding entirely, simply because it was faster that way. I&#8217;ve been teaching myself how to code better HTML and CSS ever since.</p>
<p>Muse doesn&#8217;t even have a code-view.</p>
<p>Thanks to Photoshop, Flash and Dreamweaver I taught myself how to design, how to animate and how to code, which now means that, given a copy of the Creative Suite (or any similar tool, honestly) and time, I could single-handedly build almost anything I can think of. I fear creatives growing up in Adobe&#8217;s vision of the future will never be able to say that.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vandenoostende.com/2011/thoughts-on-adobe-muse/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sensible mediaqueries</title>
		<link>http://blog.vandenoostende.com/2011/sensible-mediaqueries/</link>
		<comments>http://blog.vandenoostende.com/2011/sensible-mediaqueries/#comments</comments>
		<pubDate>Tue, 31 May 2011 00:59:55 +0000</pubDate>
		<dc:creator>@gillesv</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Develop]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.vandenoostende.com/?p=118</guid>
		<description><![CDATA[Or &#8220;A perfect blend of best practices and developer comfort, using LESS CSS&#8221; Mediaqueries are the new black. They really are, I checked. Ever since A List Apart&#8217;s article on Responsive Web Design it seems like every man and his dog are jumping on the CSS3 mediaqueries bandwagon. But as with all bandwagon jumping, enthusiasm [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://articles.vandenoostende.com/lessmediaqueries/"><img src="http://blog.vandenoostende.com/wp-content/uploads/2011/05/mq.jpg" alt="" title="Media Queries Rock!" width="630" height="161" class="alignnone size-full wp-image-140" /></a></p>
<h3>Or &#8220;A perfect blend of best practices and developer comfort, using LESS CSS&#8221;</h3>
<p>Mediaqueries are the new black. They really are, I checked. Ever since <a href="http://www.alistapart.com/">A List Apart&#8217;s</a> article on <a href="http://www.alistapart.com/articles/responsive-web-design/">Responsive Web Design</a> it seems like every man and his dog are jumping on the CSS3 mediaqueries bandwagon. But as with all bandwagon jumping, enthusiasm can quickly get in the way of efficiency and common sense.</p>
<p>Mediaqueries are awesome, but come with a lot of gotcha&#8217;s.</p>
<h3>Using mediaqueries doesn&#8217;t guarantee your site is optimized for mobile.</h3>
<p>Optimization is more than just changing the layout. Mobile users have a high probability of having a slower than broadband connection, and so it isn&#8217;t a good idea to have them download images made to be viewed at resolutions far higher than their current device.</p>
<p>&#8230; but if you look at most sites displaying responsive layouts today, that&#8217;s exactly what they&#8217;re doing. The first layout they finalize is the standard desktop version, optimized for 1024&#215;768, and they then use mediaqueries to twist and distort their desktop version into a mobile frame. Not only does this result in a coding nightmare where you&#8217;re constantly having to reset your own CSS rules, but it also misses the point of having a mobile site by having their users first download all the desktop-resolution art assets, and then download the smaller images on top of that.</p>
<p>So the best practice for making mobile sites is to build for the smallest screen size first, and then using mediaqueries to create ever bigger layouts as the screen-size goes up (Andy Clarke&#8217;s <a href="http://stuffandnonsense.co.uk/projects/320andup/">320andUp</a> boilerplate modification emphasizes and encourages this practice). Working like this means that the mobile browser won&#8217;t download any of the bigger images that you define in the higher-res mediaqueries. So the mobile version of a site won&#8217;t download the 1600&#215;1200 background image you use in the desktop version, for example.</p>
<p>However, this technique, while being the best practice, is impractical for those of us living in the real world where not everyone (who&#8217;s not on a mobile device) uses Google Chrome on a Macbook Air in a trendy coffeeshop. I&#8217;m talking of course about the dreaded Internet Explorer.</p>
<h3>Mediaqueries break in older browsers.</h3>
<p>And by &#8220;older browsers&#8221; I mean of course IE6, IE7 and IE8. No other browser-manufacturer has upgrade schemes that are as broken as IE&#8217;s which means that we have to continue to support browsers that are literally *years* out of date. (Note: when&#8217;s the last time someone asked you to fix a browser issue with Firefox 2? Exactly my point.)</p>
<p>So anyway, IE right up until version 8 has absolutely no support whatsoever for mediaqueries. The above mentioned 320andUp uses the excellent <a href="https://github.com/rupl/Respond">respond.js</a> script to force IE to recognize and respond to mediaqueries as a workaround to this issue, but I have several reservations against using this.</p>
<p>The first is that it doesn&#8217;t really improve IE users&#8217; experience with the site. Instead of getting a responsive website, they&#8217;re constantly treated to a page that first looks broken, than flashes a bit and then looks okay. Not exactly the shining example of responsive webdesign we&#8217;re looking to serve these people.</p>
<p>Then there&#8217;s the fact that if Javascript is disabled, they&#8217;ll still be stuck with only the lowest-level mobile layout of the site. For IE6 I have no qualms whatsoever about this happening, as it&#8217;s really not that different from just serving them a universal IE6 stylesheet. IE7 and IE8 on the other hand are still shafted though, by having their already suboptimal experience becoming even more crippled.</p>
<p>And then the final reason for using respond.js being a bad idea is that, as a front-end developer on a strict deadline, having not just one, but 2, 3 or even 4 different layouts to debug in Internet Explorer isn&#8217;t exactly a fun thing to look forward to.</p>
<p>And it&#8217;d be mostly wasted effort as well, since most people using IE won&#8217;t expect (or need) to view your site in many different resolutions.</p>
<p>So why give yourself the extra stress? Click on to read my solution.</p>
<p><span id="more-118"></span></p>
<h3>LESS is more</h3>
<p>I&#8217;ve been using LESS CSS (<a href="http://lesscss.org/" title="LESS &laquo; The Dynamic Stylesheet Language">lesscss.org</a>) religiously for over a year now and I just keep finding new and better uses for it. For the uninitiated, LESS is a language built on top of CSS and adds a whole suite of extra features, such as nesting selectors, mixins, color operators and variables.</p>
<p>Using a command-line compiler (or client-side javascript, in the guise of <a href="https://github.com/cloudhead/less.js">less.js</a>, which I&#8217;m not a fan of) it is then possible to compile your lean, mean and well structured LESS into regular CSS, combined, minified, stripped of comments and ready for deployment. If used correctly, it can radically transform the way you write CSS, up to the point where writing vanilla CSS now seems old fashioned and backwards to me.</p>
<p>Recently I&#8217;ve come up with a new way of working that allows you to use mediaqueries in a responsible, mobile-first way, without sacrificing Internet Explorer or requiring extra javascripts all the while saving you extra debug work by only having one layout to worry about for Internet Explorer users.</p>
<h3>Tutorial</h3>
<p>I&#8217;ll first show you the structure I&#8217;m using:</p>
<p><a href="http://blog.vandenoostende.com/wp-content/uploads/2011/05/Screen-shot-2011-05-31-at-10.33.18.png"><img src="http://blog.vandenoostende.com/wp-content/uploads/2011/05/Screen-shot-2011-05-31-at-10.33.18.png" alt="Site Structure" title="Site Structure" width="179" height="285" class="alignnone size-full wp-image-144" /></a></p>
<p>This structure works as follows: both style.less and IE.less import all the other .less files in the <em>mediaqueries/</em> and <em>libs/</em> directories, like so:</p>
<p><script src="https://gist.github.com/1000123.js?file=gistfile1.css"></script> </p>
<p>As you can see, inside the <em>mediaqueries/</em> folder I have a single .less file for every layout I&#8217;m going to build and support.  <em>Global.less</em> is the basest layout, which is essentially what we&#8217;ll be serving to mobile browsers as a baseline. All my mediaqueries are built up on top of eachother, so that a user browsing the site with a minimum desktop resolution of 1024&#215;768 will get the rules of all mediaqueries right up until <em>desktop.less</em>, ignoring <em>huge.less</em> until the user resizes the browser window to be bigger than 1280 pixels. I do this by building my queries around solely a min-width requirement, like so:  </p>
<p><script src="https://gist.github.com/1000126.js?file=gistfile1.css"></script></p>
<p>Inside each of the size-specific .less files, I write all my styles wrapped inside a mix-in, with a pre-filled parameter, like so:</p>
<p><script src="https://gist.github.com/1000131.js?file=gistfile1.css"></script> </p>
<p>That funky shit you&#8217;re seeing are LESS&#8217; support for parametrized  classes. It&#8217;s more commonly used to create reusable mixins, to have variably sized rounded corners, for example, but I&#8217;m using it here to prevent LESS from just inserting the generated code in the parent file where the import statement is declared. So even though I&#8217;m importing the file at the top of <em>style.less</em>, the compiled output won&#8217;t include whatever code I&#8217;ve put inside that parametrized class. This is important for later on.  Now, this is the final version of <em>style.less</em>:  </p>
<p><script src="https://gist.github.com/1000134.js?file=gistfile1.css"></script></p>
<p>When you compile this file, it will automatically expand the layout specific mixins inside the correct mediaquery blocks. In a perfect world where everyone uses a decent, modern browser we could call it a day at this point, but now we&#8217;ll make it so that Internet Explorer can only see one layout, namely the desktop resolution one.</p>
<p>In <em>ie.less</em> we put the following:</p>
<p><script src="https://gist.github.com/1000136.js?file=gistfile1.css"></script> </p>
<p>As I&#8217;ve mentioned before, all layouts inherit from each other, so that the desktop resolution layout re-uses rules defined in both the tablet, mobile and global layouts. Expanding all media-queries after one another means that IE will be served a cascaded layout that only works for the basic desktop resolution.  Using conditional comments, we can now link both compiled stylesheets in the HTML, like so:  </p>
<p><script src="https://gist.github.com/1000144.js?file=gistfile1.css"></script></p>
<p>This way, all versions of IE from version 8 downwards will ignore the mediaquery laden <em>style.css</em> and load <em>ie.css</em> while all good browsers ignore <em>ie.css</em> and just use <em>style.css</em>.</p>
<h3>Conclusion</h3>
<p>I find that the end result is striking in both its efficiency and pragmaticism. We support mobile browsers in a responsible way (i.e mobile first, the rest second) and we maintain excellent support for internet explorer without the use of extra javascripts and without stressing ourselves out trying to support 4 different layouts for crap browsers.</p>
<p>I hope others can learn from this technique so that we can all move forward towards a truly responsive and beautiful web, untethered by the restraints imposed by older browsers.</p>
<p>Download the sources and try it yourself: <a href='http://articles.vandenoostende.com/lessmediaqueries/LESSMediaQueries.zip'>LESSMediaQueries.zip</a> or view <a href="http://articles.vandenoostende.com/lessmediaqueries/">a working example</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vandenoostende.com/2011/sensible-mediaqueries/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Jason Santa Maria: A real webdesign application</title>
		<link>http://blog.vandenoostende.com/2010/jason-santa-maria-a-real-webdesign-application/</link>
		<comments>http://blog.vandenoostende.com/2010/jason-santa-maria-a-real-webdesign-application/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 08:53:56 +0000</pubDate>
		<dc:creator>@gillesv</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Develop]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[markup]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.vandenoostende.com/?p=77</guid>
		<description><![CDATA[Prominent webdesigner Jason Santa Maria wrote an interesting article the other day about the pro&#8217;s &#38; cons of current webdesign tools (such as Photoshop, Fireworks, etc&#8230;) and what a true webdesign application (if it were created today) would need. It&#8217;s an interesting read, so check it out at: http://jasonsantamaria.com/articles/a-real-web-design-application/ The author raises a lot of [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_78" class="wp-caption alignnone" style="width: 610px"><a href="http://jasonsantamaria.com/articles/a-real-web-design-application/"><img class="size-full wp-image-78" title="Jason Santa Maria - A Real Web Design Application" src="http://blog.vandenoostende.com/wp-content/uploads/2010/07/JSMArticle.jpg" alt="Screenshot: Jason Santa Maria - A Real Web Design Application" width="600" height="355" /></a><p class="wp-caption-text">Jason Santa Maria - A Real Web Design Application</p></div>
<p>Prominent webdesigner Jason Santa Maria wrote an interesting article the other day about the pro&#8217;s &amp; cons of current webdesign tools (such as Photoshop, Fireworks, etc&#8230;) and what a true webdesign application (if it were created today) would need. It&#8217;s an interesting read, so check it out at:</p>
<p><a title="Jason Santa Maria: A Real Webdesign Application" href="http://jasonsantamaria.com/articles/a-real-web-design-application/">http://jasonsantamaria.com/articles/a-real-web-design-application/</a></p>
<p>The author raises a lot of valid points, notably the huge disconnect between designing static pixels in Photoshop &amp; co. and the crafting of HTML markup, CSS styles and how to resolve cross-browser inconsistencies. <a title="Zeldman.com - An Indesign for HTML/CSS" href="http://www.zeldman.com/2010/07/05/an-indesign-for-html-and-css/">Jeffrey Zeldman</a> wrote a similar article a while back and makes the point that hand-coding HTML/CSS isn&#8217;t going anywhere anytime soon. I&#8217;m of a similar opinion.</p>
<p><span id="more-77"></span>In my current workflow, I use a myriad of different tools when designing for the web.</p>
<div id="attachment_79" class="wp-caption alignnone" style="width: 336px"><img class="size-full wp-image-79" title="My webdesign tools" src="http://blog.vandenoostende.com/wp-content/uploads/2010/07/WebdesignTools.png" alt="Mac OSX dock with icons of popular webdesign applications" width="326" height="71" /><p class="wp-caption-text">Some of my favourite webdesign tools</p></div>
<p>After wireframing I&#8217;d hop into Photoshop, design all the pages (keeping browser capabilities/limitations at the back of my mind at all times) and then use Layer Comps to review the flow of the site through all the different pages. Some web-designers have begun skipping Photoshop altogether and  designing  straight in the browser, but I&#8217;ve found that a hybrid  solution is still  the best option for getting the most out of your  designs.</p>
<p>Once the client is satisfied with the static comps I fire up Coda, write the markup to be as efficient and semantically valid as possible. With the markup done I hop into CSS, boot up all the virtual machines and alternative browsers I&#8217;d like to support and then I&#8217;m off for several hours of writing a few lines of CSS, Cmd/Ctrl-S, and then tabbing between browsers while pressing F5 to make sure my layout works.</p>
<p>This is a hugely time-consuming process and is usually the cause of great frustration among beginning web-designers (or designers used to the consistency of the Flash platform) &#8211; but for all its faults, it&#8217;s still the best option. All the WYSIWYG (What You See Is What You Get) tools out there either sacrifice flexibility, browser compatibility or cleanliness of the markup. Or, in the worst case, all 3.</p>
<p>Writing semantic, search-able markup is one of the most difficult and multifaceted jobs out there. Most hand-coders even find this to be a difficult task, weighing the different semantic options, and choosing between either making alterations to the original design, or sacrificing markup brevity to stay true to the design&#8217;s visual complexity (i.e. adding more divs). For a machine to be able to do this, it would need not only to understand the different design elements, but the content you&#8217;re designing for as well.</p>
<p>If I was designing such a piece of software, I&#8217;d make it work as a block-based design tool: in the design phase, you just drag &amp; drop all the different &#8220;boxes&#8221; onto a canvas. The design remains mostly static until you come to the export phase. Then your task would be to go through each block, assign a type to it (be it a div, section, header, footer, aside, whatever), give it an id or a class-name and then change the nesting order of the tags (within reason) while the rendering engine attempts to refactor the page&#8217;s CSS to work with the changed markup.</p>
<p>Of course, taking browser inconsistencies into account this becomes an almost mind-bogglingly complex task for a computer to handle. With HTML/CSS, to achieve any kind of style or effect there are as many options and techniques available as there are webdesigners and webbrowsers.</p>
<p>To create a simple header some would use 3 divs and an h1, where others could use just a single div, an h2 and a nested span tag. And that&#8217;s just the markup, adding the myriad of possibilities CSS offers the potential amount of ways you can go about to achieve a certain style or look become infinite. Any webdesigner worth his salt will know at least 3 or 5 different ways to accomplish something in CSS. He&#8217;ll try one way first, finds it works in most browsers except in one instance, and then tries the two other coding techniques until he finds something that yields the most predictable cross-browser results.</p>
<p>Because of the cascading nature of CSS, almost every single situation is unique and there is almost no way of knowing beforehand which technique will yield the best results, except maybe years and years of experience. Software could never be a full substitute for something like that.</p>
<p>As long as our markup is critical to our client&#8217;s business needs (S.E.O. is 80% about having good, clean markup), and web-browsers continue to display subtle (or not so subtle) differences we can never in good conscience use WYSIWIG editors. Perhaps one day, when all rendering engines adhere to the same strict webstandards (or a single engine gains such market dominance and quality that all others would strive to emulate its behaviour) such a design tool could become a reality, but until then you&#8217;re still better off learning to code by hand.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vandenoostende.com/2010/jason-santa-maria-a-real-webdesign-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selling progressive enhancement to conservative clients</title>
		<link>http://blog.vandenoostende.com/2009/selling-progressive-enhancement-to-conservative-clients/</link>
		<comments>http://blog.vandenoostende.com/2009/selling-progressive-enhancement-to-conservative-clients/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 11:43:05 +0000</pubDate>
		<dc:creator>@gillesv</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Develop]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.vandenoostende.com/?p=49</guid>
		<description><![CDATA[Consider the following scenario: you're asked to design and develop a website for a big client. It's a large company, with probably thousands of employees. A bank, for example, or a large pharmaceutical company. Or maybe it's a government contract, or a big public sector player, like public transport or the electric or gas company.

What all of these clients have in common, is that 9 times out of 10 they'll all be lorded over by a restrictive and overly protective IT department, who only updates their software and hardware every other decade. Which means the client will be looking at your work through the shit-tinted goggles of IE6...]]></description>
			<content:encoded><![CDATA[<p class="intro">Indulge me, if you will, in a little hypothetical. Consider the following scenario: you&#8217;re asked to design and develop a website for a big client. It&#8217;s a large company, with probably thousands of employees. A bank, for example, or a large pharmaceutical company. Or maybe it&#8217;s a government contract, or a big public sector player, like public transport or the electric or gas company.</p>
<p>What all of these clients have in common, is that 9 times out of 10 they&#8217;ll all be lorded over by a restrictive and overly protective IT department, who only updates their software and hardware every other decade. Which means the client will be looking at your work through the shit-tinted goggles of IE6.<span id="more-49"></span></p>
<p>But you&#8217;re used to that by now. You know all the dirty tricks and hacks in the book, so you make the site. You know the client won&#8217;t be able to see modern web stuff, so you deliberately stay away from them. No round corners, no fancy fonts, little or no Ajax-techniques and no obvious transparent PNGs.</p>
<p>That&#8217;s not to say you&#8217;re making a bad site, on the contrary. Some of the best design is done within tight constraints, and a little restraint never hurt anyone. Also, most of these clients have pretty restrictive corporate identities and styleguides anyway. So you design your site, slightly boring, but ultimately functional and usable. Something, maybe like this:</p>
<div id="attachment_50" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-50" title="un-enhanced" src="http://blog.vandenoostende.com/wp-content/uploads/2009/11/un-enhanced.jpg" alt="A plain-jane website" width="500" height="256" /><p class="wp-caption-text">A plain-jane website</p></div>
<p>The client approves the comps, and the finalized website is online soon afterwards. The client tests the site on their internal, locked-down network and sees exactly what he was promised in the comps, being rendered in IE6. The client also notes that the site feels snappy and loads quickly, even on their outdated hardware. A direct result of the site&#8217;s design being restrained and sober.</p>
<p>The client then drives home, and, feeling a little bit proud of the work he&#8217;s helped to achieve, decides to whip out his personal laptop and opens up the site in a more modern browser (Google Chrome, Safari or Firefox, perchance), so he can show his wife what he&#8217;s been doing all these weeks. At first, a shock.</p>
<div id="attachment_51" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-51" title="enhanced" src="http://blog.vandenoostende.com/wp-content/uploads/2009/11/enhanced.jpg" alt="Wait, what's all this then?" width="500" height="256" /><p class="wp-caption-text">Wait, what&#39;s all this then?</p></div>
<p>This site looks a lot better than it did a few hours ago in the office! What happened here? There&#8217;s subtle animations, tasteful rounded corners and the odd drop shadow here and there. The headings are rendered in a slick custom font that he never recalled installing and the entire site just oozes quality.</p>
<p>&#8220;Did I pay for this?&#8221;, the client wonders, &#8220;Who ordered these upgrades?&#8221;</p>
<p>First thing next morning he calls you, and asks where those upgrades came from, and why they&#8217;re suddenly gone again, now that he&#8217;s looking at the site back on his office machine sporting IE6.</p>
<p>&#8220;Well,&#8221; you start, &#8220;have you heard of &#8216;progressive enhancement&#8217;?&#8221;</p>
<p><strong>Progressive Enhancement?</strong></p>
<p>Progressive Enhancement is a web-design methodology that aims to provide the best user experience to as many types of browsers and users as possible. It does this by building the site for the oldest browsers, making sure it works great for them, and then adding enhancements for modern browsers on top of that framework, so people get a more enhanced experience, the more modern, or progressed, their browser is.</p>
<div id="attachment_52" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-52" title="ProgressiveEnhancement-disection" src="http://blog.vandenoostende.com/wp-content/uploads/2009/11/ProgressiveEnhancement-disection.jpg" alt="Some of the techniques you might use to enhance the site." width="500" height="309" /><p class="wp-caption-text">Some of the techniques you might use to enhance the site.</p></div>
<p>It is closely related to another methodology called Graceful Degradation. This works the other way around, where you build a website that has all the bells and whistles you can imagine (AJAX, CSS3, etc&#8230;) and then either hacking those to work with the older browsers, or making sure that those browsers fail &#8220;gracefully&#8221;, in other words, so that the site remains usable when certain features simply don&#8217;t work.</p>
<p>The advantage of PE over GD is that with PE, you&#8217;re always certain that most of your users wile have a great experience, and that their experience will only improve in time as they upgrade their browsers. With GD, you only hope that people stuck with older browsers won&#8217;t be freaked out too much, and that future browsers won&#8217;t choke on your ancient hacks.</p>
<p>For new, let&#8217;s go back to the hypothetical client. You&#8217;ve just given him the gist of what Progressive Enhancement is all about, but as I&#8217;m sure you can imagine, several different outcomes to this conversation are possible.</p>
<p>Best case scenario, the client &#8220;gets&#8221; it, and is thrilled to know that you&#8217;ve covertly built him a future proof website that scales beautifully, from the ancient, turn-of-the-century browsing dinosaurs to the latest CSS3-, HTML5-sporting Web 3.0 browsers.</p>
<p>Worst case scenario is that the client demands those same enhancements be recreated for IE6. But now you&#8217;ve got an arsenal of valid counter-arguments, such as:</p>
<ul>
<li>It&#8217;ll take a lot of extra time and money to get that kind of visual fidelity in older browsers.</li>
<li>Updating or upgrading the site later on will take longer and thus will be more expensive.</li>
<li>The site won&#8217;t run as fast as it does now, both on IE as well as on modern browsers.</li>
<li>Etc&#8230;</li>
</ul>
<p>So, unless your client is Satan himself and/or completely immune to reason or logic, you&#8217;ll have saved yourself a mountain of extra work, and earned yourself a contented, loyal new customer, one with a better understanding of what designing for the web entails.</p>
<p>And all it took, was a little</p>
<p><strong>Managing expectations</strong></p>
<p>We designers have a tendency to pull out all the stops when we&#8217;re mocking up a  website. We know what&#8217;s theoretically possible in all browsers, so we don&#8217;t skimp on the frivolous details. Technically, rounded corners and drop shadows and the like are all possible on IE6. They just require a lot of hacking, extra markup, extra images&#8230; all of them slowing down the rest of the site for everyone. So, what to do?</p>
<p>Well, it just requires adding just one extra step to your existing process.</p>
<p>First you design your site like you always do, pulling out all the graphical &amp; typographical stops as you see fit. Then, when you&#8217;re happy with it &#8211; STOP. Don&#8217;t send it to the client just yet. Instead, duplicate your file and tone it down. Take out everything you know is difficult to do in IE6. Better yet, ask the guy who&#8217;ll be writing the CSS to do that for you. After removing all the frivolous eye-candy, give the comp a final spit &amp; polish to make sure the design still *pops* and only <em>then</em> send it to the client.</p>
<p>After the usual bout of back&amp;forth, and you finally get client approval for the &#8220;restrained&#8221; comp, build that, re-adding some or even all of the eye-candy by way of targeted CSS3 and AJAX, so those with modern browsers get the enhanced &#8220;special edition&#8221;.</p>
<p>It&#8217;s a difficult balancing act, sure, and it requires an intimate working knowledge of CSS and browser capabilities, as well as a keen eye for design, but the rewards for dealing with these &#8220;conservative&#8221; clients in this way are legion, and you&#8217;ll end up with:</p>
<ul>
<li>Smoother &amp; quicker development cycles, as there&#8217;s little or nothing to hack.</li>
<li> A site that just works and has no IE overhead.</li>
<li>A client who might feel as though they got more than they bargained for.</li>
<li>Happy users, regardless of what browser they&#8217;re using.</li>
</ul>
<p>Now wouldn&#8217;t that be nice?</p>
<p><em>Addendum:</em><br />
The example given is a mock-site for a mock-client. It was quickly thrown together as an example of what&#8217;s possible with progressive enhancement.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vandenoostende.com/2009/selling-progressive-enhancement-to-conservative-clients/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced)
Database Caching 1/53 queries in 0.095 seconds using disk
Object Caching 548/677 objects using disk

Served from: blog.vandenoostende.com @ 2012-02-06 13:22:10 -->
