<?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>Learning the World &#187; web development</title>
	<atom:link href="http://learningtheworld.eu/tag/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://learningtheworld.eu</link>
	<description></description>
	<lastBuildDate>Tue, 06 Nov 2012 00:17:33 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.1</generator>
	<item>
		<title>Please Provide Padding</title>
		<link>http://learningtheworld.eu/2009/please-provide-padding/</link>
		<comments>http://learningtheworld.eu/2009/please-provide-padding/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 18:00:09 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[accessibility]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[bahn.de]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Deutsche Bahn]]></category>
		<category><![CDATA[Fitt's Law]]></category>
		<category><![CDATA[padding]]></category>
		<category><![CDATA[relaunch]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/?p=490</guid>
		<description><![CDATA[There are other websites were you can buy train tickets, but if you live in Germany it's most likely that you will book a ticket on the website of <strong lang="de" xml:lang="de">Deutsche Bahn</strong> (German railways). Much has been said about accessibility on that site, and sure there's room for improvements in future updates. But some things just work well&#160;[&#8230;]]]></description>
				<content:encoded><![CDATA[<p>There are other websites were you can buy train tickets, but if you live in Germany it&#8217;s most likely that you will book a ticket on the website of <strong lang="de" xml:lang="de"><a href="http://bahn.de">Deutsche Bahn</a></strong> (German railways). Much has been said about accessibility on that site, and sure there&#8217;s room for improvements in future updates. But some things just work well:</p>

<p>I was responsible for most of the programming beneath the navigation bar on the home page, and every time when I book a ticket there&#8217;s a small feature I enjoy so much I want to tell you about it: <strong>the buttons on the date selector</strong> are really, really tiny (16&nbsp;&times; 8px). As you know thanks to <a href="/2007/usability-analysis/">Fitt&lsquo;s Law</a>, there are even formulas to calculate how much better <em>big</em> buttons can be hit.</p>

<p><strong>So I just added some padding.</strong> And that makes a huge difference: try to click on the same buttons later on in the booking process where the padding is missing.</p>

<p><img src="/wp-content/uploads/2009/04/screenshot-bahn-datepicker-300x214.jpg" alt="Screenshot of the padding on datepicker buttons" width="300" height="214" class="book" /></p>

<p>If I could make one improvement I would add <strong>keyboard functionality</strong> to those buttons. Alas as the datepicker itself came from a third party, the assembled code was beyond my control. But I know that the <a href="http://vimeo.com/4153807"><span lang="de" xml:lang="de">Deutsche Bahn</span> is listening</a> to the needs of people with disabilities and their disability advisory board members are highly competent, so I trust these and other issues will be fixed soon&nbsp;&hellip;</p>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2009/please-provide-padding/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Foreground Sprites</title>
		<link>http://learningtheworld.eu/2007/foreground-sprites/</link>
		<comments>http://learningtheworld.eu/2007/foreground-sprites/#comments</comments>
		<pubDate>Thu, 26 Jul 2007 13:00:55 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[accessibility]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[css sprites]]></category>
		<category><![CDATA[DOM scripting]]></category>
		<category><![CDATA[foreground sprites]]></category>
		<category><![CDATA[hover]]></category>
		<category><![CDATA[image swapping]]></category>
		<category><![CDATA[img element]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mouseover]]></category>
		<category><![CDATA[rollover]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/2007/foreground-sprites/</guid>
		<description><![CDATA[Most rollovers have become obsolete because they can be performed on background images with <strong><acronym title="Cascading Style Sheets">CSS</acronym> sprites</strong>. However, there are those rare cases when there is just an icon without text, like a &#8220;play&#8221; or &#8220;pause&#8221; button. This article discusses how to apply <acronym>CSS</acronym> sprites for foreground images.&#160;[&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="alert"><ins datetime="20080626T200000">Please consider a better solution with <a href="/2008/better-foreground-sprites/">Better Foreground Sprites</a>.</ins></p>

<p>Most rollovers have become obsolete because they can be performed on background images with <strong><a href="http://www.alistapart.com/articles/sprites/"><acronym title="Cascading Style Sheets">CSS</acronym> sprites</a></strong>. If there are hover effects today, they usually come as text on a button background image, or as a text link with an icon next to it.</p>

<p>However, there are those rare cases when there is <strong>just an icon without text</strong>, like a &ldquo;play&rdquo; or &ldquo;pause&rdquo; button, or a magnification glass on an image to signal it can be enlarged. If you want to swap images when the element receives focus or on mouseover, traditionally you are stuck with two options:</p>

<ol>
<li>JavaScript to change the image source, or</li>
<li><acronym>CSS</acronym> sprites to change the position of a background image behind a transparent <code>gif</code> image.</li>
</ol>

<p>I like neither. Using JavaScript and two images with pre-loading seems like a waste of resources when it can be done with <acronym>CSS</acronym> and one image only. Transparent gifs are <em>so</em> 1998, besides the background usually doesn&rsquo;t get printed. So what we need on these occasions are <strong><acronym>CSS</acronym> sprites for foreground images</strong>.</p>

<p>Until recently I thought that can&rsquo;t be done, but then I stumbled upon some code for <a href="http://download.dojotoolkit.org/release-0.9.0beta/dojo-0.9.0beta/dijit/tests/form/test_Checkbox.html">checkbox widgets in Dojo</a>. Naturally they use a lot of JavaScript for the task. Anyway I like my default checkboxes and don&rsquo;t have any urge to make them prettier (I have no doubt our design overlords would enforce <em>aqua</em> icons everywhere), but that made me think. Here&rsquo;s a suggestion:</p>

<p>First a simple sprite which is 50px wide: <img src="/examples/img/icon-enlarge.gif" width="50" height="15" alt="Two icons of a magnification glass" class="example sprite" /></p>

<p>The <acronym title="Hypertext Markup Language">HTML</acronym> code uses the dimensions of a <em>single</em> icon for width and height to allow fast page rendering without reflow:</p>

<ol class="code">
<li><code>&lt;a href=&quot;/big/&quot; class="icon"&gt;</code></li>
<li class="indent"><code>&lt;img src=&quot;/img/icon-enlarge.gif&quot; id=&quot;magnifier&quot; <strong>width=&quot;19&quot; height=&quot;15&quot;</strong> alt=&quot;enlarge image&quot; /&gt;</code></li>
<li><code>&lt;/a&gt;</code></li>
</ol>

<p>The corresponding <acronym>CSS</acronym> sets the link to <code>display: block</code>, uses the single icon dimensions for the container, prevents overflow, and resets the image dimensions to <code>auto</code> to prevent distortion. The actual image swapping is achieved by a negative left margin on hover.</p>

<ol class="code">
<li><code>a.icon {</code></li>
<li class="indent"><code><strong>display: block;</strong></code></li>
<li class="indent"><code><strong>width: 19px;</strong></code></li>
<li class="indent"><code><strong>height: 15px;</strong></code></li>
<li class="indent"><code><strong>overflow: hidden;</strong></code></li>
<li><code>}</code></li>
<li><code>a.icon img {</code></li>
<li class="indent"><code><strong>width: auto;</strong></code></li>
<li class="indent"><code><strong>height: auto;</strong></code></li>
<li class="indent"><code>border: none;</code></li>
<li><code>}</code></li>
<li><code>a.icon:hover img, a.icon:focus img, a.icon img.hover {</code></li>
<li class="indent"><code><strong>margin-left: &minus;31px;</strong></code></li>
<li><code>}</code></li>
</ol>

<p>For the sake of simplicity I ignored how the link would be floated or positioned. Also borders, a background color, or padding to increase the clickable area can be added to the parent element.</p>

<p>For simplicity I chose a link in the example, but the same can be done with a <code>div</code> surrounding an <code>&lt;input type=&quot;image&quot;&nbsp;/&gt;</code>. Then of course you need to define <code>cursor: pointer</code>, and for anything below <acronym title="Internet Explorer">IE</acronym>7 bind the <acronym title="Document Object Model">DOM</acronym> event to the hovering element (<a href="/examples/js/foreground-sprites-ie6.js" type="text/javascript" title="JavaScript source code to fix Internet Explorer">get the source</a>):</p>

<ol class="code">
<li><code>&lt;!--[if lt IE 7]&gt;</code></li>
<li><code>&lt;script type=&quot;text/javascript&quot;&gt;</code></li>
<li><code>oIcon = {</code></li>
<li class="indent"><code>setHoverClass : function() {</code></li>
<li class="indent"><code><span class="indent"><strong>this.className = &#x27;hover&#x27;;</strong></span></code></li>
<li class="indent"><code>},</code></li>
<li class="indent"><code>resetHoverClass : function() {</code></li>
<li class="indent"><code><span class="indent"><strong>this.className = &#x27;&#x27;;</strong></span></code></li>
<li class="indent"><code>}</code></li>
<li><code>};</code></li>
<li><code>var elm = document.getElementById(&#x27;magnifier&#x27;);</code></li>
<li><code>if (elm) {</code></li>
<li class="indent"><code>elm.onmouseover = elm.onfocus = oIcon.setHoverClass;</code></li>
<li class="indent"><code>elm.onmouseout = elm.onblur = oIcon.resetHoverClass;</code></li>
<li><code>}</code></li>
<li><code>&lt;/script&gt;</code></li>
<li><code>&lt;![endif]--&gt;</code></li>
</ol>

<p><strong>Here is a working example</strong>. You know how to adjust the code if you need more than one class on the image.</p>

<p><a href="#" class="icon"><img src="/examples/img/icon-enlarge.gif" id="magnifier" width="19" height="15" alt="enlarge image" /></a></p>

<p>That was nice and easy. It&rsquo;s tested in Firefox&nbsp;2, Opera&nbsp;9, Internet Explorer 5+, and Safari&nbsp;2. Screen readers should be okay with the <code>alt</code> text.</p>

<h3>Discussion</h3>

<p>The trouble begins when people <strong>start turning off browser features</strong>.</p>

<p>People with <strong>disabled images</strong> won&rsquo;t be able to read the alternative text because the visible area is limited by the parent container. That can be detected by comparing the known sprite size with the <code>alt</code> text size. Then the class is set to anything but <code>icon</code> so that the parent container expands.</p>

<p>More severe is when people <strong>disable style sheets</strong> because then they will see a squeezed image with multiple icons. If you are hyper-correct, you could replace the crushed multi-icon image with the correct single icon (you could use the <code>class</code> or <code>rel</code> attribute to define the icon type), but nobody wants to slice images. As a compromise I would suggest to replace the icon with its <code>alt</code> text.</p>

<p>See the <a href="/examples/js/foreground-sprites-access.js" type="text/javascript" title="JavaScript source code for accessibility">script</a> to detect disabled images or <acronym>CSS</acronym>. (Note: it isn&rsquo;t implemented here because I couldn&rsquo;t test it properly on <acronym>IE</acronym>6 with stuff turned off.)</p>

<p>If JavaScript is unavailable, the user is stranded with what we gave him. Also <strong>icons without text are inherently evil</strong> because they can&rsquo;t be enlarged by zoom readers. Did I forget any politically correct disclaimer for obscure use scenarios?</p>

<p>So we ended up with a <acronym>CSS</acronym> only version, but still some JavaScript is needed for the extra effort to provide the same experience to users of <acronym>IE</acronym> 5-6, and some more for certain user scenarios. Wouldn&rsquo;t it be easier to slice and swap foreground images the old way? But then again slicing is a pain, and people already start using background images. <strong>Do people actually turn off <acronym>CSS</acronym> and images?</strong> Or is that another remnant of <acronym title="Web Content Accessibility Guidelines">WCAG</acronym> 1.0 from 1999?</p>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2007/foreground-sprites/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Graded Browser Support Q2 Update</title>
		<link>http://learningtheworld.eu/2007/graded-browser-support-q2-update/</link>
		<comments>http://learningtheworld.eu/2007/graded-browser-support-q2-update/#comments</comments>
		<pubDate>Tue, 08 May 2007 14:30:41 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[web development]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[browser support]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[graded browser support]]></category>
		<category><![CDATA[Nate Koechley]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/2007/graded-browser-support-q2-update/</guid>
		<description><![CDATA[Based on Nate Koechley&#8217;s concept of graded browser support we terminated support for Firefox&#160;1.5 because it&#8217;s no longer supported and upgraded by Mozilla. Also we changed Opera support from 9.0 to 9.x, where &#8220;x&#8221; stands for the latest stable version.&#160;[&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Based on <a href="http://nate.koechley.com/blog/" rel="colleague met">Nate Koechley&rsquo;s</a> concept of <strong><a href="http://developer.yahoo.com/yui/articles/gbs/gbs.html">graded browser support</a></strong> we terminated support for Firefox&nbsp;1.5 because it&rsquo;s no longer supported and upgraded by Mozilla. Also we changed Opera support from 9.0 to 9.x, where &ldquo;x&rdquo; stands for the latest stable version.</p>

<h3 id="bluemars-matrix">Matrix of supported browsers in BlueMars projects</h3>

<table cellspacing="0" cellpadding="0" class="gbs">
                    <tbody>
                        <tr class="first">
                            <td></td>
                            <th scope="col">Windows XP</th>
                            <th scope="col"><abbr title="Macintosh OS v10.4 Tiger">Mac 10.4</abbr></th>
                            <th scope="col"><abbr title="Debian Linux">Linux</abbr></th>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Internet Explorer 7">IE 7.0</abbr></th>
                            <td class="a">A-grade</td>
                            <td class="na">n/a</td>
                            <td class="na">n/a</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Internet Explorer 6.0 Service Pack 2">IE 6.0</abbr></th>
                            <td class="a">A-grade</td>
                            <td class="na">n/a</td>
                            <td class="na">n/a</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Internet Explorer 5.5">IE 5.5</abbr></th>
                            <td class="c">C-grade</td>
                            <td class="na">n/a</td>
                            <td class="na">n/a</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Internet Explorer 5.01 Service Pack 2">IE 5.0</abbr></th>
                            <td class="c">C-grade</td>
                            <td class="dead">&dagger;</td>
                            <td class="na">n/a</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Mozilla Firefox 2.0, latest version">Firefox 2.0.x</abbr></th>
                            <td class="a">A-grade</td>
                            <td class="a">A-grade</td>
                            <td class="a">A-grade</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="opera 9, latest version">Opera 9.x</abbr></th>
                            <td class="a">A-grade</td>
                            <td class="x">X-grade</td>
                            <td class="x">X-grade</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Safari 2, latest version">Safari 2.0.x</abbr></th>
                            <td class="na">n/a</td>
                            <td class="a">A-grade</td>
                            <td class="na">n/a</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Konqueror, latest Version">Konqueror 3.5.x</abbr></th>
                            <td class="na">n/a</td>
                            <td class="na">n/a</td>
                            <td class="a">A-grade</td>
                        </tr>
                    </tbody>
                </table>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2007/graded-browser-support-q2-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Graded Browser Support Q4 Update</title>
		<link>http://learningtheworld.eu/2006/graded-browser-support-q4-update/</link>
		<comments>http://learningtheworld.eu/2006/graded-browser-support-q4-update/#comments</comments>
		<pubDate>Tue, 28 Nov 2006 17:00:05 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[web development]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[browser support]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[graded browser support]]></category>
		<category><![CDATA[Nate Koechley]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/2006/graded-browser-support-q4-update/</guid>
		<description><![CDATA[Nate Koechley introduced Yahoo!&#8217;s smart concept of <a href="http://developer.yahoo.com/yui/articles/gbs/gbs.html">graded browser support</a> nine months ago. Until then we did test on a lot of browsers, but all browsers were supported equal. Now came this man who suggested distinctions... Almost unnoticed were <strong>two updates</strong> of the browser matrix in August and a couple of days ago.&#160;[&#8230;]]]></description>
				<content:encoded><![CDATA[<blockquote cite="http://developer.yahoo.com/yui/articles/gbs/gbs.html">
<p>&ldquo;Expecting two users using different browser software to have an identical experience fails to embrace or acknowledge the heterogeneous essence of the Web.&rdquo;</p>
</blockquote>

<p class="vcard"><a href="http://nate.koechley.com/blog/" class="url fn" rel="colleague met">Nate Koechley</a> introduced Yahoo!&rsquo;s smart concept of <strong><a href="http://developer.yahoo.com/yui/articles/gbs/gbs.html">graded browser support</a></strong> nine months ago. Until then we did test a lot of browsers, but all browsers were supported equal. Now came this man who suggested distinctions, a <em>graded</em> instead of a boolean or binary support.</p>

<ul>
<li><p>There is a blacklist of <strong>C-grade</strong> browsers. They are antiquated, but <strong>core</strong> content and functionality should work in them. Never mind the design though, as some of them do not support <acronym title="Cascading Style Sheets">CSS</acronym>&nbsp;2. Semantics and good accessibility are more important and tested by <acronym title="Quality Assurance">QA</acronym>.</p></li>
<li><p>Then there is a whitelist of <strong>advanced (A-grade)</strong> browsers supporting modern web standards. <acronym title="Quality Assurance">QA</acronym> tests these browsers, and bugs are handled with high priority.</p></li>
<li><p>The rest of the unknown or rare browsers are <strong>X-grade</strong>. It is assumed they support modern web standards, but it would be inefficient and impossible to test them.</p></li>
</ul>

<p>That&rsquo;s a very <a href="http://yuiblog.com/blog/2006/11/15/browser-support-update-2006q4/#comment-15788" title="Nate Koechley about cost benefits">pragmatic and efficient</a> framework since it adds scalability for <acronym title="Quality Assurance">QA</acronym>.</p>

<p>Almost unnoticed were <strong>two updates</strong> of the browser matrix in <a href="http://yuiblog.com/blog/2006/08/18/browser-support-update-2006q3/" title="Graded Browser Support Q3 Update">August</a> and a <a href="http://yuiblog.com/blog/2006/11/15/browser-support-update-2006q4/" title="Graded Browser Support Q4 Update">couple of days ago</a> where Opera&nbsp;8 got replaced by Opera&nbsp;9, also support for Internet Explorer 5.5, Safari&nbsp;1 and Firefox&nbsp;1.0 has been discontinued because they are vanishing species. Support for Firefox 2.0 has been added, while Mozilla suite has been terminated since there are virtually no differences between Firefox and Mozilla suite.</p>

<p>Our own matrix includes Konqueror, but otherwise it&rsquo;s more or less the same as the current <a href="http://developer.yahoo.com/yui/articles/gbs/gbs_browser-chart.html">Yahoo! browser matrix</a>, although we do not test rare Windows versions like Windows 98 or 2000. Here is the adapted matrix we use in our own projects. Do you think that&rsquo;s a reasonable approach?</p>

<h3 id="bluemars-matrix">Matrix of supported browsers in BlueMars projects</h3>

<table cellspacing="0" cellpadding="0" class="gbs">
                    <tbody>
                        <tr class="first">
                            <td></td>
                            <th scope="col">Windows XP</th>
                            <th scope="col"><abbr title="Macintosh OS v10.4 Tiger">Mac 10.4</abbr></th>
                            <th scope="col"><abbr title="Debian Linux">Linux</abbr></th>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Internet Explorer 7">IE 7.0</abbr></th>
                            <td class="a">A-grade</td>
                            <td class="na">n/a</td>
                            <td class="na">n/a</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Internet Explorer 6.0 Service Pack 2">IE 6.0</abbr></th>
                            <td class="a">A-grade</td>
                            <td class="na">n/a</td>
                            <td class="na">n/a</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Internet Explorer 5.5">IE 5.5</abbr></th>
                            <td class="c">C-grade</td>
                            <td class="na">n/a</td>
                            <td class="na">n/a</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Internet Explorer 5.01 Service Pack 2">IE 5.0</abbr></th>
                            <td class="c">C-grade</td>
                            <td class="dead">&dagger;</td>
                            <td class="na">n/a</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Mozilla Firefox 2.0, latest version">Firefox 2.0.x</abbr></th>
                            <td class="a">A-grade</td>
                            <td class="a">A-grade</td>
                            <td class="a">A-grade</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Mozilla Firefox 1.5, latest version">Firefox 1.5.x</abbr></th>
                            <td class="a">A-grade</td>
                            <td class="a">A-grade</td>
                            <td class="a">A-grade</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Mozilla Firefox 1.0.7">Firefox 1.0.7</abbr></th>
                            <td class="x">X-grade</td>
                            <td class="x">X-grade</td>
                            <td class="x">X-grade</td>
                        </tr>
                        <tr>
                            <th scope="row">Opera 9.0</th>
                            <td class="a">A-grade</td>
                            <td class="x">X-grade</td>
                            <td class="x">X-grade</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Safari 2, latest version">Safari 2.0.x</abbr></th>
                            <td class="na">n/a</td>
                            <td class="a">A-grade</td>
                            <td class="na">n/a</td>
                        </tr>
                        <tr>
                            <th scope="row"><abbr title="Konqueror, latest Version">Konqueror 3.5.x</abbr></th>
                            <td class="na">n/a</td>
                            <td class="na">n/a</td>
                            <td class="a">A-grade</td>
                        </tr>
                    </tbody>
                </table>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2006/graded-browser-support-q4-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>To Hell with Joe Clark</title>
		<link>http://learningtheworld.eu/2006/to-hell-with-joe-clark/</link>
		<comments>http://learningtheworld.eu/2006/to-hell-with-joe-clark/#comments</comments>
		<pubDate>Thu, 31 Aug 2006 13:00:58 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[accessibility]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[web standards]]></category>
		<category><![CDATA[A List Apart]]></category>
		<category><![CDATA[Joe Clark]]></category>
		<category><![CDATA[To Hell with WCAG 2]]></category>
		<category><![CDATA[WAI]]></category>
		<category><![CDATA[WCAG]]></category>
		<category><![CDATA[WCAG 2.0]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/2006/to-hell-with-joe-clark/</guid>
		<description><![CDATA[Joe Clark&#8217;s article &#8220;To Hell with <acronym title="Web Content Accessibility Guidelines">WCAG</acronym>&#160;2&#8221; was an eye-opener. It raised critical awareness for the last-call <acronym title="World Wide Web Consortium">W3C</acronym> working draft, which lead to the extension of the comments period. Still the degree of concern and fear didn&#8217;t need to be raised. He exaggerated many issues, distorted them by omission, or in some cases he&#8217;s plain wrong.&#160;[&#8230;]]]></description>
				<content:encoded><![CDATA[<h3 id="toc">In this article:</h3>

<ul class="toc">
    <li><a href="#intro">Introduction</a></li>
    <li><a href="#differences">Differences between <acronym>WCAG</acronym>&nbsp;1 and <acronym>WCAG</acronym>&nbsp;2</a></li>
    <li><a href="#what-is-wrong-with-wcag-2">What&rsquo;s wrong with <acronym>WCAG</acronym>&nbsp;2?</a></li>
    <li><a href="#discussion">Discussion</a></li>
    <li><a href="#conclusion">Conclusion</a></li>
</ul>

<h3 id="intro">Introduction</h3>

<p>His article <strong>&ldquo;<a href="http://alistapart.com/articles/tohellwithwcag2/">To Hell with <acronym title="Web Content Accessibility Guidelines">WCAG</acronym>&nbsp;2</a>&rdquo;</strong> was an eye-opener. Joe Clark expressed his <strong>angriness about the <acronym title="World Wide Web Consortium">W3C</acronym></strong>, its slow, lobby-driven, bureaucratic processes, the gruelling <a href="http://lists.w3.org/Archives/Public/w3c-wai-ig/2000OctDec/0573">internal fights</a> within working groups and the <dfn>Web Accessibility Initiative</dfn> (<acronym>WAI</acronym>) in particular. The <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/"><acronym>WCAG</acronym>&nbsp;2.0 Working Draft</a> was a disappointment, basically unreadable, impossible to understand, and failing in major issues after five years in the making (<a href="http://www.w3.org/TR/WCAG10/"><acronym>WCAG</acronym>&nbsp;1</a> took a little longer than <em>two</em> years to become a <em>finalized standard</em>).</p>

<p id="major-flaws">At that time I hadn&rsquo;t read <acronym>WCAG</acronym>&nbsp;2 yet. Joe Clark&rsquo;s passionate article was a revelation, and all the blogs I read agreed with him. Perhaps I wasn&rsquo;t the only one who hadn&rsquo;t read the working draft by then. Because now I have, and while there are some valid points in his inflammatory speech, there are also <strong>major flaws</strong>.</p>

<p id="list-of-major-flaws">Did you know that, contrary to Joe Clark&rsquo;s beliefs, <strong>validating code <em>is</em> a requirement</strong>? That <strong>semantic markup <em>is</em> enforced</strong>? Other issues are <strong>totally overrated</strong>, like claiming a <em>decent tab order</em> was equal to the &ldquo;<q>prohibition of CSS layouts</q>.&rdquo; But more on that later.</p>

<p id="state-of-the-w3c">His assault on the <acronym>W3C</acronym> set a spark to the tinderbox, and suddenly we heard concerns confirming the bad state of the Consortium from respected celebs like <a href="http://www.zeldman.com/2006/07/17/an-angry-fix/">Jeffrey Zeldmann</a>, <a href="http://www.webstandards.org/2006/07/26/misplaced-anger-a-rebuttal-to-zeldmans-criticism-of-the-w3c/" rel="colleague met">Molly Holzschlag</a>, <a href="http://meyerweb.com/eric/thoughts/2006/08/14/angry-indeed/" rel="colleague met">Eric Meyer</a>, <a href="http://lists.w3.org/Archives/Public/public-qa-dev/2006Jul/0011" xml:lang="de" lang="de">Björn Höhrmann</a>, and <a href="http://lists.w3.org/Archives/Public/public-qa-dev/2006Jul/0020">Tim Berners-Lee</a>, to name a few.</p>

<p id="behavior">Clark&rsquo;s public criticism might be seen as a bold and important step. However, actually calling group members &ldquo;<q><a href="http://lists.w3.org/Archives/Public/public-comments-wcag20/2006May/0119">arrogant and ignorant</a></q>,&rdquo; hanging up during conference calls and allegations like &ldquo;<q>some teenagers have greater understanding of valid, semantic markup than the Working Group</q>&rdquo; <span class="nowrap">(<abbr title="ibidem, same place">ibid.</abbr>)</span> hurts the cause. If you <a href="http://www.w3.org/Search/Mail/Public/search?keywords=joeclark&#038;hdr-1-name=from&#038;hdr-1-query=joeclark&#038;index-type=g&#038;index-grp=Public__FULL&#038;resultsperpage=200&#038;sortby=date">search the <acronym>WAI</acronym> mailing list</a> for more contributions from Joe Clark, you will immediately notice his <a href="http://lists.w3.org/Archives/Public/w3c-wai-gl/2005JulSep/0485">egocentric</a>, <a href="http://lists.w3.org/Archives/Public/w3c-wai-gl/2005AprJun/0855">cynical</a>, and often <a href="http://lists.w3.org/Archives/Public/w3c-wai-gl/2005AprJun/0744">insulting</a> style. He criticizes ignorance and harassment within that working group, <strong>but he&rsquo;s part of the problem</strong>.</p>

<p id="w3c-improvements">Meanwhile <strong><em>some</em> things seem to go right at the <acronym>W3C</acronym>:</strong> the <a href="http://www.molly.com/2006/08/14/angry-not-zeldman-meyer-and-fair-concerns-about-the-w3c/" title="Molly Holzschlag about the Internationalization Activity"><acronym title="Internationalization">I18N</acronym> activity</a> led by Richard Ishida, or the quick embracing of <a href="http://microformats.org/blog/2006/03/02/microformats-voted-best-session-at-w3c-technical-plenary-day/">Microformats</a>, <a href="http://www.w3.org/TR/web-forms-2/">Web Forms</a>, <a href="http://www.w3.org/TR/WAPF-REQ/">Widgets and Gadgets</a>, and the <a href="http://www.w3.org/TR/xhtml-role/"><acronym title="Extensible Hypertext Markup Language">XHTML</acronym> 1.1 Role Attribute Module</a>.</p>

<p id="negative-tabindex">The latter has to be seen in context with <a href="http://www-03.ibm.com/press/us/en/pressrelease/7839.wss"><acronym>IBM</acronym>&rsquo;s contribution</a> to the Mozilla source code for <a href="http://developer.mozilla.org/en/docs/Accessible_DHTML"><acronym title="Dynamic Hypertext Markup Language">DHTML</acronym> accessibility</a>. To implement that important technique, <acronym>IBM</acronym> has proposed an extension of the <acronym>HTML</acronym> specification to allow a <a href="http://lists.w3.org/Archives/Public/w3c-wai-gl/2005JulSep/0662" title="IBM&rsquo;s Richard Schwerdtfeger defending their choice">negative tabindex</a>. Joe Clark <a href="http://alistapart.com/articles/tohellwithwcag2/#WCAG-documents:standards">overstates</a> that simple extension as &ldquo;<q><acronym>IBM</acronym> actively promoting a <acronym>DHTML</acronym> technique that breaks the <acronym>HTML</acronym> specification</q>.&rdquo;</p>

<h3 id="differences">Differences between <acronym>WCAG</acronym>&nbsp;1 and <acronym>WCAG</acronym>&nbsp;2</h3>

<p id="principles"><acronym>WCAG</acronym>&nbsp;2 introduces four basic principles of accessibility. Content must be <strong><acronym title="Perceivable, Operable, Understandable, Robust">POUR</acronym></strong>:</p>

<ol>
    <li><strong>P</strong>erceivable</li>
    <li><strong>O</strong>perable</li>
    <li><strong>U</strong>nderstandable</li>
    <li><strong>R</strong>obust</li>
</ol>

<p id="success-criteria">The guidelines are organized around these four principles, and <em>checkpoints</em> for the guidelines are now called <strong>success criteria</strong>. Each success criterion comes with an <a href="http://www.w3.org/TR/2006/WD-UNDERSTANDING-WCAG20-20060427/">extended commentary</a>, <a href="http://www.w3.org/TR/2006/WD-WCAG20-TECHS-20060427/">techniques to meet the guidelines</a>, and common failures. That&rsquo;s more comprehensive than version&nbsp;1 and leaves less room for ambiguity.</p>

<p id="levels">The <strong>success criteria</strong> for each guideline <strong>are organized into three levels</strong>, though not all guidelines contain success criteria at every level. Levels are like <em><acronym>WCAG</acronym>&nbsp;1 priorities</em>, but they are more precise. <acronym>WCAG</acronym>&nbsp;1 checkpoints had only <em>one</em> priority allocated, while a success criterion with <em>multiple</em> levels can be more differentiated.</p>

<p id="triple-a">In the past programming a website to <strong>conform to level triple-A</strong> was an almost impossible and disproportionate effort. Besides guidelines always have room for interpretation, so it is possible that experts disagree if a criterion has been met. Therefore the working group was pragmatic enough to grant triple-A conformance if at least 50% of all level&nbsp;3 criteria are fulfilled.</p>

<p id="baseline">Techniques for a website are defined in a <strong>public <a href="http://www.w3.org/WAI/WCAG20/baseline/">baseline</a></strong>, like &ldquo;<q>the specification that this content <em>relies upon</em> is: <acronym title="Extensible Hypertext Markup Language">XHTML</acronym>&nbsp;1.0 (Strict). The specifications that this content <em>uses but does not rely on</em> are: JavaScript 1.2, <acronym title="Cascading Style Sheets">CSS</acronym>&nbsp;2.</q>&rdquo; You can specify any reasonable technique, there&rsquo;s no longer a preference for <acronym title="World Wide Web Consortium">W3C</acronym> techniques &mdash; if Flash is accessible enough and sufficient for the job, you don&rsquo;t have to use <acronym title="Synchronized Multimedia Integration Language">SMIL</acronym>. More on the <a href="#baseline-technologies">baseline concept</a> later. In the same way your <a href="#conformance-claims">conformance claims</a> and <a href="#conformance-scope">conformance scope</a> are published.</p>

<p id="generic-terms">Since the working group tried to be as generic as possible, <strong>some terms changed</strong>. They speak of <em>&ldquo;web units&rdquo;</em> instead of &ldquo;pages&rdquo;, because <em>web units</em> include things like <acronym title="Asynchronous JavaScript and XML">Ajax</acronym> applications, which wouldn&rsquo;t be covered by the term &ldquo;page.&rdquo; You get used to the terms fairly quick.</p>

<p id="more-cases">The guidelines were extended to be less ambiguous and include <a href="http://www.w3.org/TR/WCAG20/appendixD#newl1" title="List of new requirements in WCAG 2">more cases</a>. Deeply hidden within the documents are some true gems, for <a href="http://www.revoluser.com/2006/05/24/preventing-spam-with-creativity/" title="Techniques for accessible CAPTCHA">example</a> <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/guidelines.html#text-equiv" title="Success Criterion 1.1.1.3 for accessible CAPTCHA">accessible <acronym title="Completely Automated Public Turing-Test to Tell Computers and Humans Apart">CAPTCHA</acronym></a> or <a href="http://www.w3.org/TR/2006/WD-WCAG20-TECHS-20060427/Overview.html#SCR21" title="DOM scripting technique for accessible Ajax explained in W3C documents">accessible</a> <a href="http://juicystudio.com/article/making-ajax-work-with-screen-readers.php" title="Accessible Ajax technique further discussed"><acronym>Ajax</acronym></a>. Wonderful!</p>

<h3 id="what-is-wrong-with-wcag-2">What&rsquo;s wrong with <acronym>WCAG</acronym>&nbsp;2?</h3>

<p id="scattered-information"><strong>The information is yet too scattered</strong> among different documents, which makes it hard to read and comprehend. However, the working group notes it&rsquo;s still work in progress, and they want to create separate files for each success criterion as well as a navigation structure. That sounds like the commented <a href="http://www.bitvtest.de/?a=dl&amp;t=s" hreflang="de">German accessibility guidelines</a>, so I&rsquo;m positive that the end-result will be more usable.</p>

<p id="readability">I must admit it could also be <a href="http://www.alistapart.com/comments/tohellwithwcag2?page=8#78" title="Comments on the original article about readability">more readable</a>. A professional copywriter could help, but I can imagine <em>the exact wording</em> of each success criterion was probably a big issue in <acronym>WAI</acronym> meetings, so the stakeholders won&rsquo;t give up so easily just for enhanced readability.</p>

<p id="lack-of-cognitive-requirements">Speaking of comprehension and easy reading, <strong>severe flaws can be found in the cognitive department</strong>. &ldquo;<a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#N10516">Making text content readable and understandable</a>&rdquo; is a joke. Guidelines for <a href="http://www.w3.org/TR/WAI-WEBCONTENT/#gl-complex-elements">context and orientation</a>, <a href="http://www.w3.org/TR/WAI-WEBCONTENT/#gl-facilitate-navigation">navigation</a>, and <a href="http://www.w3.org/TR/WAI-WEBCONTENT/#gl-facilitate-comprehension">comprehension</a> have been more or less dropped since <acronym>WCAG</acronym>&nbsp;1.</p>

<p id="usability">We&rsquo;ve come a long way to understand these features are <em>not</em> for cognitively challenged people alone, but they are <strong>basic requirements for <em>all</em> of us</strong>. Young people with insufficient reading skills, elderly who are new to the Internet &mdash; we all benefit from features like breadcrumb paths, a consistent navigation with clear wording, well written text, or relevant search results. These guidelines spell <strong>usability!</strong> <a href="http://lists.w3.org/Archives/Public/public-comments-wcag20/2006Jun/0118" title="Formal objection to WCAG 2.0 claiming to address cognitive limitations">We can&rsquo;t allow</a> having them removed!</p>

<h3 id="discussion">Discussion</h3>

<p id="discussion-intro">His article raised critical awareness for the last-call <acronym title="World Wide Web Consortium">W3C</acronym> working draft, which lead to the <a href="http://www.alistapart.com/comments/tohellwithwcag2?page=9#84">extension of the comments period</a>. Still the degree of concern and fear didn&rsquo;t need to be raised. Many issues are <a href="http://www.alistapart.com/comments/tohellwithwcag2?page=7#62">exaggerated</a>, distorted by omission, or plain wrong. Let&rsquo;s discuss them in detail:</p>

<ol class="claims">
    <li>
        <h4 id="definitions-of-page-and-site" class="lt-10">1. Definitions of &ldquo;page&rdquo; and &ldquo;site&rdquo;</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-60">
            <p>Exactly what a &ldquo;page&rdquo; is, let alone a &ldquo;site,&rdquo; will be a matter of dispute.</p>
        </blockquote>
        <p>Agreed. Although everybody <em>knows</em> what these terms mean, a <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/appendixA">formal definition</a> is missing. But there are more important issues. That&rsquo;s a typical Joe Clark.</p>
    </li>
    <li>
        <h4 id="valid-html" class="lt-10">2. Valid <acronym>(X)HTML</acronym></h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-0">
            <p>A future website that complies with <acronym>WCAG</acronym>&nbsp;2 won&rsquo;t need valid <acronym title="Hypertext Markup Language">HTML</acronym> &mdash; at all, ever. (More on that later.) You will, however, have to <a href="http://www.w3.org/TR/2006/WD-WCAG20-TECHS-20060427/#F28-procedure">check the <acronym title="Document Object Model">DOM</acronym> outputs of your site in multiple browsers</a> and prove they&rsquo;re identical.</p>
        </blockquote>
        <p>Not true. <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/guidelines#ensure-compat-parses">Success criterion 4.1.1</a> in plain English demands that <abbr>IDs</abbr> must be unique and elements properly nested. <strong>One technique to ensure that is <a href="http://www.w3.org/TR/2006/WD-WCAG20-TECHS-20060427/#G134">validation</a>.</strong> How was it possible that Joe Clark missed such an important point? Had he actually read his printouts, or was he just summarizing his correspondence with the working group?</p>
        <p>However, it is true that a <strong>comparison of <acronym>DOM</acronym> outputs</strong> is seen as an <em>alternative</em> technique to ensure proper nesting or well-formedness. That won&rsquo;t work. Even valid code doesn&rsquo;t result in <em>identical</em> <acronym>DOM</acronym> outputs in multiple browsers. Take for example line-breaks and code indented with tabs (white-space): Mozilla counts these as text-nodes, while <acronym title="Internet Explorer">IE</acronym> ignores them in the <acronym>DOM</acronym> tree. Besides it would be a tremendous effort to compare the trees <em>manually</em>. Would somebody please create a validation tool with different browser engines under the hood?</p>
    </li>
    <li>
        <h4 id="table-layout" class="lt-10">3. Table layout</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-10">
            <p>You can still use tables for layout. (And not just <em>a</em> table&nbsp;&mdash; <a href="http://www.w3.org/TR/2006/WD-WCAG20-TECHS-20060427/#N11001">table<em>s</em> for layout</a>, <a href="http://www.w3.org/TR/2006/WD-WCAG20-TECHS-20060427/#N11138">plural</a>.)</p>
        </blockquote>
        <p>Of course we know the disadvantages of table layout, and they are a pain to every standardista. From a pure <strong>accessibility standpoint</strong> they are tolerable as long as they can be <strong>linearized</strong> and <a href="http://www.w3.org/TR/2006/WD-WCAG20-TECHS-20060427/Overview#G115">semantic markup</a> like <code>&lt;<acronym title="table header">th</acronym>&gt;</code> isn&rsquo;t misused. But speaking semantically, isn&rsquo;t a <code>&lt;<acronym title="table data">td</acronym>&gt;</code> supposed to represent tabular data?</p>
    </li>
    <li>
        <h4 id="blinking-elements" class="lt-10">4. Blinking elements</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-25">
            <p>Your page, or any part of it, may <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#time-limits-blink">blink for up to three seconds</a>. <a href="http://www.w3.org/TR/2006/WD-UNDERSTANDING-WCAG20-20060427/#seizure-does-not-violate-terms">Parts of it</a> may not, however, &ldquo;flash.&rdquo;</p>
        </blockquote>
        <p>Everybody hates the infamous <code>blink</code> tag because it makes text unreadable. But I don&rsquo;t think that&rsquo;s what they are speaking of. It&rsquo;s more like in <strong>banner ads</strong>, or in <strong><acronym title="Asynchronous JavaScript and XML">Ajax</acronym> notifications</strong>. For three seconds I can live with that. The difference between <em>blinking</em> and <em>flashing</em> is the frequency; the latter can result in epileptic seizures. Simply avoid anything between three and fifty flashes per second.</p>
    </li>
    <li>
        <h4 id="baseline-technologies" class="lt-10">5. Baseline technologies</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-40">
            <p>You&rsquo;ll be able to define entire technologies as a &ldquo;<a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#baseline" id="really-says:a-45">baseline</a>,&rdquo; meaning anyone without that technology has little, if any, recourse to complain that your site is inaccessible to them.</p>
        </blockquote>
        <p>Not true. Baselines have to be <strong><a href="http://www.w3.org/WAI/WCAG20/baseline/#who2" title="reasonable baselines">reasonable</a></strong>. If they are not reasonable, others, including your government, can set a baseline.</p>
        <p>There are a couple of <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#baseline-setting">examples for reasonable baselines</a>, like &ldquo;<q>only technologies that have been widely supported by more than one accessible and affordable user agent for more than one release</q>&rdquo; for a government site. More examples can be found in the&nbsp;&hellip;</p>
    </li>
    <li>
        <h4 id="conformance-claims" class="lt-10">6. Conformance claims</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-65">
            <p>If you wish to claim <acronym>WCAG</acronym>&nbsp;2 compliance, you must publish a <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#conformance-required">checklist of declarations</a> more reminiscent of a forced confession than any of the accessibility policies typically found today.</p>
        </blockquote>
        <p>Hmm, which of the following do you think is clearer?</p>
        <ol class="alpha">
            <li><a href="http://www.w3.org/WAI/WCAG1AA-Conformance"><img src="http://www.w3.org/WAI/wcag1AA.gif" class="example" alt="W3C WCAG&nbsp;1.0 Conformance Level Double-A" width="88" height="31" /></a></li>
            <li>
                <blockquote cite="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#conformance-examples">
                    <p>On 5&nbsp;May 2006, &ldquo;G7: An Introduction&rdquo; http://telcor.example.com/nav/G7/intro.html conforms to <acronym>W3C</acronym>&rsquo;s <acronym>WCAG</acronym>&nbsp;2 <strong>Conformance Level Double-A</strong>. The following <strong>additional success criteria</strong> have also been met: 1.1.2, 1.2.5, and 1.4.3. The baseline for this claim is UDBaseline#1-2006 at http://UDLabs.org/baselines#1-2006.html. The specification that this content <strong>&ldquo;relies upon&rdquo;</strong> is: <acronym>XHTML</acronym> 1.0 (Strict), and Real Video. The specifications that this content <strong>&ldquo;uses but does not rely on&rdquo;</strong> are: JavaScript 1.2, <acronym>CSS</acronym>&nbsp;2.</p>
                </blockquote>
            </li>
        </ol>
        <p>My vote goes for the <acronym>WCAG</acronym>&nbsp;2 conformance claim. Include this elegantly as a <acronym title="Resource Description Framework">RDF</acronym> file within a <code>&lt;link&gt;</code> (something missing in this working draft), and I&rsquo;m a happy developer.</p>
    </li>
    <li>
        <h4 id="conformance-scope" class="lt-10">7. Conformance scope</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-50">
            <p>You&rsquo;ll be able to define entire directories of your site as off-limits to accessibility (including, in <acronym>WCAG</acronym>&nbsp;2&rsquo;s own example, <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#conformance-scoping">all your freestanding videos</a>).</p>
        </blockquote>
        <p>That&rsquo;s true. But you can&rsquo;t <strong>exclude integral parts</strong> of a process, like parts of a shop, though further definition would be required which parts can be excluded and which can&rsquo;t. It becomes clearer when you take an example where the <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#conformance-wcag1">scope is set with a date</a>:</p>
        <blockquote cite="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#conformance-wcag1">
            <p>Materials with creation or modification dates before 31&nbsp;December 2006 conform to <acronym>WCAG</acronym>&nbsp;1.0 Level Double-A. Materials with creation or modification dates after 31&nbsp;December 2006 conform to <acronym>WCAG</acronym>&nbsp;2.0 Level Double-A.</p>
        </blockquote>
        <p>I can imagine cases where new content does conform to <acronym>WCAG</acronym>&nbsp;2, while nobody bothers to touch <a href="http://www.w3.org/TR/REC-html32" title="Hypertext Markup Language Recommendation 3.2">really old content</a> somewhere deep in the archives. So scoping is a <strong>practical issue</strong>: rather have conformance for the new and important parts than none at all.</p>
    </li>
    <li>
        <h4 id="video" class="lt-10">8. Video</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-75">
            <p>Not that anybody ever made them accessible, but if you post videos online, you no longer have to provide audio descriptions for the blind at <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#N10516">the lowest &ldquo;conformance&rdquo; level</a>. And only prerecorded videos require captions at that level.</p>
        </blockquote>
        <p>Joe Clark was dubbed <a href="http://www.theatlantic.com/doc/prem/200109/erard" rel="nofollow"><q>the king of closed captions</q></a>, so from his point of view <acronym>WCAG</acronym>&nbsp;2 must be a <strong>step backwards</strong>: audio descriptions for prerecorded video are required on level&nbsp;2, on level&nbsp;1 either audio descriptions or a transcript will be sufficient. Audio descriptions for <em>live</em> video content were <a href="http://lists.w3.org/Archives/Public/w3c-wai-gl/2006AprJun/0195">dropped</a> in November 2005, and captions for live videos are level&nbsp;2.</p>
        <p><acronym>WCAG</acronym>&nbsp;1 was very vague and <a href="http://www.w3.org/TR/WCAG10-TECHS/#tech-synchronize-equivalents">didn&rsquo;t make distinctions</a> between live and prerecorded video. Everything had to have audio descriptions on the lowest level. The WCAG&nbsp;2 approach doesn&rsquo;t go that far. Although this might be disappointing, it is more differentiated and more reasonable.</p>
    </li>
    <li>
        <h4 id="audio" class="lt-10">9. Audio</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-85">
            <p>Your podcasts may have to be remixed so that dialogue is <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#visual-audio-contrast-noaudio">20 decibels louder than lengthy background noise</a>. (You don&rsquo;t have to caption or transcribe them, since they aren&rsquo;t &ldquo;<a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#multimediadef" id="really-says:a-95">multimedia</a>&rdquo; anymore. [&hellip;]</p>
        </blockquote>
        <p>I agree not many people have the equipment to correctly measure a difference of 20&nbsp;<acronym title="Decibels">dB(A)</acronym>, but as a rule of thumb any <strong>dialogue should be easy to understand</strong>. Having my own program on a free radio station I can dig that. But there&rsquo;s another major point Joe misses: although technically <strong>audio only</strong> is not <em>multi</em>media, it <strong><a href="http://www.w3.org/TR/2006/WD-UNDERSTANDING-WCAG20-20060427/#N1013E">still has to be transcribed</a></strong>.</p>
    </li>
    <li>
        <h4 id="skip-links">10. Skip links</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-105">
            <p>You can put a few hundred navigation links on a single page and do nothing more, but if you have <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#navigation-mechanisms-skipcb">two pages together</a> that have three navigation links each, you must provide a way to skip navigation.</p>
        </blockquote>
        <p>Skip links are good, I don&rsquo;t mind to have them everywhere. But in <acronym>WCAG</acronym>&nbsp;1 &ldquo;<q>a few hundred navigation links</q>&rdquo; would have been required to be structured with subheadlines to enhance understanding. That&rsquo;s the real issue here!</p>
    </li>
    <li>
        <h4 id="offscreen-positioning">11. Offscreen positioning</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-115">
            <p>You can&rsquo;t use offscreen positioning to add labels (e.g., to forms) that only some people, like users of assistive technology, can perceive. <em><a href="http://www.w3.org/TR/2006/WD-UNDERSTANDING-WCAG20-20060427/#content-structure-separation-programmatic-intent-head">Everybody</a></em> has to see them.</p>
        </blockquote>
        <p>Although the intent of that criterion clearly is to <strong>make structure available to screen readers</strong> through semantic markup, the sentence Joe Clark refers to <em>could</em> be interpreted the way he does. Here&rsquo;s the <a href="http://www.w3.org/TR/2006/WD-UNDERSTANDING-WCAG20-20060427/#content-structure-separation-programmatic-intent-head" title="Link to the text Joe Clark refers to">original</a>:</p>
        <blockquote cite="http://www.w3.org/TR/2006/WD-UNDERSTANDING-WCAG20-20060427/#content-structure-separation-programmatic-intent-head">
            <p>The purpose of this success criterion is to ensure that when such relationships are perceivable to one set of users, those relationships can be made to be perceivable to all.</p>
        </blockquote>
        <p>That&rsquo;s not really new. Think of <strong>zoom readers</strong> with tab navigation via keyboard. If you place content offscreen, it can be quite irritating if an element gains focus and still is not visible. Good practice would require at least changing the element&rsquo;s position to a visible area when it gets <code>:focus</code>. Although labeling <em>forms</em>, like in Joe&rsquo;s example, can be achieved <em>without</em> offscreen positioning since the <a href="http://www.w3.org/TR/2006/WD-WCAG20-TECHS-20060427/Overview#H65" title="Using the title attribute on form input fields">title attribute</a> is deemed sufficient.</p>
    </li>
    <li>
        <h4 id="tab-source-order">12. Tab source order</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-125">
            <p><acronym>CSS</acronym> layouts, particularly those with absolutely-positioned elements that are removed from the document flow, may simply be <a href="http://www.w3.org/TR/2006/WD-WCAG20-TECHS-20060427/#N100C7">prohibited</a> at the highest level. In fact, source order must match presentation order even at the lowest level.</p>
        </blockquote>
        <p><strong><a href="http://www.positioniseverything.net/articles/onetruelayout/anyorder">Death to any order columns!</a> <a href="http://alistapart.com/articles/holygrail">Death to the Holy Grail!</a></strong> I can understand the feelings some have towards that, but again it&rsquo;s <a href="http://www.w3.org/TR/WAI-WEBCONTENT/#tech-tab-order">nothing new</a>. In fact, in Germany&rsquo;s eAccessibility law it was implemented as a priority&nbsp;2 feature, not 3. The tab navigation shouldn&rsquo;t be irritating and jump across the page, so take care of your source order.</p>
    </li>
    <li>
        <h4 id="idioms-acronyms-and-pronounciation">13. Idioms, acronyms, and pronounciation</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-135">
            <p>Also at the highest level, you have to <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#N107C8">provide a way</a> to find all of the following:</p>
            <ol>
                <li>Definitions of idioms and &ldquo;jargon&rdquo;</li>
                <li>Expansion of acronyms</li>
                <li><em>Pronunciations</em> of some words</li>
            </ol>
        </blockquote>
        <p>While for English developers <strong>marking-up foreign-language passages</strong> might be an exception with an unusual amount of &ldquo;<q>fanatical care</q>&rdquo; to achieve this, people in countries like Japan or Germany, where you have many anglicisms especially in technical texts, had <a href="http://www.w3.org/TR/WAI-WEBCONTENT/#gl-abbreviated-and-foreign">a long time</a> to get accustomed to it.</p>
        <p>In fact, according to <acronym>WCAG</acronym>&nbsp;1 <em>any</em> language changes had to be identified as a priority&nbsp;1 requirement, while in <acronym>WCAG</acronym>&nbsp;2 only the document&rsquo;s <a href="/2006/best-practices/#html-language" title="Best practices to define the primary language">primary language</a> is level&nbsp;1, and only <em>passages or phrases</em> within the text are level&nbsp;2, not <em>single words</em>. This is an incredible work reduction. Considering screen readers make a subtle pause before language switches that can get annoying in texts with many foreign words, it is also an improvement for those users.</p>
    </li>
    <li>
        <h4 id="alternate-documents">14. Alternate documents</h4>
        <blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/#really-says:li-165">
            <p>You also have to provide an alternate document if a reader with a &ldquo;lower secondary education level&rdquo; couldn&rsquo;t understand your main document. (In fact, <acronym>WCAG</acronym>&nbsp;2 <a href="http://www.w3.org/TR/2006/WD-WCAG20-20060427/complete#N1089F">repeatedly</a> <a href="http://www.w3.org/TR/2006/WD-WCAG20-TECHS-20060427/#F19">proposes</a> maintaining separate accessible and inaccessible pages. In some cases, you don&rsquo;t necessarily have to improve your inaccessible pages as long as you produce another page.)</p>
        </blockquote>
        <p>Again, that&rsquo;s an <a href="http://www.w3.org/TR/WAI-WEBCONTENT/#tech-alt-pages">old friend</a>, and it&rsquo;s emphasized that an <a href="http://www.w3.org/TR/2006/WD-UNDERSTANDING-WCAG20-20060427/#accessible-alternatives-level1-intent-head">alternate version</a> &ldquo;<q>is a fallback option and is not preferable to making the content itself accessible.</q>&rdquo; So what? If a technical document for a specific target audience can&rsquo;t use very simple language, it is common to <a href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/Overview#meaning-supplements-techniques-head">provide a text summary</a> for people with lower reading skills. That doesn&rsquo;t mean we forget about accessibility and start publishing nothing but alternate text versions again.</p>
    </li>
</ol>

<h3 id="conclusion">Conclusion</h3>

<p id="cooperation">Joe Clark takes some points, but on a closer look his article leaves a bitter taste as <strong>another tool for  enforcing his point of view</strong> on the Web Content Accessibility Working Group. Okay, probably most of us who care about web standards today have been <a href="http://joeclark.org/access/about/whycaptioning.html" rel="nofollow">nerds</a> as teenagers. But then again most of us have quit playing Dungeons and Dragons and got some social life. We don&rsquo;t spend <a href="http://www.theatlantic.com/doc/prem/200109/erard" rel="nofollow">hours in front of our <abbr title="television">TV</abbr></a> and write <a href="http://blog.fawny.org/category/accessibility/captioning/cbc/" rel="nofollow">angry nitpicking letters to the <acronym title="Canadian Broadcasting Corporation">CBC</acronym></a>. We don&rsquo;t harass <acronym>W3C</acronym> working groups, and when they won&rsquo;t be intimidated, we do not <a href="http://wcagsamurai.org" title="The WCAG Samurai, chaired by Joe Clark" rel="nofollow">found our own</a>. Be gentle and play with the other kids.</p>

<blockquote id="subversion" cite="http://meyerweb.com/eric/thoughts/2006/08/14/angry-indeed/#comment-43103">
    <p>If you want reform then do it from the inside &mdash; the subtlety of subversion is more effective than revolution.</p>
</blockquote>

<p class="cite"><cite><a href="http://meyerweb.com/eric/thoughts/2006/08/14/angry-indeed/#comment-43103">Comment on Eric Meyer&rsquo;s blog</a></cite></p>

<p id="participation"><strong><acronym>WCAG</acronym>&nbsp;2 is not so spoiled</strong>, there&rsquo;s still plenty of opportunity to <a href="http://www.w3.org/WAI/GL/WCAG20/issue-tracking/" rel="nofollow" title="External link to the WCAG issue tracking tool">make your constructive critique heard</a> until the working draft becomes a recommendation.</p>

<p id="acknowledgment" class="acknowledgments">Thanks to the Frankfurt <a href="http://www.webmontag.de" hreflang="de" xml:lang="de" lang="de">Webmontag</a> for the inspiration to write down and extend the things I mentioned in my lecture about <acronym>WCAG</acronym>&nbsp;2 on 14&nbsp;August 2006.</p>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2006/to-hell-with-joe-clark/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Best Practices in Web Development</title>
		<link>http://learningtheworld.eu/2006/best-practices/</link>
		<comments>http://learningtheworld.eu/2006/best-practices/#comments</comments>
		<pubDate>Mon, 10 Jul 2006 16:56:19 +0000</pubDate>
		<dc:creator><![CDATA[Martin Kliehm]]></dc:creator>
				<category><![CDATA[web development]]></category>
		<category><![CDATA[web standards]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[checklist]]></category>
		<category><![CDATA[common errors]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS reboot]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[new professionalism]]></category>
		<category><![CDATA[Roger Johansson]]></category>
		<category><![CDATA[Sean Fraser]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://learningtheworld.eu/2006/best-practices/</guid>
		<description><![CDATA[Roger Johansson and Sean Fraser recently reviewed websites which were submitted for the CSS Reboot Spring 2006, and they seemed to be quite shocked when 71.8% failed to validate. While this is sobering and to a degree surprising â€” one might expect better results from CSS aware developers on a relaunch â€” it confirmed my own results from reviewing a couple of high profile websites for clients.&#160;[&#8230;]]]></description>
				<content:encoded><![CDATA[<p id="intro"><strong><a href="http://www.456bereastreet.com/archive/200606/css_reboot_participants_far_from_standardsbased/" rel="colleague met" title="Roger Johansson about CSS reboot">Roger Johansson</a> and <a href="http://www.elementary-group-standards.com/web-standards/css-reboot-as-web-standards-validation-indicator.html" title="Sean Fraser about CSS reboot" rel="colleague">Sean Fraser</a> recently reviewed websites which were submitted for the <a href="http://www.cssreboot.com"><acronym title="Cascading Style Sheets">CSS</acronym> Reboot Spring 2006</a>, and they seemed to be quite shocked when 71.8% failed to validate.</strong> While this is sobering and to a degree surprising &mdash; one might expect better results from <acronym>CSS</acronym> aware developers on a relaunch &mdash; it confirmed my own results from reviewing a couple of high profile websites for clients.</p>

<h3 id="toc">In this article:</h3>

<ul class="toc">
    <li><a href="#case-study">Case study</a></li>
    <li><a href="#html">Best practices in <acronym title="Hypertext Markup Language">HTML</acronym></a></li>
    <li><a href="#css">Best practices in <acronym>CSS</acronym></a></li>
    <li><a href="#search-engines">Best practices for search engines</a></li>
</ul>

<h3 id="case-study">Case study</h3>

<p id="cs-intro">Over the years we made several <strong>technical analyses</strong> for the clients&rsquo; own websites and some of their competitors, including major German broadcasting companies, TV program journals, and a couple of large online travel sites.</p>

<p id="cs-scope">We were checking for overall performance like file sizes as well as best practices in <acronym title="Extensible Hypertext Markup Language">(X)HTML</acronym>, <acronym>CSS</acronym>, semantics, and some other aspects of friendliness to users and search engines. We mostly skipped accessibility because there were already severe errors in the other areas.</p>

<p id="cs-summary">It&rsquo;s not like these websites were made by some backstreet <del>crack houses</del> <ins>agencies</ins>. All have a well-known logo stuck to them, most of them get more than a million visits each month, some up to more than a hundred million. Still the reviews felt like a time-travel to 1998. In our elite circles we speak about a &ldquo;<a href="http://www.webstandards.org/2005/11/15/web-standards-and-the-new-professionalism/" title="Molly Holzschlag on the Web Standards Project (WaSP) website about new professionalism" rel="colleague met">new professionalism</a>,&rdquo; but <acronym>HTML</acronym> in the wild is <em>still</em> a <em>very</em> dark and ugly jungle.</p>

<p id="cs-common-errors"><strong>Most common errors</strong> were missing <code>alt</code>-attributes and unencoded <span class="nowrap"><code>&amp;</code>-characters</span> in <acronym title="Uniform Resource Locator">URL</acronym>s. Also quite common were <acronym title="Extensible Markup Language">XML</acronym> endslashes in <acronym>HTML</acronym> documents, or hacks from the nineties: proprietary attributes like <code>background</code> in table data, <code>height</code> in a table row, <code>marginwidth</code>, <code>marginheight</code>, <code>topmargin</code> and <code>leftmargin</code>, or missing <code>type</code> attributes in <code>style</code> and <code>script</code> tags.</p>

<p id="cs-proprietary-tags">Getting into the depths of old-school programming we found proprietary tags like <code>&lt;nobr&gt;</code>, <code>&lt;ilayer&gt;</code>, or <code>&lt;spacer&gt;</code>, misconceptions like <code>valign=&quot;center&quot;</code> instead of <code>&quot;middle&quot;</code>, forgotten closing tags, or tag soup like the classic <code>form</code> between table rows (to prevent top margins), block level elements inside of inline elements, <code>&lt;p&gt;</code> tags around everything (including tables and headlines!), or <code>script</code> tags before or after <code>&lt;html&gt; &lt;/html&gt;</code>. Especially ad servers and site statistics were infamous for their crappy stone-age code.</p>

<p id="cs-dtd">Only a few were missing a doctype declaration (DTD) altogether, most ran <acronym>HTML</acronym> transitional 4.01 in quirks mode, only one claimed to be <acronym>XHTML</acronym>&nbsp;1.1 (<em>gasp</em>). Seven out of ten had a charset encoding, but only the <acronym>XHTML</acronym> website did care to define the site&rsquo;s language. Almost all had no clue about <acronym>CSS</acronym> positioning and used table layout.</p>

<p id="cs-basics">Sometimes we encountered code where developers obviously hadn&rsquo;t understood even the most basic principles of <acronym>CSS</acronym>&nbsp;1. They used either <code>font</code> tags with <code>style</code> attributes, or other tags just <em>like</em> <code>font</code> tags with a lot of repeated inline <code>style</code>. Thus the advantages of <acronym>CSS</acronym> through central style sheets with classes and IDs were counteracted.</p>

<p id="cs-file-size">It didn&rsquo;t come as a surprise that the few websites using <acronym>CSS</acronym>&nbsp;2 for layout had <strong>significant smaller file sizes</strong>. Those with <acronym>CSS</acronym>&nbsp;2 had between 15-21&nbsp;<abbr title="Kilobyte">KB</abbr> of <acronym>HTML</acronym>, their competitors with table layout 55-95&nbsp;<abbr>KB</abbr>. Still you got to pay attention to the file size of images and rich media (including banners) as they frequently blow up the total amount. Be aware of <acronym title="Dynamic HTML">DHTML</acronym> menus, as they have a tendency to get out of control sizewise (<abbr title="40 kilobytes">40k</abbr> JavaScript in one case, <abbr title="85 kilobytes">85k</abbr> in another). Less than a total of <abbr title="100 kilobytes">100k</abbr> for the home page should be sufficient, even for sites with rich graphic interfaces.</p>

<p id="cs-checklist">I don&rsquo;t want to bore you with further rants about burning bandwidth with <abbr title="600 kilobytes">600k</abbr> large home pages (multiply <em>that</em> by a million), hence we thought positive and made a <strong>checklist of best practices</strong>. Although the checkpoints appear to be quite obvious and common sense when you read them, you might be surprised that the best website managed to fulfil 22 out of 29 checkpoints, the worst only 8, with an average of 12.</p>

<p id="cs-job-test">By the way, the <acronym>HTML</acronym> and <acronym>CSS</acronym> part of the checklist is more or less the same we use for testing the qualifications of <em>job applicants</em>. We associated a severity grade (<em>major</em>, <em>average</em>, <em>minor</em>) with each checkpoint, and for each error in the small task we give them we subtract 3, 2, or 1 point(s) respectively from a maximum of 100. Half the amount is subtracted when a checkpoint is partially fulfilled. We adopted that system from the German <a href="http://www.bitvtest.de" hreflang="de">accessibility test</a> &mdash; it&rsquo;s fair and a great way to compare test results.</p>

<p id="cs-checklist-intro">Here&rsquo;s the short version of our checklist. Feel free to make your own severity rating. Just be consistent in your own tests to get comparable results.</p>

<h3 id="html">Best practices in <acronym>HTML</acronym></h3>

<ol class="alpha">
    <li id="html-validation">The document <a href="http://validator.w3.org" title="External link to the World Wide Web Committee&rsquo;s validator">must validate</a> as <acronym>HTML</acronym> or <acronym>XHTML</acronym>.</li>
    <li id="html-dtd">The document must have a <strong><acronym title="Doctype Declaration">DTD</acronym></strong>.</li>
    <li id="html-character-encoding">The document must have a <a href="http://www.w3.org/TR/html401/charset.html#h-5.2.1" title="HTML 4.01 specification about character encoding">character encoding</a>, either through a <acronym title="Hypertext Transfer Protocol">HTTP</acronym> header or a <code>meta</code> tag.</li>
    <li id="html-language">
        <p>The document should have the <strong>language defined</strong> in the following ways:</p>
        <ul>
            <li><code>&lt;html lang=&quot;en&quot;&gt;</code></li>
            <li><code>&lt;html xml:lang=&quot;en&quot;&gt;</code></li>
            <li><code>&lt;meta name=&quot;content-language&quot; content=&quot;en&quot;&gt;</code></li>
        </ul>
    </li>
    <li id="html-quotes">All <strong>attribute values <a href="http://www.w3.org/TR/html4/intro/sgmltut.html#idx-attribute-6" title="HTML 4.01 Specification about quotes">should be quoted</a></strong>. In <acronym>XHTML</acronym>, <a href="http://www.w3.org/TR/xhtml1/#h-4.4" title="XHTML 1.0 Specification about quotes">quotes are mandatory</a>.</li>
    <li id="html-case">Element and attribute names should use a consistent case to enhance readability, preferred is <strong>lowercase</strong> for <acronym>XHTML</acronym> compability.</li>
    <li id="html-comments">Code should be well <code>&lt;!-- commented --></code> to help maintaining developers to get a fast grip of the basic structure and key concepts.</li>
    <li id="html-indention">Code should be consistently <strong>indented</strong>, tabs preferred over spaces.</li>
    <li id="html-alt">Images, image maps and scripted content must have an <a href="http://www.w3.org/TR/html4/struct/objects.html#adef-alt" title="HTML 4.01 specification about alternative text"><code>alt</code>-attribute</a> with an appropriate value.</li>
    <li id="html-width-height">Images should always <a href="http://www.w3.org/TR/html401/struct/objects.html#adef-width-IMG" title="HTML 4.01 specification about width and height">specify their <code>width</code> and <code>height</code></a> to allow browsers to continue rendering while waiting for the image data.</li>
    <li id="html-entities">Some special characters like <code>&amp;quot;</code>, <code>&amp;lt;</code>, <code>&amp;gt;</code>, and <a href="http://www.w3.org/TR/html401/appendix/notes.html#h-B.2.2" title="HTML 4.01 specification about ampersands in URI attribute values"><code>&amp;amp;</code></a> (especially within attributes like <code>href</code> or <code>src</code>) must always be replaced by their <strong>character entities</strong> or numeric character references (NCR). Also characters not included in the character set, like <code>&amp;euro;</code> in ISO 8859-1, must be replaced. The <acronym title="World Wide Web Consortium">W3C</acronym> <abbr title="Internationalization">I18N</abbr> activity group further <a href="http://www.w3.org/International/questions/qa-escapes" title="W3C: Using character entities and NCRs">recommends</a> to replace other special characters like <code>&amp;ndash;</code>, but <em>not</em> common characters like &ldquo;&uuml;&rdquo; in German texts or &ldquo;&eacute;&rdquo; in French to maintain code readability.</li>
    <li id="html-type"><code>script</code> and <code>style</code> tags must have a <a href="http://www.w3.org/TR/html401/interact/scripts.html#h-18.2.1" title="HTML 4.01 specification about the script type"><code>type</code></a> attribute.</li>
    <li id="html-js">
        <p><strong>JavaScript</strong> code should be included using <strong>external files</strong> for caching and better maintenance.</p>
        <p>Of course with <strong>Yahoo&rsquo;s performance research</strong> about <a href="http://yuiblog.com/blog/2007/01/04/performance-research-part-2/">browser cache</a> and <a href="http://yuiblog.com/blog/2006/11/28/performance-research-part-1/"><acronym>HTTP</acronym> requests</a> you could discuss if external files load faster with several server requests through <code>script src=&quot;foo.js&quot;</code> or just one request and internal <acronym>HTML</acronym> code, but either way you should use central, non-redundant files and include them in one way or another.</p>
    </li>
</ol>

<h3 id="css">Best practices in <acronym>CSS</acronym></h3>

<ol class="alpha">
    <li id="css-validation"><acronym>CSS</acronym> <a href="http://jigsaw.w3.org/css-validator/" title="External link to the World Wide Web Consortium&rsquo;s CSS validator">must validate</a>.</li>
    <li id="css-positioning">Elements should be <strong>positioned with <acronym>CSS</acronym>&nbsp;2</strong>, not tables.</li>
    <li id="css-decoration">All ornamental lines, borders, background colors and -images, underlines and other <strong>decorational elements</strong> should be rendered <strong>with <acronym>CSS</acronym>&nbsp;2</strong>.</li>
    <li id="css-formatting"><strong>Text</strong> should be <strong>formatted with <acronym>CSS</acronym>&nbsp;1</strong>, not with <code>font</code> tags.</li>
    <li id="css-external">All style sheets should be included in reusable, centrally maintainable, and cacheable <strong>external <acronym>CSS</acronym> files</strong>, not as redundant code within the <acronym>HTML</acronym> files.</li>
    <li id="css-mime-type">External <acronym>CSS</acronym> files should be sent with the <strong>correct MIME type</strong> (<code>text/css</code>).</li>
    <li id="css-naming-conventions"><strong><acronym>CSS</acronym> classes and IDs must be valid</strong>, <abbr title="that is">i.e.</abbr> <a href="http://www.w3.org/TR/html401/types.html#type-id">beginning with a letter</a>, not a number or an underscore. IDs must be unique. Their names should be <a href="http://www.w3.org/QA/Tips/goodclassnames" title="W3C Quality Assurance Tip: Use &quot;class&quot; with semantics in mind">generic</a>, describe functionality rather than appearance.</li>
</ol>

<h3 id="search-engines">Best practices for search engines</h3>

<ol class="alpha">
    <li id="se-title">Use a <strong>descriptive title</strong> with the name of the website and consistent separating characters in it.</li>
    <li id="se-keywords">Use <strong>keywords, keyphrases, and a description</strong> reflecting the page&rsquo;s content.</li>
    <li id="se-url-design">The <a href="http://www.w3.org/Provider/Style/URI" title="Tim Berners-Lee&rsquo;s article &ldquo;Cool URIs don&rsquo;t change&rdquo;"><acronym>URL</acronym> should be descriptive</a>, <a href="http://www.adaptivepath.com/publications/essays/archives/000058.php" title="Jesse James Garrett about &ldquo;User-Centered URL Design&rdquo;">human-readable</a>, easy to remember, to bookmark, and easy to spell on a phone. Don&rsquo;t bother the user with file extensions, thus you will be future compatible and independent from your current software.</li>
    <li id="se-robots-txt">Use the <a href="http://www.robotstxt.org">Robots Exclusion Standard</a>, <abbr>i.e.</abbr> <code>robots.txt</code>.</li>
    <li id="se-relevance">The <strong>content should be as high up</strong> in the code as possible as it gets more relevance there.</li>
    <li id="se-semantics">Use <strong>proper semantic code</strong>, like headlines, or list items for anything that resembles a list. Don&rsquo;t use list items to get bullet points or headlines to set bold text.</li>
    <li id="se-link">Use <a href="http://www.w3.org/TR/html401/types.html#type-links" title="HTML 4.01 specification about link types"><code>&lt;link&gt;</code> tags</a> to specify relations between pages, like <code>rel=&quot;start&quot;</code>, <code>chapter</code>, <code>prev</code>, or <code>next</code>, as search engines might value your start page more, or browsers could preload <code>next</code> pages.</li>
    <li id="se-favicon">Use a <a href="http://favicon.com">favorite icon</a> for bookmarking and to keep your error log clean.</li>
    <li id="se-pics">Use the <a href="http://www.w3.org/PICS/"><acronym title="Platform for Internet Content Selection">PICS</acronym></a> <a href="http://www.icra.org" title="Internet Content Rating Association, external link where you can label your website">standard</a> to signal search engines and filter programs that your website is safe for kids.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://learningtheworld.eu/2006/best-practices/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
