<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Structured Timeline</title>
	<atom:link href="http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/feed/" rel="self" type="application/rss+xml" />
	<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/</link>
	<description>Things that Eric A. Meyer, CSS expert, writes about on his personal Web site; it&#039;s largely Web standards and Web technology, but also various bits of culture, politics, personal observations, and other miscellaneous stuff</description>
	<lastBuildDate>Thu, 18 Mar 2010 20:56:32 -0400</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Pure CSS Timeline &#8211; Notebook &#124; MattBango.com</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-470243</link>
		<dc:creator>Pure CSS Timeline &#8211; Notebook &#124; MattBango.com</dc:creator>
		<pubDate>Wed, 08 Jul 2009 14:22:38 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-470243</guid>
		<description>[...] Structured Timeline --- Eric Meyer&#8217;s table approach to timelines. [...]</description>
		<content:encoded><![CDATA[<p>[...] Structured Timeline &#8212; Eric Meyer&#8217;s table approach to timelines. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rachel</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-457378</link>
		<dc:creator>Rachel</dc:creator>
		<pubDate>Wed, 22 Apr 2009 02:07:25 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-457378</guid>
		<description>Did you have a CSS way of generating the table at http://meyerweb.com/eric/browsers/timeline.html ?</description>
		<content:encoded><![CDATA[<p>Did you have a CSS way of generating the table at <a href="http://meyerweb.com/eric/browsers/timeline.html" rel="nofollow">http://meyerweb.com/eric/browsers/timeline.html</a> ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: shoumik</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-441675</link>
		<dc:creator>shoumik</dc:creator>
		<pubDate>Sun, 08 Feb 2009 16:58:03 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-441675</guid>
		<description>hey how can i embed this on my web page?</description>
		<content:encoded><![CDATA[<p>hey how can i embed this on my web page?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: -= Linkage 2007.01.28 =-</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-438623</link>
		<dc:creator>-= Linkage 2007.01.28 =-</dc:creator>
		<pubDate>Mon, 26 Jan 2009 15:39:22 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-438623</guid>
		<description>[...] CSS Structured Timeline&lt;br/&gt; [...]</description>
		<content:encoded><![CDATA[<p>[...] CSS Structured Timeline&lt;br/&gt; [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: The Salt-Box :: Online Timeline Builders</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-314394</link>
		<dc:creator>The Salt-Box :: Online Timeline Builders</dc:creator>
		<pubDate>Tue, 05 Feb 2008 00:47:01 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-314394</guid>
		<description>[...] here&#8217;s Eric Meyer&#8217;s CSS for &#8220;building a structured timeline out of a table.&#8221;    As you mouse over the timeline, the row changes color, and it looks like table items could be [...]</description>
		<content:encoded><![CDATA[<p>[...] here&#8217;s Eric Meyer&#8217;s CSS for &#8220;building a structured timeline out of a table.&#8221;    As you mouse over the timeline, the row changes color, and it looks like table items could be [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sp3w</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-307487</link>
		<dc:creator>Sp3w</dc:creator>
		<pubDate>Mon, 28 Jan 2008 14:32:20 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-307487</guid>
		<description>[...] CSS Structured Timeline [...]</description>
		<content:encoded><![CDATA[<p>[...] CSS Structured Timeline [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brian LePore (POWRSURG)&#8217;s personal blog : Monumental week for the Web</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-306258</link>
		<dc:creator>Brian LePore (POWRSURG)&#8217;s personal blog : Monumental week for the Web</dc:creator>
		<pubDate>Sat, 26 Jan 2008 05:48:00 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-306258</guid>
		<description>[...] the * hack is dead, long live the * hack &#8212; Using * html was a fairly well known CSS hack that caused a rule to be set in versions of Internet Explorer 6 and below, but did not work in Internet Explorer 7 or any other A grade browser. During a discussion Eric Meyer&#8217;s update of his Browser History Timeline he revealed that a new form of the * hack lives on in Internet Explorer 7 through the use of the adjacency selector (because IE7 sees the DOCTYPE as being adjacent to the html element). While CSS hacks are very bad in theory, they are very useful in practice. [...]</description>
		<content:encoded><![CDATA[<p>[...] the * hack is dead, long live the * hack &mdash; Using * html was a fairly well known CSS hack that caused a rule to be set in versions of Internet Explorer 6 and below, but did not work in Internet Explorer 7 or any other A grade browser. During a discussion Eric Meyer&#8217;s update of his Browser History Timeline he revealed that a new form of the * hack lives on in Internet Explorer 7 through the use of the adjacency selector (because IE7 sees the DOCTYPE as being adjacent to the html element). While CSS hacks are very bad in theory, they are very useful in practice. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: CSS mastery</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-306055</link>
		<dc:creator>CSS mastery</dc:creator>
		<pubDate>Fri, 25 Jan 2008 21:10:31 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-306055</guid>
		<description>[...] Here&#8217;s how he did it [...]</description>
		<content:encoded><![CDATA[<p>[...] Here&#8217;s how he did it [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bb&#8217;s RealTech &#124; Highlights for January 20th through January 24th</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-305405</link>
		<dc:creator>Bb&#8217;s RealTech &#124; Highlights for January 20th through January 24th</dc:creator>
		<pubDate>Fri, 25 Jan 2008 00:32:21 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-305405</guid>
		<description>[...] Eric&#8217;s Archived Thoughts: Structured Timeline - Um, 1993? 1994? 1995? And where&#8217;s the new IE8 meta tag? [...]</description>
		<content:encoded><![CDATA[<p>[...] Eric&#8217;s Archived Thoughts: Structured Timeline &#8211; Um, 1993? 1994? 1995? And where&#8217;s the new IE8 meta tag? [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Evan Heisler Dot Com &#124; Blog</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-304854</link>
		<dc:creator>Evan Heisler Dot Com &#124; Blog</dc:creator>
		<pubDate>Thu, 24 Jan 2008 02:57:54 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-304854</guid>
		<description>[...] move onto a well-formulated (yet opinionated) response here, then bring it home with latest from here (the next few entries correspond as [...]</description>
		<content:encoded><![CDATA[<p>[...] move onto a well-formulated (yet opinionated) response here, then bring it home with latest from here (the next few entries correspond as [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dan Mathers</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-304700</link>
		<dc:creator>Dan Mathers</dc:creator>
		<pubDate>Wed, 23 Jan 2008 20:07:12 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-304700</guid>
		<description>Wow, that&#039;s really quite stunning! I&#039;m late to the party and am trying to get up to speed with CSS, and I love the examples on your site.

I do have a question that I realise is a bit off-topic, but I&#039;m trying to ensure that I got a handle on industry best practices. You have included the *+html IE7 hack on your site, but to quote Tantek Celik, &#039;a hack should target ONLY older/frozen/abandoned versions of user agents / browsers.&#039;

Now that we know about IE8 multiple rendering engines, does his rule no longer apply?

Love your O&#039;reilly book by the way, it is never more than an arm&#039;s length away on my desk and completely dog-eared.</description>
		<content:encoded><![CDATA[<p>Wow, that&#8217;s really quite stunning! I&#8217;m late to the party and am trying to get up to speed with CSS, and I love the examples on your site.</p>
<p>I do have a question that I realise is a bit off-topic, but I&#8217;m trying to ensure that I got a handle on industry best practices. You have included the *+html IE7 hack on your site, but to quote Tantek Celik, &#8216;a hack should target ONLY older/frozen/abandoned versions of user agents / browsers.&#8217;</p>
<p>Now that we know about IE8 multiple rendering engines, does his rule no longer apply?</p>
<p>Love your O&#8217;reilly book by the way, it is never more than an arm&#8217;s length away on my desk and completely dog-eared.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Designerd &#8211; links for 2008-01-23</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-304563</link>
		<dc:creator>Designerd &#8211; links for 2008-01-23</dc:creator>
		<pubDate>Wed, 23 Jan 2008 13:20:09 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-304563</guid>
		<description>[...] Structured Timeline (tags: gr2dic) [...]</description>
		<content:encoded><![CDATA[<p>[...] Structured Timeline (tags: gr2dic) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Structured Browser Timeline &#124; David Bisset: Web Designer, Coder, Wordpress Guru</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-304260</link>
		<dc:creator>Structured Browser Timeline &#124; David Bisset: Web Designer, Coder, Wordpress Guru</dc:creator>
		<pubDate>Tue, 22 Jan 2008 23:21:27 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-304260</guid>
		<description>[...] Meyer constructed a browser timeline built out of a table, and how he went about coding the html and css. Nice work.  Tags: CSS, Firefox, HTML, IE, [...]</description>
		<content:encoded><![CDATA[<p>[...] Meyer constructed a browser timeline built out of a table, and how he went about coding the html and css. Nice work.  Tags: CSS, Firefox, HTML, IE, [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alan Gresley</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-304148</link>
		<dc:creator>Alan Gresley</dc:creator>
		<pubDate>Tue, 22 Jan 2008 17:28:20 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-304148</guid>
		<description>Eric, I sorry,. I read that part over and over and I thought parent instead of sibling.

I don&#039;t understand. Doesn&#039;t 1em equal %100. The same as line-height:1; equal line-height:100%;. The problem with the page in IE7 is due to the font size em on  bug. Are you triggering it on purpose?</description>
		<content:encoded><![CDATA[<p>Eric, I sorry,. I read that part over and over and I thought parent instead of sibling.</p>
<p>I don&#8217;t understand. Doesn&#8217;t 1em equal %100. The same as line-height:1; equal line-height:100%;. The problem with the page in IE7 is due to the font size em on  bug. Are you triggering it on purpose?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt Russell</title>
		<link>http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-304128</link>
		<dc:creator>Matt Russell</dc:creator>
		<pubDate>Tue, 22 Jan 2008 16:47:26 +0000</pubDate>
		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-304128</guid>
		<description>Outstanding! Haven&#039;t had to pick my jaw up like that since the Jedi Secrets bar graph demo @ AEA Boston.</description>
		<content:encoded><![CDATA[<p>Outstanding! Haven&#8217;t had to pick my jaw up like that since the Jedi Secrets bar graph demo @ AEA Boston.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head profile="http://gmpg.org/xfn/1">
<title>meyerweb.com</title>
<link rel="openid.server" href="http://www.myopenid.com/server">
<link rel="openid.delegate" href="http://emeyer.myopenid.com/">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link rel="shortcut icon" href="/favicon.ico"><link rel="home" href="http://meyerweb.com/" title="Home" ><link rel="stylesheet" href="http://meyerweb.com/ui/meyerweb.css" type="text/css" media="screen, projection"><link rel="stylesheet" href="http://meyerweb.com/ui/theme.css" type="text/css" media="screen, projection" id="themeLink"><link rel="stylesheet" href="http://meyerweb.com/ui/print.css" type="text/css" media="print"><script src="http://meyerweb.com/ui/addresses.js" type="text/javascript"></script><link rel="stylesheet" href="/ui/wordpress.css" type="text/css" media="screen">
<link rel="stylesheet" href="/ui/tfe.css" type="text/css" media="screen">
<link rel="stylesheet" href="/ui/home.css" type="text/css" media="screen">
<link rel="alternate" type="application/rss+xml" title="Thoughts From Eric" href="/eric/thoughts/rss2/full" />
<link rel="alternate" type="application/rss+xml" title="Thoughts From Eric (only technical posts)" href="/eric/thoughts/category/tech/rss2/full" />
<link rel="alternate" type="application/rss+xml" title="Thoughts From Eric (only personal posts)" href="/eric/thoughts/category/personal/rss2/full" />
<link rel="alternate" type="application/rss+xml" title="Distractions" href="/eric/thoughts/recent-links/rss2" />
<link rel="alternate" type="application/rss+xml" title="Excuse of the Day" href="/feeds/excuse/rss20.xml" />
</head>
<body id="www-meyerweb-com" class="hpg">

<div id="sitemast"><h1><a href="/"><span>meyerweb</span>.com</a></h1></div><div id="search"><h4>Exploration</h4><!-- SiteSearch Google --><form method="get" action="http://www.google.com/custom" target="_top"><div><input type="hidden" name="domains" value="meyerweb.com"></input><label for="sbb" style="display: none">Submit search form</label><input type="submit" name="sa" value="Google Search" id="sbb"></input><label for="sbi" style="display: none">Enter your search terms</label><input type="text" name="q" size="31" maxlength="255" value="" id="sbi"></input><p><input type="radio" name="sitesearch" value="meyerweb.com" checked id="ss1"></input><label for="ss1" title="Search meyerweb.com">meyerweb.com</label><input type="radio" name="sitesearch" value="" id="ss0"></input><label for="ss0" title="Search the Web">Web</label></p><input type="hidden" name="client" value="pub-3772084027748653"></input><input type="hidden" name="forid" value="1"></input><input type="hidden" name="ie" value="ISO-8859-1"></input><input type="hidden" name="oe" value="ISO-8859-1"></input><input type="hidden" name="safe" value="active"></input><input type="hidden" name="cof" value="GALT:#008000;GL:1;DIV:#336699;VLC:663399;AH:center;BGC:FFFFFF;LBGC:336699;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;FORID:1"></input><input type="hidden" name="hl" value="en"></input></div></form><!-- SiteSearch Google --><!-- <form method="get" action="http://www.google.com/custom"><div><input type="submit" name="sa" value="Search"><input type="text" name="q" size="20" maxlength="255" value=""><input type="hidden" name="sitesearch" value="meyerweb.com"></div></form><small><a href="http://www.google.com/search">Powered by Google</a></small> --></div><div id="main"><div class="skipper">Skip to: <a href="#extra">site navigation/presentation</a></div><div class="skipper">Skip to: <a href="#thoughts">Thoughts From Eric</a></div>
<div id="thoughts">


<div class="entry">
<h3><a href="http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/" rel="bookmark" title="Permanent Link: Structured Timeline">Structured Timeline</a></h3>
<ul class="meta">
<li class="date">Mon 21 Jan 2008</li>
<li class="time">1347</li>
<li class="cat"><a href="http://meyerweb.com/eric/thoughts/category/tech/css/" title="View all posts in CSS" rel="category tag">CSS</a></li>
<li class="cmt"><a href="http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comments">41 responses</a></li>
<li></li><li></li></ul>

<div class="text">
<p>
I wasn&#8217;t going to do it.  It would take too long, draw too much energy and attention.  Too many other things needed to be done first.  But it tasked me.  It <em>tasked</em> me!
</p>
<p>
So: here&#8217;s <a href="http://meyerweb.com/eric/browsers/timeline-structured.html">a browser timeline built out of a table</a>.  I&#8217;ll say it now: <strong>this does not work in IE6 <del datetime="2008-01-21T20:05:53+00:00">and IE7</del></strong>.  I&#8217;m not sure it&#8217;s possible to do, at least not cleanly, given the markup I used.  I&#8217;ll explain what I mean in a bit.
</p>
<p>
In order to structure this data, a table seemed to make the most sense, although even it wasn&#8217;t perfect.  There really wasn&#8217;t anything that seemed an exact fit, to be honest.  Definition lists didn&#8217;t really fit the bill (is a browser defined by its release dates?).  Plain old (un)ordered lists were a little better, but not enough.  In the end I just kind of ran with the idea that time sat on one axis and browsers sat on the other axis&#8212;like a table.
</p>
<p>
Given that decision, I needed to decide exactly how to group the data.  After a moments&#8217; thought, I decided that I wanted to group the release dates by browser instead of by year.  Given the way tables are structured, that means every row corresponds to a browser, each data cell in the row represents a year, and the contents of each cell are the versions released in that year.
</p>
<p>
So here&#8217;s an example of a table row:
</p>

<pre>
&lt;tr title="Internet Explorer for Windows"&gt;
&lt;th scope="row"&gt;
   &lt;img src="icons/msie.png" alt="Internet Explorer for Windows" /&gt;
&lt;/th&gt;
&lt;td class="y1996"&gt;&lt;p title="August 1996"&gt;3.0&lt;/p&gt;&lt;/td&gt;
&lt;td class="y1997"&gt;&lt;p title="October 1997"&gt;4.0&lt;/p&gt;&lt;/td&gt;
&lt;td class="y1998"&gt;&lt;/td&gt;
&lt;td class="y1999"&gt;&lt;p title="March 1999"&gt;5.0&lt;/p&gt;&lt;/td&gt;
&lt;td class="y2000"&gt;&lt;p title="July 2000"&gt;5.5&lt;/p&gt;&lt;/td&gt;
&lt;td class="y2001"&gt;&lt;p title="August 2001"&gt;6.0&lt;/p&gt;&lt;/td&gt;
&lt;td class="y2002"&gt;&lt;/td&gt;
&lt;td class="y2003"&gt;&lt;/td&gt;
&lt;td class="y2004"&gt;&lt;/td&gt;
&lt;td class="y2005"&gt;&lt;/td&gt;
&lt;td class="y2006"&gt;&lt;p title="October 2007"&gt;7.0&lt;/p&gt;&lt;/td&gt;
&lt;td class="y2007"&gt;&lt;/td&gt;
&lt;td class="y2008"&gt;&lt;/td&gt;
&lt;th class="end"&gt;&lt;/th&gt;
&lt;/tr&gt;
</pre>

<p>
(And yes, that&#8217;s drawn straight from the example, with no simplification and very minimal formatting.  I really wanted to pare the markup down as far as I could.)
</p>
<p>
The other choice was to have each row represent a year, and each cell represent a browser.  The non-graphical Wikipedia timeline has each row represent a month, not a year, but same general idea.  I totally understand why the Wikipedia timeline is top-to-bottom: it&#8217;s much, <em>much</em> easier to update and have render within the Wikipedia layout.  A new month is a new row in the table.  Easy peasy.  Fair enough, but I&#8217;m not here to do what&#8217;s easy.
</p>
<p>
Then there was the question of how to structure the version numbers within each year.  I resisted using ordered lists because in most cells there would be only one version number, and there&#8217;s nothing in the world of semantic markup that rubs me the wrong way more than a one-item list.  So I went with paragraphs.  I don&#8217;t particularly like that either, but short of inventing my own elements and writing a new DTD to support them, I couldn&#8217;t come up with much better.
</p>
<p>
One thing I&#8217;m still uncertain about is my decision to <code>title</code> the dates while having the actual content be only the version numbers.  Would it be better to put the dates into content and wrap distinct elements around the date and version numbers?  I&#8217;m honestly not sure.
</p>
<p>
Anyway, having settled on that structure, I had to answer the question of what to put on which axis in the layout.  Should I put the axis of time <a href="http://meyerweb.com/eric/browsers/timeline.html">across the top, as I did originally</a>; or <a href="http://en.wikipedia.org/wiki/Browser_timeline">down the side, as in the non-graphical Wikipedia timeline</a>?   Put another way, should the timeline layout be horizontal or vertical?
</p>
<p>
I went with horizontal.  For whatever reason, I have a strong preference toward timelines scrolling left-to-right, not top-to-bottom.  Yes, even though it invokes <a href="http://www.useit.com/alertbox/20050711.html">that dread abomination, the horizontal scrollbar</a>.  As it happened, given my structural decision, the same effect occurs even in an &#8220;unstyled&#8221; state.  If I&#8217;m just looking at the table with no author styles applied, I see the browsers down the left and the time across the top, proceeding from past to future from left to right.  That might seem convenient from a final layout point of view, except for the fact that I ended up completely ripping the table apart and, in effect, reassembling it with positioning.  This wouldn&#8217;t have been necessary had browsers allowed table cells to become containing blocks when they&#8217;re set to <code>position: relative</code>.  But they didn&#8217;t.
</p>
<p>
Frankly, I don&#8217;t have room here to go through all of the techniques I used and decisions I made.  Doing so would probably require a very long article, or else a very small book.  I did want to spotlight a few things:
</p>

<ul>
<li>
<p>In keeping with my desire to minimize the markup, I cut way back on classes.  In fact, the only classes I use indicate which year a cell represents, such as <code>y1999</code>, and <code>end</code> to indicate that a cell is at the end of a row.  (I could have dropped all those classes as well, but chose to keep them for reasons too varied to explain here.)  The paragraphs containing the version numbers, as an example, are completely unclassed, nor do they have IDs.  And yet I was still able to position them appropriately within each year.  How?  Check the markup sample to see if you can figure it out; I&#8217;ll give the answer later on.</p>
</li>
<li>
<p>I used ems for the sizing of just about everything, so this should be extremely tolerant of changes in text size.  The icons get a bit weird at extreme deltas, but I&#8217;m willing to accept that.  Anyway, we all may have full-zooming browsers within a year or three and will leave text-zooming to history.  The nice thing about using ems here, though, is that no matter which flavor of zooming you have to hand, the timeline will accommodate you.</p>
</li>
<li>
<p>I came across at least two things that were of &#8220;is this a bug?&#8221; interest.</p>
<ol>
<li><p>Assigning <code>position: relative</code> to table cells failed to make them containing blocks for absolutely-positioned descendant elements, as I mentioned before.  Changing their <code>display</code> to <code>block</code> allowed them to be containing blocks, but completely shattered the table layout&#8212;elements have to have a <code>display</code> of <code>table-cell</code> to act like table cells.  That makes sense, but the lack of containment when relatively positioning the table cells did not.  Turns out that&#8217;s permissible as per <a href="http://www.w3.org/TR/CSS21/visuren.html#choose-position">CSS2.1: 9.3.1</a>: &#8220;The effect of &#8216;position:relative&#8217; on table-row-group, table-header-group, table-footer-group, table-row, table-column-group, table-column, table-cell, and table-caption elements is undefined.&#8221;  Oh well.</p></li>
<li><p>Where two elements overlap and both have <code>:hover</code> styles, only the &#8220;topmost&#8221; (the element higher up on the Z index) of the two gets its hover styles, at least in the browsers I tested.  The handling of hover styles has been an area of debate in the CSS community for quite a while&#8212;the CSS2.1 specification does <a href="http://www.w3.org/TR/CSS21/selector.html#dynamic-pseudo-classes">a remarkable job of defining hovering without ever explaining how it should or shouldn&#8217;t work</a>&#8212;but this single-event model seems unnecessarily restrictive after all these years.</p></li>
</ol>
</li>
<li>
<p>
Speaking of bugs, I ran into a<del datetime="2008-01-21T20:05:53+00:00">n apparently insoluble</del> problem with Explorer: its allergies over the combination of <code>display</code> and table markup.  Yes, I know, I <a href="http://meyerweb.com/eric/css/edge/bargraph/demo-table.html">built bar graphs out of table markup</a>, and that worked fine (even in IE6).  Not so here.  In fact, I couldn&#8217;t even get the <code>table</code> element to generate an element box once I&#8217;d positioned most of its descendants and converted them all to <code>display: block</code>.  I mean, no matter what I did, it would not show anything.  No height, no width, no borders, no nothing.  I can&#8217;t even figure out what&#8217;s happening to the display role of the cells, most of which position but some of which still act like they&#8217;re cells.  I think.
</p>
<p>
Anyway, I was able to get IE7 to recreate 99% of the layout but couldn&#8217;t stop the overlap of the table and the following text (&#8220;Sources&#8221;, et cetera) without throwing in an extra <code>div</code> after the table and using a CSS hack to set its height in only IE7 so as to force the text below the timeline.  No thank you.  So I took the hacks out.  I admit I&#8217;m disappointed this doesn&#8217;t work as it should in IE7, but I have to remind myself that the fact that it even got close (and it did) is reason for hope.  And if anyone figures out how to fix the layout problems in IE7 (I tried <code>zoom</code>ing and relatively positioning the <code>table</code> element; neither worked), <em>please</em> let me know how you did it so I can update the CSS and credit you.
</p>
<p>
Were I to change the markup to nested lists or <code>div</code>s or something, I suspect it would all come together just fine in IE7.  Not IE6, though&#8230; for reasons I&#8217;ll explain momentarily.
</p>
<p>
<ins datetime="2008-01-21T20:05:53+00:00"><strong>Update:</strong> <a href="http://samrayner.com/">Sam Rayner</a> <a href="http://meyerweb.com/eric/thoughts/2008/01/21/structured-timeline/#comment-303646">pointed out</a> that an adjacent-sibling-based rule targeted at IE7 would provide a decent fix for the overlap, so I added it in.  The above commentary still stands, except now we have a way to work around the major oddities.  Thanks, Sam!</ins>
</p>
</li>
<li>
<p>One of the requests for the original timeline was to have an indication of actual dates and browser names.  Yeah, that&#8217;s not going to happen with images.  In this version, I was able to use <code>title</code> attributes to add in that kind of information, revealable in tooltips.  It also seemed like an accessibility win, although I&#8217;m not sufficiently expert in that field to know whether <code>title</code>s on things like table rows and paragraphs would really help.</p>
</li>
<li><p>Regardless, that&#8217;s the answer to the question I posed earlier: instead of using classes, I selected elements based on the contents of their <code>title</code> attributes.  So, for example, I place all of the August releases within their respective years by declaring <code>#timeline p[title~="August"] {left: 62%;}</code>.  For another example, I dropped IDs from the table rows, and used the title information instead.  This is an extra reason why the layout fails in IE6 and earlier: no support for <a href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors">attribute selectors</a>.  I suspect IE6 would do okay with the layout if I&#8217;d used classes (and non-table markup) instead, but the goal here was to flex my creative-code side and push the envelope to its <a href="http://meyerweb.com/eric/css/edge/">edge</a>s.  So to speak.</p>
<p>This approach did make my CSS a bit longer.  Selecting on attribute values can be a longer-winded process than on class names, which tend to be compacted to the point of being cryptic.  On the other hand, using attribute selection allowed the markup to be a lot simpler, which is a benefit when adding browsers and new release data to the timeline.  Which, I should note, is now a whoooole lot easier than when I was scaling down JPGs generated from PNGs that I&#8217;d saved out of Keynote after using it to draw the dots and lines and such.</p>
</li>
</ul>

<p>
No doubt you&#8217;ll have noticed that the structured timeline looks different than the graphical one.  I believe I could have recreated the original&#8217;s look, but I kind of like this one better.  It&#8217;s more interactive, certainly, and having those descending lines (between the top of the timeline on the release dots) might clutter things up too much when looking for information to hover.  If you get what I&#8217;m saying there.
</p>
<p>
I&#8217;ve also considered that it would be possible to do a dependency timeline like <a href="http://en.wikipedia.org/wiki/Image:Timeline_of_web_browsers.svg">the SVG-based timeline available on Wikipedia</a>.  Doing so would require an entirely different markup structure; there, nested ordered lists make all kinds of sense.  Once that&#8217;s in place, the rest shouldn&#8217;t be terribly challenging to work out.  Tedious, perhaps, but not challenging.  But don&#8217;t expect me to do it any time soon: it would take too long, and draw too much energy and attention from other things that need to be done.
</p>

</div>

</div>

</div>
<p style="font-size: 90%; text-align: right; margin-top: 0.5em; padding-top: 0;">(If you care, there's even an <a href="/eric/thoughts/page/2/">archive of previous thoughts</a>...)</p>

</div><div id="extra"><div class="panel" id="archipelago"><h4>Identity Archipelago</h4><ul><li><a href="http://flickr.com/photos/meyerweb/" rel="me">Flickr</a></li><li><a href="http://twitter.com/meyerweb/" rel="me">Twitter</a></li><li><a href="http://dopplr.com/traveller/meyerweb">Dopplr</a></li><li><a href="http://www.linkedin.com/in/meyerweb" rel="me">LinkedIn</a></li><li><a href="http://technorati.com/profile/emeyer" rel="me">Technorati</a></li></ul></div><div class="panel" id="pointers"><h4>Projects Elsewhere</h4><ul><li><a href="http://aneventapart.com/">An Event Apart</a></li><li><a href="http://complexspiral.com/">Complex Spiral Consulting</a></li><li><a href="http://www.webassist.com/go/css/emeyer/">CSS Sculptor</a></li><li><a href="http://css-discuss.org/">css-discuss</a></li><li><a href="http://microformats.org/">Microformats</a></li><li><a href="http://s5project.org/">S5</a></li></ul></div><div class="panel" id="tour"><ul><li><a href="http://fray.com/issue3/"><img src="http://fray.com/images/i3c.gif" alt="Fray Contributor (Issue 3: Sex &amp; Death)" /></a></li><!-- <li><a href="http://www.webassist.com/go/css/emeyer/"><img src="/pix/CS_ad_180x109.jpg" alt="CSS Sculptor for Dreamweaver" style="max-width: 100%;" /></a></li> --></ul></div><div class="panel">
<h4>Recently Tweeted</h4>
<p class="more"><a href="http://twitter.com/meyerweb">see more</a></p>
<p>Fingernickel choo-choo roll. <small>&#8211;tweeted 2 hours, 40 minutes ago</small></p>
</div><div id="sideblog" class="panel">
<h4>Distractions</h4>
<p class="more">
<a href="/eric/thoughts/recent-links/">archive</a>
</p>
<ul>
<li><a href="http://tweetagewasteland.com/2010/03/my-head-is-in-the-cloud/" title="March 18 | &#8220;I sense that my addiction to the realtime stream is only making room for the consumption of a faster stream.&#8221;">My Head is in the Cloud</a> <small>[via <a href="http://daringfireball.net/">John</a>]</small></li>
<li><a href="http://8bitnyc.com/" title="March 17 | All of a sudden I want to establish a mission in Central Park and negotiate with the natives for gold and food.">8-Bit NYC</a></li>
<li><a href="http://www.youtube.com/watch?v=nFicqklGuB0&amp;feature=player_embedded" title="March 12 | Wry comment expressing my appreciation of the creative derivativeness of this video and its uncanny accuracy in mocking common tropes.">Academy Award Winning Movie Trailer</a></li>
<li><a href="http://www.youtube.com/watch?v=414TmP12WAU" title="March 9 | &#8220;Apple juice&#8230; for half price!&#8221;  More like twice PRICELESS.  (Note: If you&#8217;re at work, don your headphones.)">Happy in Paraguay</a> <small>[via <a href="http://unstoppablerobotninja.com/">Ethan</a>]</small></li>
<li><a href="http://www.youtube.com/watch?v=9V5ubAOeOBk&amp;feature=player_embedded" title="February 10 | This is approximately the best thing ever.">U900 -Walk Don&#8217;t Run (Isogabamaware)</a></li>
<li><a href="http://www.456bereastreet.com/archive/201002/sifr_default_css_hides_content_from_at_least_one_screen_reader/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A 456bereastreet %28456 Berea Street%29" title="February 8 | -9999px comes through again, but I really wish we were beyond that kind of thing.">sIFR default CSS hides content from at least one screen reader</a></li>
<li><a href="http://www.macosxhints.com/article.php?story=20100117064356428" title="February 8 | Storing this for future use.">Take a picture with the iSight camera when a folder is opened</a></li>
<li><a href="http://mingle2.com/blog/view/web-developer-mind" title="February 4 | Mostly valid.  (SEE WHAT I DID THERE?)">The Mind of a Web Developer: An Illustrated Diagram</a></li>
<li><a href="http://www.theonion.com/content/news/science_channel_refuses_to_dumb" title="January 28 | &#8220;Punkin Chunkin, for Christ&#8217;s sake&#8230; What more do you people want?&#8221;">Science Channel Refuses To Dumb Down Science Any Further</a></li>
<li><a href="http://www.mailchimp.com/blog/project-omnivore-declassified/" title="January 27 | Sounds like quite a feat.  But I wonder how we&#8217;d feel if Microsoft or Google announced the same kind of thing on their e-mail services.">MailChimp&#8217;s Project Omnivore: Declassified</a></li>
<li><a href="http://www.politifact.com/truth-o-meter/statements/2010/jan/25/carolyn-maloney/congresswoman-says-democratic-presidents-create-mo/" title="January 26 | &#8220;Obviously, luck matters a lot, but when there is a consistent pattern over more than 60 years, it starts to look like more than just luck.&#8221;">Congresswoman says Democratic presidents create more private-sector jobs</a></li>
<li><a href="http://www.ted.com/talks/taylor_mali_what_teachers_make.html" title="January 25 | Truth.">Taylor Mali: What teachers make</a></li>
<li><a href="http://notebook.johnmartz.com/how-websites-work?c=1" title="January 22 | At last, the truth is out and I can stop pretending:  beatific monkeys are what makes it all go.">How websites work</a></li>
</ul>
</div>
<div class="panel" id="advisory">
<div class="guarded">
<a href="http://blogadvisorysystem.com/"><img src="/pix/bas/guarded.png" alt="Blog Advisory System Alert Level: Guarded"></a>
</div>
</div>

<div class="panel" id="excuse">
<h4>The <a href="/feeds/excuse/">excuse of the day</a> is</h4>
<p>packet storms caused by a flock of rogue penguins</p>
</div>

<div class="panel" id="extras">
<h4>Extras</h4>
<ul>
<li><a href="/feeds/">Feeds</a> &#8226;</li>
<li><a href="/eric/faq.html">FAQ</a> &#8226;</li>
<li><a href="/family.html">Family</a></li>
</ul>
</div>

</div>

<div id="navigate">
<h4>Navigation</h4>
<ul id="navlinks">
<li id="archLink"><a href="/eric/thoughts/">Archives</a></li>
<li id="cssLink"><a href="/eric/css/">CSS</a></li>
<li id="toolsLink"><a href="/eric/tools/">Toolbox</a></li>
<li id="writeLink"><a href="/eric/writing.html">Writing</a></li>
<li id="speakLink"><a href="/eric/talks/">Speaking</a></li>
<li id="otherLink"><a href="/other/">Leftovers</a></li>
<li id="aboutsite"><a href="/ui/about.html">About this site</a></li>
</ul>
</div>

<div id="footer">
<p class="sosumi">All contents of this site, unless otherwise noted, are &copy;1995-2008 <strong>Eric A. and Kathryn S. Meyer</strong>.  All Rights Reserved.</p>
<p>"<a href="/eric/thoughts/">Thoughts From Eric</a>" is powered by the &uuml;bercool <a href="http://wordpress.org/">WordPress</a></p>
</div>
</body>
</html>
