<?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>Thoughts From Eric &#187; Commentary</title>
	<atom:link href="http://meyerweb.com/eric/thoughts/category/commentary/feed/" rel="self" type="application/rss+xml" />
	<link>http://meyerweb.com/eric/thoughts</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>Wed, 08 May 2013 19:05:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>No Laughing Matter</title>
		<link>http://meyerweb.com/eric/thoughts/2013/03/20/no-laughing-matter/</link>
		<comments>http://meyerweb.com/eric/thoughts/2013/03/20/no-laughing-matter/#comments</comments>
		<pubDate>Wed, 20 Mar 2013 15:11:56 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/?p=2205</guid>
		<description><![CDATA[In any online interaction, synchronous or asynchronous, with someone you don’t know really, <em>really</em> well, this rule applies.  <strong>Always.</strong>]]></description>
				<content:encoded><![CDATA[<p>From the wise and insightful Amber Fisher, who credits <a href="http://rocketsciencegroup.com/">The Rocket Science Group</a>’s <a href="http://voiceandtone.com/">Voice and Tone</a> as an inspiration:</p>

<blockquote><p>One of the things I teach tech writers: it&#8217;s okay to have fun with your audience most of the time. But never joke with frustrated people. If you&#8217;re delivering bad news, an alert, or helping a new user troubleshoot a problem, be straightforward and transparent.</p></blockquote>

<p>As I’m sure Amber would be the first to say, said rule is not just for tech writers.  In any online interaction, synchronous or asynchronous, with someone you don’t know really, <em>really</em> well, that rule applies.  <strong>Always.</strong>  And the defense “Hey, man, where’s your sense of humor?” is usually the reddest of flags that you have already screwed this up, and should consider apologizing.</p>

<p>(I’m especially looking at you, Twitterers.)</p>]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2013/03/20/no-laughing-matter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Stinger</title>
		<link>http://meyerweb.com/eric/thoughts/2013/03/04/the-stinger/</link>
		<comments>http://meyerweb.com/eric/thoughts/2013/03/04/the-stinger/#comments</comments>
		<pubDate>Mon, 04 Mar 2013 17:44:19 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[History]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/?p=2155</guid>
		<description><![CDATA[On Friday, the Web Standards Project <a href="http://www.webstandards.org/2013/03/01/our-work-here-is-done/">announced its own dissolution</a>.  I felt a lot of things upon reading the announcement, once I got over my initial surprise: nostalgia, wistfulness, closure.]]></description>
				<content:encoded><![CDATA[<p>(In television, the “stinger” is the clip that plays during or just after the closing credits of a show.)</p>

<p>On Friday, the Web Standards Project <a href="http://www.webstandards.org/2013/03/01/our-work-here-is-done/">announced its own dissolution</a>.  I felt a lot of things upon reading the announcement, once I got over my initial surprise: nostalgia, wistfulness, closure.  And over it all, a deep sense of respect for the Project as a whole, from its inception to its peak to its final act.</p>

<p>In some ways, the announcement was a simple formalization of a longstanding state of affairs, as the Project has gradually grown quieter and quieter over the years, and its initiatives had been passed on to other, more active homes.  It was still impressive to see the group explicitly shut down.  I can’t think of the last time I saw a group that had been so influential and effective recognize that it was time to turn off the lights, and exit with dignity.  As they wrote:</p>

<blockquote cite="http://www.webstandards.org/2013/03/01/our-work-here-is-done"><p>Thanks to the hard work of countless WaSP members and supporters (like you), Tim Berners-Lee’s vision of the web as an open, accessible, and universal community is largely the reality. While there is still work to be done, the sting of the WaSP is no longer necessary. And so it is time for us to close down The Web Standards Project.</p></blockquote>

<p>I have a long history with the WaSP.  Way, way back, deep in the thick of the browser wars, I was invited to be a member of the CSS Action Committee, better known as the CSS Samurai.  We spent the next couple of years documenting how things worked (or, more often, didn’t) in CSS implementations, and—and this was the clever bit, if you ask me—writing up specific plans of action for browsers.  The <a href="http://archive.webstandards.org/css/#The_Top_10_Lists">standards compliance reviews</a> we published told browsers what they needed to fix first, not just what they were getting wrong.  I can’t claim that our every word was agreed with, let alone acted upon, but I’m pretty confident those reviews helped push browser teams in the right direction.  Or, more likely, helped browser teams push their bosses in the direction the teams already wanted to go.</p>

<p>Succumbing to a wave of nostalgia, I spent a few minutes trawling my archives.  I still have what I think is all the mail from the Samurai’s mailing list, run through Project Cool’s servers, from when it was set up in August 1998 up through June of 2000.  My archive totals 1,716 messages from the group, as well as some of the Steering Committee members (mostly Glenn Davis, though George Olsen was our primary contact during the Microsoft style sheets patent brouhaha of February 1999).  If I’m not reading too much into plain text messages over a decade old, we had a pretty great time.  And then, after a while, we were done.  Unlike the WaSP itself, we never really declared an end.  We didn’t even march off into the sunset having declared that the farmers always win.  We just faded away.</p>

<p>Not that that’s entirely a bad thing.  At a certain point, our work was done, and we moved on.  Still, I look back now and wish we’d made it a little more formal.  Had we done so, we might have said something like the WaSP did:</p>

<blockquote cite="http://www.webstandards.org/2013/03/01/our-work-here-is-done"><p>The job’s not over, but instead of being the work of a small activist group, it’s a job for tens of thousands of developers who care about ensuring that the web remains a free, open, interoperable, and accessible competitor to native apps and closed eco-systems. It’s <em>your</em> job now…</p></blockquote>

<p>And so it is.  These last years have shown that the job is in very good hands.</p>

<p>“Never doubt that a small group of thoughtful, committed citizens can change the world. Indeed, it is the only thing that ever has.” said Margaret Mead.  I see now that the way those small groups truly change the world is by convincing the rest of the world that they are right, thus co-opting the world to their cause.  Done properly, the change makes the group obsolete.  It’s a lesson worth remembering, as we look at the world today.</p>

<p>I’m honored to have been a part of the WaSP, and I offer my deepest samurai bow of respect to its founders, its members, and its leaders.  Thank you all for making the web today what it is.</p>]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2013/03/04/the-stinger/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Election Day Results</title>
		<link>http://meyerweb.com/eric/thoughts/2012/11/06/election-day-results/</link>
		<comments>http://meyerweb.com/eric/thoughts/2012/11/06/election-day-results/#comments</comments>
		<pubDate>Tue, 06 Nov 2012 20:00:04 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/?p=2049</guid>
		<description><![CDATA[[FOR PUBLICATION WEDNESDAY 7 NOVEMBER OR WHENEVER ALL THE COURT CHALLENGES ARE SETTLED]]]></description>
				<content:encoded><![CDATA[<p>
[FOR PUBLICATION WEDNESDAY 7 NOVEMBER OR WHENEVER ALL THE COURT CHALLENGES ARE SETTLED]
</p>
<p>
After a campaign season that seemed even more vitriolic and interminable than any before it, America finally made its choice for President.  To many, that choice was surprising, even unthinkable.  To his supporters, of course, the win was a welcome vindication after so many difficulties and setbacks.  Between the deluge of attack ads, the debate stumbles, and the lackluster polling, it must have seemed at times as if the odds were insurmountable.  Despite all the roadblocks, however, things moved his way in the late stages, providing enough lift to secure the election.
</p>
<p>
Of course, nothing will be easy: with a divided Congress, the President will have a tough time making progress on his legislative agenda, and overseas challenges are no less acute now that the U.S. election has been settled.  The budgetary situation is still a major problem, with the “fiscal cliff” and the prospect of yet another bruising Congressional showdown&nbsp;looming ever larger in the country’s headlights.  The one bright spot is that—assuming the will is found to avoid plunging over the cliff—the economic recovery is likely to continue, albeit as slowly and cautiously as ever.  To a populace wearied by the campaign, any positive news will be more than welcome.
</p>
<p>
<small>(With apologies to <cite>The Economist</cite>.)</small>
</p>]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2012/11/06/election-day-results/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Customizing Your Markup</title>
		<link>http://meyerweb.com/eric/thoughts/2012/03/28/customizing-your-markup/</link>
		<comments>http://meyerweb.com/eric/thoughts/2012/03/28/customizing-your-markup/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 14:55:49 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[(X)HTML]]></category>
		<category><![CDATA[Commentary]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Microformats]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[Standards]]></category>

		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/?p=1713</guid>
		<description><![CDATA[HTML5 allows you (at the moment) to create your own custom elements.  Only, not really.]]></description>
				<content:encoded><![CDATA[<p>So HTML5 allows you (at the moment) to create your own custom elements.  Only, not really.</p>

<p><em>(Ed. note: this post has been corrected since its publication, and <a href="http://meyerweb.com/eric/thoughts/2012/04/10/element-customization/">a followup clarification has been posted</a>.)</em></p>

<p>Suppose you’re creating a super-sweet JavaScript library to improve text presentation—like, say, <a href="http://typebutter.com/">TypeButter</a>—and you need to insert a bunch of elements that won’t accidentally pick up pre-existing CSS.  That rules <code>span</code> right out the door, and anything else would be either a bad semantic match, likely to pick up CSS by mistake, or both.</p>

<p>Assuming you don’t want to spend the hours and lines of code necessary to push ahead with <code>span</code> and a whole lot of dynamic CSS rewriting, the obvious solution is to invent a new element and drop that into place.  If you’re doing kerning, then a <code>kern</code> element makes a lot of sense, right?  Right.  And you can certainly do that in browsers today, as well as years back.  Stuff in a new element, hit it up with some CSS, and you’re done.</p>

<p>Now, how does this fit with the HTML5 specification?  Not at all well.  HTML5 does <em>not</em> allow you to invent new elements and stuff them into your document willy-nilly.  You can’t even do it with a prefix like <code>x-kern</code>, because hyphens aren’t valid characters for element names (unless I read <a href="http://www.w3.org/TR/html5/syntax.html#syntax-tag-name">the rules</a> incorrectly, which is always possible).</p>

<p>No, here’s what you do instead <ins datetime="2012-04-10T18:58:15+00:00">(corrected 10 Apr 12)</ins>:</p>

<ol>
<li><del datetime="2012-04-10T18:58:15+00:00">Wrap your document, or at least the portion of it where you plan to use your custom markup,</del><ins datetime="2012-04-10T18:58:15+00:00">Define the element customization you want</ins> with an <code>element</code> element.  That’s not a typo.</li>
<li>To your <code>element</code> element, add an <code>extends</code> attribute whose value is the HTML5 element you plan to extend.  We’ll use <code>span</code>, but you can extend any element.</li>
<li>Now add a <code>name</code> attribute that names your custom “element” name, like <code>x-kern</code>.</li>
<li>Okay, you’re ready!  Now anywhere you want to add a customized element, drop in the elements named by <code>extends</code> and then supply the <code>name</code> via an <code>is</code> attribute.</li>
</ol>

<p>Did you follow all that?  No?  Okay, maybe this will make it a bit less unclear.  <ins datetime="2012-04-10T18:58:15+00:00">(Note: the following code block was corrected 10 Apr 12.)</ins></p>

<pre><code>&lt;element extends="span" name="x-kern"&gt;&lt;/element&gt;
&lt;h1&gt;
&lt;span is="x-kern" style="…"&gt;A&lt;/span&gt;
&lt;span is="x-kern" style="…"&gt;u&lt;/span&gt;
&lt;span is="x-kern" style="…"&gt;t&lt;/span&gt;
&lt;span is="x-kern" style="…"&gt;u&lt;/span&gt;
mn
&lt;/h1&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
</code></pre>

<p>(Based on markup taken from the <a href="http://typebutter.com/demo/">TypeButter demo page</a>.  I simplified the inline <code>style</code> attributes that TypeButter generates for purposes of clarity.)</p>

<p>So that’s <a href="http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html#custom-element-section">how you create “custom elements” in HTML5 as of now</a>.  Which is to say, you don’t.  All you’re doing is attaching a label to an existing element; you’re sort of customizing an existing element, not creating a customized element.  That’s not going to help prevent CSS from being mistakenly applied to those elements.</p>

<p>Personally, I find this a really, really, <em>really</em> clumsy approach—so clumsy that I don’t think I could recommend its use.  Given that browsers will accept, render, and style arbitrary elements, I’d pretty much say to just go ahead and do it.  Do try to name your elements so they won’t run into problems later, such as prefixing them with an “x” or your username or something, but since browsers support it, may as well capitalize on their capabilities.</p>

<p>I’m not in the habit of saying that sort of thing lightly, either.  While I’m not the wild-eyed standards-or-be-damned radical some people think I am, I have always striven to play within the rules when possible.  Yes, there are always situations where you work counter to general best practices or even the rules, but I rarely do so lightly.  As an example, my co-founders and I went to some effort to play nice when we created the principles for <a href="http://microformats.org/">Microformats</a>, segregating our semantics into attribute values—but only because <a href="http://tantek.com/" rel="friend colleague muse met">Tantek</a>, <a href="http://ma.tt/" rel="friend met">Matt</a>, and I cared a <em>lot</em> about long-term stability and validation.  We went as far as necessary to play nice, and not one millimeter further, and all the while we wished mightily for the ability to create custom attributes and elements.</p>

<p>Most people aren’t going to exert that much effort: they’re going to see that something works and never stop to question if what they’re doing is valid or has long-term stability.  “If the browser let me do it, it must be okay” is the background assumption that runs through our profession, and why wouldn’t it?  It’s an entirely understandable assumption to make.</p>

<p>We need something better.  My personal preference would be to expand the “<a href="http://www.w3.org/TR/html5/syntax.html#foreign-elements">foreign elements</a>” definition to encompass any unrecognized element, and let the parser deal with any structural problems like lack of well-formedness.  Perhaps also expand the rules about element names to permit hyphens, so that we could do things like <code>x-kern</code> or <code>emeyer-disambiguate</code> or whatever.  I could even see my way clear to defining an way to let an author list their customized elements.  Say, something like <code>&lt;meta name=&quot;custom-elements&quot; content=&quot;kern lead follow embiggen shrink&quot;/&gt;</code>.  I just made that up off the top of my head, so feel free to ignore the syntax if it’s too limiting. The general concept is what’s important.</p>

<p>The creation of customized elements isn’t a common use case, but it’s an incredibly valuable ability, and people are going to do it.  They’re <em>already</em> doing it, in fact.  It’s important to figure out how to make the process of doing so simpler and more elegant.</p>]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2012/03/28/customizing-your-markup/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Vigilance and Victory</title>
		<link>http://meyerweb.com/eric/thoughts/2012/01/20/vigilance-and-victory/</link>
		<comments>http://meyerweb.com/eric/thoughts/2012/01/20/vigilance-and-victory/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 14:56:13 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[Culture]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/?p=1616</guid>
		<description><![CDATA[After the blackout on Wednesday, it seems that the political tides are shifting against SOPA and the PROTECT IP Act.  Now prepare for the much longer battle.]]></description>
				<content:encoded><![CDATA[<p>After the blackout on Wednesday, <a href="http://s3.amazonaws.com/propublica/assets/images/sopa-opera-count.png">it seems that the political tides are shifting</a> against <acronym title="Stop Online Piracy Act">SOPA</acronym> and the <acronym title="Preventing Real Online Threats to Economic Creativity and Theft of Intellectual Property">PROTECT IP</acronym> Act—as of this writing, there are now more members of Congress in opposition to the bills than in favor.  That’s good news.</p>

<p>I wil reiterate something I said on Twitter, though:  the members of tech community, particularly those who are intimately familiar with the basic protocols of the Internet, need to keep working on ways to counteract SOPA/PIPA.  What form that would take, I’m not sure.  Maybe a truly distributed DNS system, one that can’t be selectively filtered by any one government or other entity.  I’m not an expert in the area, so I don’t actually know if that’s feasible.  There’s probably a much more clever solution, or better still suite of solutions.</p>

<p>The point is, SOPA and PIPA may soon go down to defeat, <em>but they will return in another form</em>.  There is too much money in the hands of those who first drafted these bills, and they’re willing to give a fair chunk of that money to those who introduced the bills in Congress.  Never mistake winning a battle with winning the war.  As someone else observed on Twitter (and I wish I could find their tweet now), the Internet community fought hard against the <acronym title="Digital Millennium Copyright Act">DMCA</acronym>, and it’s been US law for more than a decade.</p>

<p>By all means, take a moment to applaud the widespread and effective community effort to oppose and (hopefully) defeat bad legislation.  When that’s done, take notes on what worked and what didn’t, and then prepare to fight again and harder.  Fill the gap between battles with outreach to your elected representatives and with efforts to educate the non-technical in your life to explain why SOPA/PIPA were and are a bad idea.</p>

<p>Days of action feel great.  Months of effort are wearying.  But it’s only the latter that can slowly and painfully bring about long-term change.</p>]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2012/01/20/vigilance-and-victory/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Standing In Opposition</title>
		<link>http://meyerweb.com/eric/thoughts/2012/01/18/standing-in-opposition/</link>
		<comments>http://meyerweb.com/eric/thoughts/2012/01/18/standing-in-opposition/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 16:42:54 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[Culture]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/?p=1605</guid>
		<description><![CDATA[Though I certainly do not support <acronym title="Stop Online Piracy Act">SOPA</acronym> or the <acronym ="Preventing Real Online Threats to Economic Creativity and Theft of Intellectual Property">PROTECT IP</acronym> Act (the complete contrived acronym of PIPA), I will not be blacking out meyerweb.  Find out why.]]></description>
				<content:encoded><![CDATA[<p>
Though I certainly do not support <acronym title="Stop Online Piracy Act">SOPA</acronym> or the <acronym title="Preventing Real Online Threats to Economic Creativity and Theft of Intellectual Property">PROTECT IP</acronym> Act (the complete, rather contrived acronym of PIPA), I will not be blacking out meyerweb.  This is largely because the vast majority of my readers already know about these bills, and very likely oppose them; as for anyone who visits but does not know about these bills, I feel I’ll do better to speak out than to black out.  (Which is not a criticism of those who do black out.  We all fight in our own ways.)
</p>
<p>
Instead, I will reproduce here the letter I attempted to send via contact form to <a href="http://brown.senate.gov/" title="Sherrod Brown, D-OH">my state Senator</a> this morning, and which I will print out and send by regular postal service later today.
</p>

<blockquote>
<p>
Senator Brown:
</p>
<p>
I grew up in Lexington, Ohio.  I moved to Cleveland in pursuit of a career, and found success.  Through a combination of good luck and hard work, I have (rather to my surprise) become a widely recognized name in my field, which is web design and development.  Along the way, I co-founded a web design conference with an even more widely respected colleague that has become one of the most respected and successful web design events in the world.  This business is headquartered in Ohio—I live in Cleveland Heights with my family, and I intend to stay here until I either retire to Florida or die.  Politically I’m best described as a moderate independent, though I do tend to lean a bit to the left.
</p>
<p>
As you can imagine, given my line of work, I have an opinion regarding the PROTECT IP Act which you have co-sponsored.  The aims of PROTECT IP are understandable, but the methods are unacceptable.  Put another way, if you wish to combat piracy and intellectual property theft, there are far better ways to go about it.
</p>
<p>
As someone with twenty years of technical experience with the Internet and nearly as many with the web—I started creating web pages in late 1993—please believe me when I say the enforcement mechanisms of the bill are deeply flawed and attack the very features of the Web that make it what it is.  They are akin to making a criminal of anyone who gives directions to a park where drug trafficking takes place, regardless of whether they knew about the drug trafficking.  You don’t have to be in favor of drug trafficking to oppose that.
</p>
<p>
This is not a case where tweaking a clause or two will fix it; correction in this case would mean starting from scratch.  Again, the objection is not with the general intent of the bill.  It is with how the bill goes about achieving those aims.
</p>
<p>
If you would like to discuss this with me further, I would be delighted to do whatever I can to help, but in any event I strongly urge you to reconsider your co-sponsorship of the PROTECT IP Act.
</p>
<p>
Thank you for your time and consideration.
</p>
<p>Eric A. Meyer (http://meyerweb.com/)</p>
<p>Partner and co-founder, An Event Apart (http://aneventapart.com/)</p>
</blockquote>

<p>
If you agree that the PROTECT IP Act is poorly conceived, <a href="http://projects.propublica.org/sopa/pipa#roll_call" title="PIPA Roll Call">find out if your senator supports PIPA</a>.  If they do, get in touch and let them know about your opposition.  If they oppose the bill, get in touch and thank them for their opposition.  If their support or opposition isn’t known, get in touch and ask them to please speak out in opposition to the bill.
</p>
<p>
As others have said, postal letters are better than phone calls, which are in turn better than e-mail, which is in turn better than signing petitions.  Do what you can, please.  The web site you save might be your own.
</p>]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2012/01/18/standing-in-opposition/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>App Shopping</title>
		<link>http://meyerweb.com/eric/thoughts/2010/06/03/app-shopping/</link>
		<comments>http://meyerweb.com/eric/thoughts/2010/06/03/app-shopping/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 14:16:15 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/?p=1348</guid>
		<description><![CDATA[While I agree with Neven Mrgan's <a href="http://mrgan.tumblr.com/post/653708588/the-walled-garden">Walled Gardens</a>, I feel like the whole imagery of walled gardens is a bit of a metaphorical stretch—not because it's inaccurate, but because it's fundamentally unnecessary.  We don't need metaphors here.]]></description>
				<content:encoded><![CDATA[<p>
While I agree with Neven Mrgan&#8217;s <a href="http://mrgan.tumblr.com/post/653708588/the-walled-garden">Walled Gardens</a>, I feel like the whole imagery of walled gardens is a bit of a metaphorical stretch—not because it&#8217;s inaccurate, but because it&#8217;s fundamentally unnecessary.  We don&#8217;t need metaphors here.
</p>
<p>
That&#8217;s because the iTunes App Store is just what its name states: it is a store.  That has a fairly specific and intentional meaning in the world of commerce.  It means that the stock is not infinite and that someone has screened it.
</p>
<p>
Think of visiting a store in the real world.  Not a small shop, but a store.  Something large (or at least largish) with lots of things to buy.  Macy&#8217;s.  Target.  Wal-Mart.  Or even the local hardware and general store in a small town, where there&#8217;s more than just tools and nails and bags of cement mix.
</p>
<p>
You go there to buy things because it&#8217;s a central location for buying a lot of things.  But inherent in the experience is that what you find on the shelves has been selected and vetted by the person or people running the store.  That doesn&#8217;t just mean favoring one brand of soap over another, but also deciding what to carry at all.  Your hardware store doesn&#8217;t sell flat-panel HDTVs.  Macy&#8217;s doesn&#8217;t stock six-inch PVC pipe.  Target doesn&#8217;t offer porn.  They have all selected some things to carry and rejected, if only implicitly, others.  Certain brands are not carried because their quality didn&#8217;t meet the proprietor&#8217;s standards, didn&#8217;t fit the store&#8217;s audience and brand, or weren&#8217;t sufficiently profitable to claim valuable shelf space.
</p>
<p>
This is an assumption about stores that we hardly notice except when it&#8217;s clearly not so.  If you&#8217;ve ever stepped into a store where it&#8217;s fairly obvious that everything, and I mean <em>everything</em>, the owner has ever come across in their life has been thrown onto the shelves on the theory that hell, it might look like junk but you never know what might be valuable to <em>somebody</em>, and you know what I mean.  We subconsciously expect that a store will offer wares which have been screened for quality and price, all conveniently collected in one place for our purchase.
</p>
<p>
So it is with the App Store.  It&#8217;s a central location for iPhone and iPad owners to go shop for apps.  The stock is large—too large for any physical store to handle—but it is still screened.  You may not like the screening criteria, just as you may not like the screening criteria exercised at Wal-Mart, but it exists nonetheless.
</p>
<p>
In the desktop computing world, of course, no such control exists.  There you find and collect applications wherever you find them, whether in a store or somewhere on the internet.  This is much the same as doing your shopping by driving around to garage sales and flea markets.  Taken as an aggregate, there&#8217;s no quality control, no screening, no organization.  It&#8217;s catch as catch can.
</p>
<p>
There&#8217;s room in the world for both models, of course.  Some people avoid stores in favor of flea markets and yard sales and the like because that&#8217;s what they prefer.  Others go to stores and avoid garage sales because they prefer the more controlled experience.  In fact, think about everyone you know.  How many prefer store shopping, and how many prefer flea market shopping?  In that light, the iTunes Store&#8217;s success is really no mystery.  It&#8217;s not just curated computing, which some have derided.  It&#8217;s curated shopping, a model which has already proven wildly popular.  More than that, it&#8217;s simple and cheap curated shopping, which is approximately the square of two wildly popular models.
</p>
<p>
You may say that there&#8217;s a significant difference between the physical world and the iTunes App Store.  If the real world were like iPhone/iPad ecosystem, there would only be one store in the whole world.  Everyone would have to shop there, and any merchant who couldn&#8217;t get in would be out of business for lack of customers.  In the real world, we can go to any store we like:  each is curated, but we can shop at the stores that offer what we like (read: that curate in a manner we find pleasing) and not the ones that don&#8217;t.  The App Store is the only place to shop.
</p>
<p>
But that&#8217;s only true if you believe that the iPhone/iPad is the only mobile ecosystem in town, which is an assumption a weirdly large number of Apple&#8217;s critics seem to make.  In fact, you&#8217;re perfectly free to join other ecosystems and shop at other stores.  Android has one, for example.  There are others.  If you don&#8217;t like what Apple offers you, then you can shop somewhere else, as many people do.
</p>
<p>
But let&#8217;s assume that you&#8217;re personally invested in the iPhone/iPad ecosystem and can&#8217;t for some reason avoid or leave it.  In that case, you&#8217;re stuck with that one single store, the App Store.
</p>
<p>
Except that&#8217;s only true because until now, nobody has launched an alternate store that offers <a href="http://meyerweb.com/eric/thoughts/2010/05/19/the-web-stack/">web stack</a> applications (WSAs).  Maybe that&#8217;s because nobody is really building WSAs yet, at least not in numbers large enough to justify building a store to sell them.  But then, maybe developers aren&#8217;t building WSAs because there&#8217;s no central place to sell them.  The centralization of stores is at least as attractive to sellers as to shoppers.  That&#8217;s a driver behind the recent announcements from Google and Mozilla, though as yet they&#8217;re just announcements.
</p>
<p>
A WSA store organized along lines similar to the App Store could do very, very well.  It would need to make the shopping and, more importantly, purchasing experiences as frictionless as possible; this is something the iTunes Store has definitely gotten right.  But suppose someone built a great WSA store and sold WSAs on a 20% commission.  How many developers might look at that and figure that the extra 10% was worth making a shift?
</p>
<p>
It certainly wouldn&#8217;t be as easy as just setting up a store and building a Scrooge McDuck vault; no, there would be many challenges, but nothing truly insurmountable.  Of that I am certain.  And the great thing is that, just like in the physical world, there&#8217;s room for multiple stores—boutique app shops, if you like.  Maybe one specializes in games; another in parent- and kid-centric apps; another in productivity apps; yet another in the &#8220;naughty&#8221; apps Apple booted out of its ecosystem a while back.  (I call them &#8220;fapps&#8221; for obvious reasons.)  Maybe these are app shops instead of app stores, but then, any large population can support a whole lot of shops.  They can coexist with any number of other stores, including those from Apple and Google and Mozilla and anyone else.
</p>
<p>
None of these WSA stores and shops would be able to sell native apps, but that&#8217;s less of an obstacle than many seem to think.  The window between native app behavior and WSA behavior has narrowed at an astonishing rate recently, and will continue to do so.  I&#8217;m not saying that you can do absolutely anything with a WSA that you can do in native code, of course, but a lot of native apps could have been done as WSAs.  Could still be done that way, in fact.
</p>
<p>
That points to the other advantage of a WSA store: it&#8217;s not limited to the iPhone/iPad ecosystem.  A well-written WSA can run in multiple ecosystems.  Being based on web technologies, they can (for the most part) go where the web goes.  The market is suddenly much bigger than the iTunes Store, much bigger than people carrying around Apple devices.  Much bigger than the people carrying around Droids, for that matter.  With WSAs, developers can sell in multiple ecosystems at once, using the most successful cross-platform technology since ones and zeros.
</p>
<p>
Besides which, in a very real sense, WSAs are not cross-platform apps.  They&#8217;re web platform apps that run in a native app that provides a window from a mobile ecosystem into the web.  We call that app a web browser, but it&#8217;s becoming more than that, and faster than many would have credited even six months ago.  The opportunities are beyond enormous.
</p>
<p>
For starters, imagine this: you have bought a number of apps at your favorite WSA store and installed them on your iPhone.  Then you find out you can finally get the hell off AT&#038;T and move to a Verizon iPhone.  When you do that, the WSA store lets you install the apps you&#8217;ve already bought on your new ViPhone.  If it&#8217;s sufficiently smart, it will even migrate their data for you by way of the store itself.  Then, two years later, you decide you&#8217;ve had enough of Apple and want to move to another smartphone.  Once again, your apps and data go with you.
</p>
<p>
This is what the web stack makes possible.  If you thought mobile number portability was cool, imagine what you&#8217;ll think of mobile app portability.
</p>
]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2010/06/03/app-shopping/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>Inspector Scrutiny</title>
		<link>http://meyerweb.com/eric/thoughts/2010/02/15/inspector-scrutiny/</link>
		<comments>http://meyerweb.com/eric/thoughts/2010/02/15/inspector-scrutiny/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 14:54:23 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Commentary]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/?p=1283</guid>
		<description><![CDATA[It's been said that web inspectors—Firebug, Dragonfly, and so forth—are not always entirely accurate.  The real truth is that web inspectors repeat to us the lies they are told, which are the same lies we can be told to our faces.]]></description>
				<content:encoded><![CDATA[<p>
It&#8217;s been <a href="http://meyerweb.com/eric/thoughts/2009/11/03/pseudo-phantoms/">said before</a> that web inspectors—Firebug, Dragonfly, the inspectors in Safari and Chrome, and so forth—are not always entirely accurate.  A less charitable characterization is that they lie to us, but that&#8217;s not exactly right.  The real truth is that web inspectors repeat to us the lies they are told, which are the same lies we can be told to our faces if we ask directly.
</p>
<p>
Here&#8217;s how I know this to be so:
</p>
<pre>
body {font-size: medium;}
</pre>
<p>
Just that.  Apply it to a <a href="http://meyerweb.com/eric/css/tests/medium-font.html">test page</a>.  Inspect the <code>body</code> element in any web inspector you care to fire up.  Have it tell you the computed styles for the <code>body</code> element.  Assuming you haven&#8217;t changed your browser&#8217;s font sizing preferences, the reported value will be <code>16px</code>.
</p>
<p>
You might say that that makes sense, since an unaltered browser equates <code>medium</code> with &#8220;16&#8243;.  But as we saw in &#8220;<a href="http://meyerweb.com/eric/thoughts/2010/02/12/fixed-monospace-sizing/">Fixed Monospace Sizing</a>&#8220;, the <code>16px</code> value is <em>not</em> what is inherited by child elements.  What is inherited is <code>medium</code>, but web inspectors <em>will never show you that</em> as a computed style.  You can see it in the list of declared styles, which so far as I can tell lists &#8220;specific values&#8221; (as per <a href="http://www.w3.org/TR/CSS2/cascade.html#value-stages">section 6.1 of CSS2.1</a>).  When you look to see what&#8217;s actually applied to the element in the &#8220;Computed Styles&#8221; view, you are being misled.
</p>
<p>
We can&#8217;t totally blame the inspectors, because what they list as computed styles is what they are given by the browser.  The inspectors take what the browser returns and prettify it for us, and give us ways to easily alter those values on the fly, but in the end they&#8217;re just DOM inspectors.  They don&#8217;t have a special line into the browser&#8217;s internal data.  Everything they report comes straight from the same DOM that any of us can query.  If you invoke:
</p>
<pre><code>var obj = document.getElementsByTagName('body')[0];
alert(getComputedStyle(obj,null).getPropertyValue('font-size'));</code>
</pre>
<p>
&#8230;on <a href="http://meyerweb.com/eric/css/tests/medium-font.html">a document being given the rule I mentioned above</a>, you will get back <code>16px</code>, not <code>medium</code>.
</p>
<p>
This fact of inspector life was also demonstrated in &#8220;<a href="http://meyerweb.com/eric/thoughts/2010/02/10/rounding-off/">Rounding Off</a>&#8220;.  As we saw there, browsers whose inspectors report integer pixel values also return them when queried directly from the DOM.  This despite the fact that <a href="http://meyerweb.com/eric/css/tests/font-size-rounding.html">it can be conclusively shown</a> that those same browsers are internally storing non-integer values.
</p>
<p>
Yes, it might be possible for an inspector to do its own analysis of properties like <code>font-size</code> by checking the element&#8217;s specified values (which it knows) and then crawling up the document tree to do the same to all of the element&#8217;s ancestors to try to figure out a more accurate computed style.  But what bothers me is that the browser reported computed values that simply aren&#8217;t accurate in the first place.  it seems to me that they&#8217;re really &#8220;actual values&#8221;, not &#8220;computed values&#8221;, again in the sense of <a href="http://www.w3.org/TR/CSS2/cascade.html#value-stages">CSS2.1:6.1</a>.  This makes <code>getComputedStyle()</code> fairly misleading as a method name; it should really be <code>getActualStyle()</code>.
</p>
<p>
No, I don&#8217;t expect the DOM or browsers to change this, which is why it&#8217;s all the more important for us to keep these facts in mind.  Web inspectors are very powerful, useful, and convenient DOM viewers and editors, essentially souped-up interfaces to what we could collect ourselves with JavaScript.  They are thus limited by what they can get the browser to report to them.  There are steps they might take to compensate for known limitations, but that requires them to second-guess both what the browser does now and what it might do in the future.
</p>
<p>
The point, if I may be so bold, is this:  never place all your trust in what a web inspector tells you.  There may be things it cannot tell you because it does not know them, and thus what it does tell you may on occasion mislead or confuse you.  Be wary of what you are told—because even though all of it is correct, not quite all of it is true, and those are always the lies that are easiest to believe.
</p>
]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2010/02/15/inspector-scrutiny/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>A Matter of Conscience</title>
		<link>http://meyerweb.com/eric/thoughts/2009/10/17/a-matter-of-conscience/</link>
		<comments>http://meyerweb.com/eric/thoughts/2009/10/17/a-matter-of-conscience/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 01:51:14 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[Culture]]></category>
		<category><![CDATA[Observations]]></category>

		<guid isPermaLink="false">http://meyerweb.com/eric/thoughts/?p=1171</guid>
		<description><![CDATA[Louisiana Justice of the Peace Keith Bardwell has gained national notoriety for personally refusing to issue a marriage license to an interracial couple.  I've found myself very interested by one of the things he said by way of explanation.]]></description>
				<content:encoded><![CDATA[<p>
So Louisiana Justice of the Peace Keith Bardwell has gained national notoriety for <a href="http://www.wwltv.com/local/stories/wwl101709mlmarriage.227fa1c6a.html">refusing to issue a marriage license to an interracial couple</a>, referring them instead to another justice to have the marriage performed.  His action has, of course, provoked a great deal of condemnation.  Pretty much every elected Louisiana official above Mr. Bardwell (and plenty of them to either side) in the administrative hierarchy has called for his removal from his position.  That goes all the way up to Republican Governor Bobby Jindal, who said:
</p>
<blockquote>
<p>
&#8220;This is a clear violation of constitutional rights and federal and state law. Mr. Bardwell&#8217;s actions should be fully reviewed by the Judiciary Commission and disciplinary action should be taken immediately &#8211; including the revoking of his license.&#8221;
</p>
</blockquote>
<p>
As for Mr. Bardwell himself,<a href="http://news.yahoo.com/s/ap/20091015/ap_on_re_us/us_interracial_rebuff"> he has claimed not to be racist, but instead concerned for the biracial children that result from mixed-race marriage</a>.  Of all that he&#8217;s said, though, I was particularly interested by the following:
</p>
<blockquote>
<p>
&#8220;I didn&#8217;t tell this couple they couldn&#8217;t get married. I just told them I wouldn&#8217;t do it.&#8221;
</p>
</blockquote>
<p>
It interested me because it&#8217;s exactly the kind of reasoning that underlies &#8220;conscience protection&#8221; laws that exempt medical professionals who wish to refuse participation in abortion, or dispensation of contraception.
</p>
<p>
So now I&#8217;m very curious to know whether what pro-life groups have to say about what this man has done and how he&#8217;s done it.  Or, for that matter, what Governor Jindal himself now thinks of <a href="http://www.nola.com/news/t-p/capital/index.ssf?/base/news-7/124703057228210.xml&amp;coll=1">the bill he recently signed into law</a>.
</p>]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2009/10/17/a-matter-of-conscience/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Nine Into Five</title>
		<link>http://meyerweb.com/eric/thoughts/2009/09/02/nine-into-five/</link>
		<comments>http://meyerweb.com/eric/thoughts/2009/09/02/nine-into-five/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 16:10:44 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[(X)HTML]]></category>
		<category><![CDATA[Commentary]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://meyerweb.com/?p=1149</guid>
		<description><![CDATA[Like so many others, I had tried to dig into the meat of HTML5 and figure out just what the heck was going on.  Like so many others, I had come away with my head reeling from the massive length and depth of the often-changing specification, unsure of the real meaning of much of what I had read.  And like so many others, I had gone to read the commentary surrounding HTML5 and come away deeply dispirited by the confusion, cross-claims, and rancor I found.  Then I received an invitation to join a small, in-person gathering of like-minded people, many of them just as confused and dispirited as I, to turn our collective focus to the situation and see what we found.  I already had plans for the meeting's scheduled dates.  I altered the plans.]]></description>
				<content:encoded><![CDATA[<p>
Like so many others, I had tried to dig into the meat of <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/">HTML5</a> and figure out just what the heck was going on.  Like so many others, I had come away with my head reeling from the massive length and depth of the often-changing specification, unsure of the real meaning of much of what I had read.  And like so many others, I had gone to read the commentary surrounding HTML5 and come away deeply dispirited by the confusion, cross-claims, and rancor I found.
</p>
<p>
Then I received an invitation to join <a href="http://www.flickr.com/photos/zeldman/sets/72157622014232906/">a small, in-person gathering</a> of like-minded people, many of them just as confused and dispirited as I, to turn our collective focus to the situation and see what we found.  I already had plans for the meeting&#8217;s scheduled dates.  I altered the plans.
</p>
<p>
Over two long days, we poked and prodded and pounded on the HTML5 specification&#8212;doing our best to figure out what was meant by, and what would result from, this phrase or that example; trying to reconcile seemingly arbitrary design choices with what we knew of the web and its history and the stated goals of the HTML5 specification; puzzling over the implications of example code and detailed algorithms and non-normative notes.
</p>
<p>
In the end, we came away with a better understanding of what&#8217;s going on, and out of that arose <a href="http://www.zeldman.com/superfriends/guide/">some concerns and suggestions</a>.  But in the main, we felt much better about what&#8217;s going on in HTML5, and have now <a href="http://www.zeldman.com/superfriends/">said so publicly</a>.
</p>
<p>
Personally, there are two markup changes I&#8217;d like most to see:
</p>

<ol>
<li>
<p>
<strong>The content model of <code>footer</code> should match that of <code>header</code>.</strong>
As others have said, the English-language name of the <code>footer</code> element creates expectations about what it is and how it should work.  As the spec now stands, most of those expectations will be wrong.  To wit: if your page&#8217;s footer includes navigation links, and especially if you have an HTML5-structured &#8220;<a href="http://ui-patterns.com/pattern/FatFooter">fat footer</a>&#8220;, you can&#8217;t use <code>footer</code> to contain it.
</p>
<p>
If this feels a little familiar, it should: the same problem happened with <code>address</code>, which was specified to mean only the contact information for the author of a page.  It was quite explicitly specified to <em>not</em> accept mailing addresses.  Of course, tons of people did just that, because they had an address and there was an <code>address</code> element, so of course they went together!
</p>
<p>
A lot of us cringed every time this came up in the last ten years of conducting training, because it meant we&#8217;d have to spend a few minutes explaining that the meaning of the element&#8217;s name clashed with its technical design.  We saw a lot of furrowed brows, rolled eyes, and derisively shaken heads.  That will be magnified a millionfold with <code>footer</code> if things are allowed to stand as they are.
</p>
<p>
As I said, the fix is simple: just change the content model of <code>footer</code> to state:
</p>
<blockquote><p>Flow content, but with no header or footer element descendants.</p></blockquote>
<p>
That&#8217;s exactly the same content model as <code>header</code>, and for the same reasons.
</p>
</li>
<li>
<p>
<strong><code>time</code> needs to be less restrictive.</strong>  That&#8217;s not very precise, I know.  But as things stand now, you can only apply <code>time</code> to Gregorian datetimes, and you&#8217;re not supposed to use it for anything that couldn&#8217;t be easily represented in a calendaring program.  The HTML5 specification says:
</p>
<blockquote><p>The time element is not intended for encoding times for which a precise date or time cannot be established.</p></blockquote>
<p>
That makes me wonder, in a manner not at <em>all</em> like Robert Plant, how precise do we have to be?  The answer, I&#8217;m sorry to say, is too much.
</p>
<p>
To pick an example: I have what I think of as <a href="http://meyerweb.com/eric/browsers/timeline-structured.html">a great use case for the <code>time</code> element</a>, and while it uses the Gregorian calendar, it&#8217;s only accurate to whole months (as is <a href="http://en.wikipedia.org/wiki/Browser_timeline#1993.E2.80.932009">Wikipedia&#8217;s version</a>).  In some cases I could get the values down to specific days; but in others, maybe not.  So I can&#8217;t use the <code>datetime</code> attribute, which <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/infrastructure.html#valid-date-string">requires at least year-month-day</a>, if not actual hours and minutes.  I could omit the attribute, and just have this:
</p>
<pre>
&lt;time&gt;October 2007&lt;/time&gt;
</pre>
<p>
In that case, the content has to be a valid date string in content&#8212;which is to say, a valid date string with optional whitespace.  So that won&#8217;t work.
</p>
<p>
I&#8217;ve pondered how best to tackle this, as did the Super Friends.  Our suggestion is to allow bare year and month-day values as permitted in ISO8601.  In addition, I think we should allow a valid date string to only require a year, with month, day, and time optional.  That seems good enough as long as we&#8217;re going to go with the idea that the Gregorian calendar contains all the time we ever want to structure.
</p>
<p>
But what about other, older dates, some of which are fairly precisely known within their own calendars?  On that point, though the historian in me clamors for a fix, I&#8217;m uncertain as to what.  <a href="http://quirksmode.org/" rel="acquaintance colleague met">PPK</a>, on the other hand, has put a<em>lot</em> of thought into this and written <a href="http://www.quirksmode.org/blog/archives/2009/04/making_time_saf.html">a piece</a> that I have skimmed but never, perhaps ironically, found the time to read in its entirety.
</p>

</li></ol>

<p>
These are not my only concerns, but they&#8217;re the big ones.  For the rest, I concur with <a href="http://www.zeldman.com/superfriends/guide/">the hiccups guide</a>, though of course to varying degrees.  I&#8217;m still trying to decide how much I care (or don&#8217;t) about the subtle differences between <code>article</code> and <code>section</code>, for example, or the way <code>aside</code> fits (or doesn&#8217;t) with its cousin elements.  And <code>dialog</code> just bugs me, but I&#8217;m not sure I have a better proposal, so I&#8217;ll leave it be for the time being.
</p>
<p>
At the other end of the two days, I felt a good deal more calm and hopeful than I did going in.  As <a href="http://www.zeldman.com/2009/08/31/loving-html5/">Jeffrey said</a>, &#8220;the more I study the direction HTML5 is taking, the better I like it&#8221;.  While there are still rough edges to be smoothed, there is time to smooth them.  We&#8217;ve already seen responsiveness on some of the points we addressed in the hiccups guide, and discussions around others.  The specification itself is daunting, especially to those who might remember the compact simplicity of the HTML2 spec.  Fortunately, it has good internal cross-linking so that you can, with effort, track down exactly what&#8217;s meant by &#8220;<a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/infrastructure.html#valid-date-string-with-optional-time">valid date string with optional time</a>&#8221; or &#8220;<a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#flow-content">sectioning content</a>&#8221; or &#8220;<a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#formatblock-candidate"><code>formatBlock</code> candidate</a>&#8220;.
</p>
<p>
With HTML5, the web is not ending, nor is it starting over.  It&#8217;s evolving, slowly and in full view of the public, with an opportunity for anyone to have their say (which is not, of course, the same as having one&#8217;s proposals accepted).  It&#8217;s the next step, and I feel quite a bit more confident that it&#8217;s a step onto solid ground.
</p>
]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2009/09/02/nine-into-five/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>CSS3 Feedback: Graphical Thoughts</title>
		<link>http://meyerweb.com/eric/thoughts/2009/02/24/css3-feedback-graphical-thoughts/</link>
		<comments>http://meyerweb.com/eric/thoughts/2009/02/24/css3-feedback-graphical-thoughts/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 14:35:20 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://meyerweb.com/?p=1073</guid>
		<description><![CDATA[My few thoughts on the "<a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#graphical">Graphical Effects</a>" part of the feedback document.]]></description>
				<content:encoded><![CDATA[<p class="aside">(This is part of the <a href="http://meyerweb.com/eric/thoughts/2009/02/11/feedback-on-wasp-community-css3-feedback-2008/">Feedback on &#8216;WaSP Community CSS3 Feedback 2008&#8242;</a> series.)</p>

<p>
My few thoughts on the &#8220;<a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#graphical">Graphical Effects</a>&#8221; part of the feedback document.  A lot of what was mentioned by the community is already in the pipeline, so there&#8217;s not a lot to say about those except &#8220;hurry &#8216;em up, willya?&#8221;.
</p>

<p>
<strong>Gradients</strong> &#8212; like rounded corners, no surprise these came up.  (All we need is to define <code>wet-floor-reflect</code> and we&#8217;ll complete the Web 2.0 design tricks hat trick.)  I&#8217;d like to see them myself, and I don&#8217;t think defining them is quite as hard as the commentary implies:
</p>
<p>
<blockquote><p>Imagine, for example, applying a gradient to the text of a &lt;span&gt; broken across two lines. Do you apply the gradient to each part individually? Glue them together as if they were all on one line first? Draw a rectangle around both parts and apply the gradient to that? (<a href="http://www.w3.org/TR/css3-background/#the-background-break">CSS3 Backgrounds and Borders</a> has a control for this.)</p></blockquote>

</p><p>
I&#8217;d say the answer is right there, in the form of <a href="http://www.w3.org/TR/css3-background/#the-background-break"><code>background-break</code></a>, but let&#8217;s assume for a moment that said property never existed and we still had to deal with this problem.  I can think of two solutions:
</p>

<ol>
<li>Only allow gradients to be applied to non-inline boxes.  This would not be my preference, but it could be so defined.  There&#8217;s already precedence with CSS for that sort of limitation:  <code>width</code>, <code>height</code>, <code>text-align</code>, and other properties are restricted to non-inline boxes.</li>
<li>Treat gradients the way backgrounds and borders are already treated on inline boxes.  I&#8217;d be much more in favor of this.  In other words, lay out the inline box as though it is all on one line and then break it in pieces as needed to fit into the actual text flow.  (This is the behavior of <code>continuous</code>, the default value of <code>background-break</code>.)</li>
</ol>

<p>
But since <code>background-break</code> exists, you just treat gradients as you would any other background in accordance with <code>background-break</code>&#8216;s definitions.
</p>
<p>
The somewhat trickier problem is how to define the value syntax for <code>background-gradient</code> so that&#8217;s both powerful and extensible without being unusable.  I think that&#8217;s solvable, but not easily, and probably not in a way that will satisfy everyone.
</p>
<p>
(Though this would be a fabulous place for the cardinal-point values from pre-CSS1 days, which you can still find in the specification if you look hard enough, to make a roaring comeback, wouldn&#8217;t it?)
</p>
<p>
<strong>Unidirectional background repeats</strong> &#8212; I say yes.  Here, have some values: <code>repeat-up</code>, <code>repeat-right</code>, <code>repeat-down</code>, and <code>repeat-left</code>.  In each case, the image would be repeated in the indicated direction from the origin image (the one placed by <code>background-position</code>).  Ironically, really old versions of IE did half of this by not correctly supporting <code>repeat-x</code> and <code>repeat-y</code>, treating them instead as if they were <code>repeat-right</code> and <code>repeat-down</code>.
</p>
<p>
There are occasions where this would be very useful, especially if you can combine the values into something like <code>repeat-down repeat-right</code>, and <em>most</em> especially in conjunction with multiple backgrounds.  So you could put an image stripe across the top of the element background, another one down the left side, and then fill in the rest of the background with a <code>repeat-down repeat-right</code> image.  Not a particularly common case, but the only way to handle it at present is with multiple nested elements, each with its own background and possibly a lot of negative margin trickery, and nobody wants that.  (Which may also be why it isn&#8217;t a particularly common case.)
</p>
<p>
You could also put an image in the center of your page and then a single stripe that goes only downward from behind it.  Like a golf ball on a tee, say; or a tree trunk below the leafy crowm; or a stem from a flower.
</p>
<p>
<strong>Slanted corners</strong> &#8212; sure, why not?  The issues are all the same as with rounded corners; the only difference is that you have a flat corner instead of a rounded one.  It makes joins between different borders styles/colors more obvious, but that&#8217;s a good thing: any solution that works well for the slant corner should work as well for the rounded corner.  Besides, if we&#8217;re already going to the effort of rounding corners, this seems like a pretty easy add-on.
</p>
<p>
<strong>Multiple borders</strong> &#8212; I think this would be quite useful.  I occasionally fake this with a border and an outline (as in my <a href="http://meyerweb.com/eric/tools/css/diagnostics/">diagnostic styles</a>) but that only works for two; if you want three or more nested borders (or two or more in IE/Win) you have to start nesting elements.  Also, having multiple borders lets you define your own gradient borders like you were a pixel artist, and who doesn&#8217;t like pixel artists?
</p>
<p>
At the same time, though, I do feel that this should be fairly low on the implementation totem pole.  And, as pointed out in the document, if image borders get implemented then a lot of the need for multiple borders goes away.
</p>
<p>
<strong>Alpha channel image masks</strong> &#8212; the problem I have here is what happens if you, say, try to use an image to alpha-mask a non-replaced element?  How does it scale?  Or does it?  Will there be a <code>mask-stretch</code> property?  Who really wants to stretch an image over a great big <code>div</code> anyway?  (From a visual-results point of view, I mean.)
</p>
<p>
Allowing masks might help in figuring out how to do non-rectangular float areas, in that you could use the alpha image to define the area used for float exclusion.  Combine that with a stretch ability and SVG support, so you can draw scalable vector masks, and I think you&#8217;re really getting somewhere.  (As does <a href="http://mattwilcox.net/">Matt Wilcox</a>; he and I have been chewing this over in <a href="http://meyerweb.com/eric/thoughts/2009/02/19/css3-feedback-animated-shapes/#postcomment">the comments</a> on <a href="http://meyerweb.com/eric/thoughts/2009/02/19/css3-feedback-animated-shapes/">the previous post in the series</a>.)
</p>]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2009/02/24/css3-feedback-graphical-thoughts/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>CSS3 Feedback: Animated Shapes</title>
		<link>http://meyerweb.com/eric/thoughts/2009/02/19/css3-feedback-animated-shapes/</link>
		<comments>http://meyerweb.com/eric/thoughts/2009/02/19/css3-feedback-animated-shapes/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 17:00:24 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://meyerweb.com/?p=1055</guid>
		<description><![CDATA[The portion of the feedback <a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#shapes">devoted to shapes</a> had two overarching themes, as I saw it.]]></description>
				<content:encoded><![CDATA[<p class="aside">(This is part of the <a href="http://meyerweb.com/eric/thoughts/2009/02/11/feedback-on-wasp-community-css3-feedback-2008/">Feedback on &#8216;WaSP Community CSS3 Feedback 2008&#8242;</a> series.)</p>

<p>
The portion of the feedback <a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#shapes">devoted to shapes</a> had two overarching themes, as I saw it.  That makes this entry a bit short, but when I tried to combine it with my feedback on &#8220;<a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#graphical">Graphical Effects</a>&#8220;, it quickly got too long.  So, a little <i>amuse cerveau</i>, as it were.
</p>

<p>
<strong>Animations, transformations, and so on</strong> &#8212; the WebKit team have of course been having a field day in this area, and what they&#8217;ve done will likely make is way to other browsers.  Or not.  I don&#8217;t know.  I&#8217;m not entirely thrilled about the effort that&#8217;s gone into those properties when there are so many other, more basic things that need love and care, but there&#8217;s no denying the essential coolness of slowly rotating an entire page.  Which I totally need to do the next time I give a presentation.
</p>
<p>
I&#8217;m not going to get into the &#8220;these things are behavior and therefore JavaScript!&#8221; argument.  CSS already does behavior (think <code>:hover</code>) and it&#8217;s going to do more over time.  I don&#8217;t see how that historical pressure can be resisted for much longer, short of outright refusing to take on any more behaviors and thus making itself a prime candidate for replacement with something else.  We may as well do our best to make sure CSS does good behaviors well, in ways that makes the most sense to the most authors.
</p>
<p>
So that&#8217;s basically my feedback: since we&#8217;re going to do it, let&#8217;s do it right.  Apple&#8217;s made a start, and unless the syntax they&#8217;ve defined in <a href="http://dev.w3.org/csswg/css3-animations/">their CSS Animations draft</a> is completely unworkable in other browsers for technical reasons, then let&#8217;s just roll with it.  And please note I said the <em>syntax</em>, not the overall concept.  (Ditto for <a href="http://webkit.org/specs/CSSVisualEffects/CSSTransforms.html">their CSS Transforms draft</a>.)
</p>

<p>
<strong>Stuff that isn&#8217;t rectangular</strong> &#8212; including both polygonal element boxes and polygonal floats.  I&#8217;ve wanted these for at least a decade, so it&#8217;s little surprise that I&#8217;m in favor.  <a href="http://meyerweb.com/eric/css/edge/raggedfloat/demo.html">Ragged floats</a> were invented as a hack to make the latter happen, of course, and the basic idea&#8217;s been <a href="http://www.evolt.org/article/Super_Ragged_Floats/22/50410/index.html">improved upon</a> <a href="http://www.alistapart.com/articles/sandbags">more than once</a>.
</p>
<p>
The tricky part, of course, is actually defining polygons.  Regular polygons, as in hexagons and octagons and dodecagons, are not terribly difficult; but creating an irregular polygon requires defining a set of point coordinates in relation to some origin and resolving what happens when the lines cross over each other and&#8230; well, yeah.
</p>
<p>
The build-on-what-exists approach would just adopt the syntax HTML <a href="http://www.w3.org/TR/REC-html40/struct/objects.html#edef-AREA"><code>area</code> </a>elements use in the <code>coords</code> elements.  There would be two interesting questions there, which are what happens with negative coordinate values, and what happens if you draw a polygon that cuts through some of the element&#8217;s content.  For example, you have a <code>div</code> containing an image, and you define the polygon to be smaller (in places) than the image.  Is the browser obligated to prevent content overlap in such cases?  I would tend to say no but I can see arguments for the opposite view, particularly when it comes to floats.
</p>
<p>
Then there&#8217;s the problem that you&#8217;d have to define a separate polygon for every element that needed a non-rectangular float, as Bert Bos notes in <a href="http://www.w3.org/blog/CSS/2007/07/03/rotations_and_non_rectangular_floats">his thoughts on the topic</a> from a couple of years ago.  His <code>contour</code> idea is certainly interesting, though I&#8217;d then start to wonder how you define a contour point on, say, an irregular faded gradient.
</p>
<p>
Anyway, I thought about adapting <code>clip</code> to the purpose of defining float polygons, but then I remembered the long, tortuous hell that is the history of <code>clip</code> (and <code>offset-clip</code>) and decided that a new property is the way to go.  Clean break, start fresh, et cetera.  I don&#8217;t know what it would be called.  <code>content-shape</code>, maybe, to go with <code>element-shape</code>.  Or not.
</p>
]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2009/02/19/css3-feedback-animated-shapes/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>CSS3 Feedback: Layout</title>
		<link>http://meyerweb.com/eric/thoughts/2009/02/16/css3-feedback-layout/</link>
		<comments>http://meyerweb.com/eric/thoughts/2009/02/16/css3-feedback-layout/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 17:01:42 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://meyerweb.com/?p=1043</guid>
		<description><![CDATA[In this round, layout.  Not all of it, but the bits that struck me as either really useful or really, really way too long overdue.]]></description>
				<content:encoded><![CDATA[<p class="aside">(This is part of the <a href="http://meyerweb.com/eric/thoughts/2009/02/11/feedback-on-wasp-community-css3-feedback-2008/">Feedback on &#8216;WaSP Community CSS3 Feedback 2008&#8242;</a> series.)</p>
<p>
In this round, <a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#layout">layout</a>.  Not all of it, but the bits that struck me as either really useful or really, really way too long overdue.
</p>
<p>
<strong><a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#contain-floats">Float containment</a> &#8211;</strong> yes, we need a property that does just that.  As long as we&#8217;re tied to floats for layout&#8212;and I plan to rant about that soon&#8212;there should be a clear, unambiguous, intentionally defined property that tells elements to wrap themselves around floated descendant elements.  <code>overflow</code> works in most cases but can fall down in unusual circumstances (I&#8217;ve seen scrollbars appear where none were actually needed) and anyway, it wasn&#8217;t intended to provide the wrapping effect in the first place.  That it does so is a happy side effect, but it&#8217;s still a side effect.  The rest of the float-wrapping techniques are even more convoluted.  &#8220;There are already ways to do that so we don&#8217;t need a property&#8221; is rather like saying &#8220;we can already do layout with tables so why do we need CSS layout?&#8221;.
</p>
<p>
<strong><a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#center-positioning">Positioning by center</a> &#8211;</strong> yes, please.  The way to center an absolutely positioned element within its containing block is to set the <code>top</code> and <code>left</code> to <code>50%</code> each and then define negative top and left margins that are half the positioned element&#8217;s height and width.  That&#8217;s just awful, and requires at least an explicit width, if not an explicit height.  When I did the structured timeline, here&#8217;s how I got the version numbers to center below the dots:
</p>

<pre>#timeline tbody td p {
	position: absolute;
	top: 50%;
	width: 2.1em;
	margin: -5px 0 0 -1em;
}
</pre>

<p>
See that <code>-1em</code> left margin, and the <code>2.1em</code> width?  Just to get the center of positioned elements&#8217; boxes sit on top of a certain left offset (defined elsewhere in the CSS).  Ditto the negative top margin, to pull it upward just enough so that the elements&#8217; boxes would have the point five pixels down from their tops line up with the vertical midpoint of their containing blocks.
</p>
<p>
I wanted to do something like this:
</p>

<pre>#timeline tbody td p {
	position: absolute;
	top: 50%;
	position-anchor: 50% 5px;
}
</pre>

<p>
That would have said that the point in the center of the absolutely positioned element should be placed at the point in the containing block 21.7% down from the top and 44% of the way across from the left.  That would hang the positioned element&#8217;s center on that point, <em>regardless of the size of the positioned element</em>&#8212;note that I took out the <code>width</code>.  I could stop defining explicit sizes and just let the elements be the size they want to be to show their content.
</p>
<p>
The problem is that approach doesn&#8217;t fit at all well with the way positioning layout is defined.  Suppose I said this:
</p>

<pre>#timeline tbody td p {
	position: absolute;
	top: 50%; bottom: 0;
	left: 50%; right: 25%;
	position-anchor: 50% 5px;
}
</pre>

<p>
Now what?  I&#8217;m not even sure myself.  Maybe define rename it to <code>position-offset</code> and define percentages to be relative to the height and width of the positioned element (not its containing block), so that it doesn&#8217;t interact directly with the offset properties like <code>top</code> and <code>right</code>?
</p>
<p>
All I want is a way to hang elements off of offset points, and not be restricted to the corners of the elements, and have the solution work even when the elements have automatic height and width, and not require extra markup to make it happen.  Oh, and a ponycar.
</p>
<p>
<strong><a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#box-sizing">Box sizing</a> &#8211;</strong> what in the nine hells of Valeria is taking so long?  We needed that one ten years ago.  I no longer care if it&#8217;s done as its own property or as new keywords on <code>height</code> and <code>width</code>.  I just want it.  Someone will make it happen, with or without the WG or implementors&#8212;<a href="http://meyerweb.com/eric/thoughts/2008/10/22/javascript-will-save-us-all/">mark my words</a>.
</p>
<p>
<strong><a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#siblings-equal-height">Same-height elements</a> &#8211;</strong> yes, a way to tie element heights (whether they&#8217;re siblings or not) together would be welcome, although I can see how specifying it in an implementable would be tricky; no, <code>display: table-cell</code>  is <em>not</em> the answer.  Soon I will rant about this.  Soon.
</p>
]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2009/02/16/css3-feedback-layout/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>CSS3 Feedback: Selector Blocks</title>
		<link>http://meyerweb.com/eric/thoughts/2009/02/12/selector-blocks/</link>
		<comments>http://meyerweb.com/eric/thoughts/2009/02/12/selector-blocks/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 15:37:05 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://meyerweb.com/?p=1034</guid>
		<description><![CDATA[Out of all the <a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#selectors">selector feedback</a>, <a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#nested-selectors">selector blocks</a> was the part that really caught my attention.]]></description>
				<content:encoded><![CDATA[<p class="aside">(This is part of the <a href="http://meyerweb.com/eric/thoughts/2009/02/11/feedback-on-wasp-community-css3-feedback-2008/">Feedback on &#8216;WaSP Community CSS3 Feedback 2008&#8242;</a> series.)</p>
<p>
Out of all the <a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#selectors">selector feedback</a>, <a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#nested-selectors">selector blocks</a> was the part that really caught my attention.  I also see the usefulness of a <a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#parent-selector">parent selector</a>, but that one has come up many times before, and it&#8217;s always died at the doorstep of implementors, who point out that it&#8217;s far too difficult to implement without serious performance penalties and even risk of browser lockup.  See, for example, <a href="http://shauninman.com/archive/2008/05/05/css_qualified_selectors#comment_3942">the comment left by David Hyatt</a> on <a href="http://shauninman.com/archive/2008/05/05/css_qualified_selectors">Shaun Inman&#8217;s post</a> on the idea.  Similarly, I think <a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#contants">constants</a> (or macros or whatever they&#8217;re called) are a great idea and would be very helpful, especially if you&#8217;re coding up a <a href="http://jasonsantamaria.com/" rel="friend colleague met">Jason</a> Special.  Both are loaded with use cases, so I don&#8217;t feel like I can add a lot; besides, constants are already in the WG charter, so there&#8217;s once more hope in the land.
</p>
<p>
So anyway, selector blocks.  To pick one recent example, while working on a project that should very soon see the light of day, I had a situation involving the following chunk of rules.
</p>

<pre>h1, h2, h3, h4, h5, h6, table {
   font: 1em Arial, "Helvetica Neue", Helvetica, sans-serif;}
h1 {font-size: 275%;}
h3:first-child {margin-top: 1em;}
p.tagline {margin: -0.25em 0 1.25em;
   font-size: 125%;
   color: #7B7960;}
h3 {margin: 1.5em 0 0.25em; font-size: 125%;}
h3:before {font-size: 75%; counter-increment: subhead;}
h4 {margin: 2.5em 0 0.75em;
   text-transform: uppercase; font-size: 125%;
   color: #928F59;}
p {margin: 0 0 1em;}
ul {padding-left: 1.5em;}
ul li {list-style: disc; margin: 0.5em 0;}
</pre>

<p>
Nothing unusual about them, of course, unless you count my use of counters.  These rules had been written early on in development, and the design had evolved around that part of the document.  As more page components were added, I realized that I needed to scope all these rules to one section of the document: specifically, a <code>div</code> with a <code>class</code> of <code>main</code>.  So here&#8217;s what I had to do.
</p>

<pre>.main h1, .main h2, .main h3, .main h4, 
.main h5, .main h6, .main table {
   font: 1em Arial, "Helvetica Neue", Helvetica, sans-serif;}
.main h1 {font-size: 275%;}
.main h3:first-child {margin-top: 1em;}
.main p.tagline {margin: -0.25em 0 1.25em;
   font-size: 125%;
   color: #7B7960;}
.main h3 {margin: 1.5em 0 0.25em; font-size: 125%;}
.main h3:before {font-size: 75%; counter-increment: subhead;}
.main h4 {margin: 2.5em 0 0.75em;
   text-transform: uppercase; font-size: 125%;
   color: #928F59;}
.main p {margin: 0 0 1em;}
.main ul {padding-left: 1.5em;}
.main ul li {list-style: disc; margin: 0.5em 0;}
</pre>

<p>
This, on the other hand, is what I really <em>wanted</em> to do:
</p>

<pre>.main {
   h1, h2, h3, h4, h5, h6, table {
      font: 1em Arial, "Helvetica Neue", Helvetica, sans-serif;}
   h1 {font-size: 275%;}
   h3:first-child {margin-top: 1em;}
   p.tagline {margin: -0.25em 0 1.25em;
      font-size: 125%;
      color: #7B7960;}
   h3 {margin: 1.5em 0 0.25em; font-size: 125%;}
   h3:before {font-size: 75%; counter-increment: subhead;}
   h4 {margin: 2.5em 0 0.75em;
      text-transform: uppercase; font-size: 125%;
      color: #928F59;}
   p {margin: 1em 0;}
   ul {padding-left: 1.5em;}
   ul li {list-style: disc; margin: 0.5em 0;}
}
</pre>

<p>
Or, if necessary, to put the whole original chunk into its own style sheet and then do one of the following:
</p>

<pre>div.main {@import url(main-style.css);}

&lt;div class="main" style="@import url(main-style.css);"&gt;
</pre>

<p>
Interestingly, the latter is theoretically possible, thanks to the more advanced profiles in the CSS module &#8220;<a href="http://www.w3.org/TR/css-style-attr">Syntax of CSS rules in HTML&#8217;s &#8216;style&#8217; attribute</a>&#8220;.  I&#8217;m not aware of the former having been seriously considered (despite my best efforts, once upon a time), though it&#8217;s always possible I missed something.
</p>
<p>
But either one of those approaches would be a last resort, in my opinion.  I&#8217;d much rather just wrap the whole chunk in <code>.main { }</code>, like I showed previously, and be done with it.  That capability would also simplify certain annoyingly repetitive patterns, like the very first of those rules.  I think it&#8217;s pretty obvious which of the following is easier to write and maintain:
</p>

<pre>
body.home #content .entry h2, 
body.home #content .entry h3, 
body.home #content .entry h4, 
body.home #content .entry h5, 
body.home #content .entry h6 {...}

body.home #content .entry {
   h2, h3, h4, h5, h6 {...}
}
</pre>

<p>
I mean, just look at the former, and imagine what one goes through to write it in the first place.  Copy, paste, paste, paste, paste, paste&#8230; maddening.  And that&#8217;s just for a small block of CSS like this one.  Imagine the tedium of doing this for a block of 50 rules, or 150.  (Also, this is the the same thing that was requested in the feedback as &#8220;<a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008#grouped-alternates">Grouped Alternates</a>&#8220;, albeit with a different syntax.)
</p>
<p>
One objection to this sort of pattern is that it increases dependence on descendant selectors, which are computationally inefficient.  But it doesn&#8217;t: I had to create a whole bunch of descendant selectors as it was, and did so far more clumsily.  And had I missed a command-V somewhere, I&#8217;d have had styles that applied outside their intended subtree.  Introducing a way to nest blocks like this doesn&#8217;t change anything except make it easier and more maintainable to do what we already do.  Honestly, it&#8217;s pretty much impossible to increase dependence on descendant selectors.  The best we can do now is make them less difficult to write.
</p>
<p>
I realize that the syntax I depict would cause backwards-compatibility problems, as in older browsers would not behave as intended when exposed to this sort of thing, but I&#8217;ve also stopped being concerned about that.  We can&#8217;t keep holding ourselves hostage to decisions made a decade or more back.  Provide the capability and authors will use it when they can.  Over time, its use will become more prevalent&#8212;kind of the same way authors adopted CSS in the first place.
</p>
<p>
I also realize that this case has been made time and again by many, many other people.  This isn&#8217;t even the first time I&#8217;ve made this case, though I think the other times were within the WG and therefore off the public record.  The fact that it keeps being made is a strong indicator that the need exists, and dismissing the idea because the same end effect can be achieved with existing selector syntax (as shown above) isn&#8217;t acceptable.  That&#8217;s like saying that complex selection effects can be achieved with JavaScript or XPath, so there&#8217;s no need for advanced CSS selectors.
</p>
<p>
So that&#8217;s my use case.  I actually have a bunch more, but they all follow the same basic pattern: the desire to group rules together into subsections of a document, or to otherwise simplify the writing of CSS.
</p>]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2009/02/12/selector-blocks/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>Feedback on &#8216;WaSP Community CSS3 Feedback 2008&#8242;</title>
		<link>http://meyerweb.com/eric/thoughts/2009/02/11/feedback-on-wasp-community-css3-feedback-2008/</link>
		<comments>http://meyerweb.com/eric/thoughts/2009/02/11/feedback-on-wasp-community-css3-feedback-2008/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 17:50:58 +0000</pubDate>
		<dc:creator>Eric Meyer</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://meyerweb.com/?p=1024</guid>
		<description><![CDATA[Back before holiday season hit, Elika Etemad---better known as <a href="http://fantasai.inkedblade.net/">Fantasai</a>---published <a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008">WaSP Community CSS3 Feedback 2008</a>.  I gave it a read and came away with a number of things I wanted to say.]]></description>
				<content:encoded><![CDATA[<p>
Back before holiday season hit, Elika Etemad&#8212;better known as <a href="http://fantasai.inkedblade.net/">Fantasai</a>&#8212;published <a href="http://fantasai.inkedblade.net/style/discuss/wasp-feedback-2008">WaSP Community CSS3 Feedback 2008</a>.  I gave it a read and came away with a number of things I wanted to say.  So many things, in fact, that I&#8217;ll need to split them up into a series of posts.  This here post will serve as introduction and hub, with links to the follow-on entries added as they&#8217;re published.  All very <a href="http://tbray.org/ongoing/" rel="acquaintance met">Bray</a>-ny, no?  (Go ahead, groan.  It only encourages me.)
</p>
<p>
Here you go:
</p>
<ol>
<li><a href="http://meyerweb.com/eric/thoughts/2009/02/12/selector-blocks/">Selector blocks</a></li>
<li><a href="http://meyerweb.com/eric/thoughts/2009/02/16/css3-feedback-layout/">Layout</a></li>
<li><a href="http://meyerweb.com/eric/thoughts/2009/02/17/wanted-layout-system/">Wanted: Layout System</a></li>
<li><a href="http://meyerweb.com/eric/thoughts/2009/02/19/css3-feedback-animated-shapes/">Animated Shapes</a></li>
<li><a href="http://meyerweb.com/eric/thoughts/2009/02/24/css3-feedback-graphical-thoughts/">Graphical Thoughts</a></li>
</ol>
<p>
I want to make clear up front that I&#8217;m not going to address every single point in the feedback document: it&#8217;s just too incredibly huge.  I did think about making my own copy and then just filling in my reactions to each point, but that didn&#8217;t scale very well.  Not only did it seem really overbearing and maybe just a touch egotistical, but some of my reactions were based on related topics in separate areas of the original.  Besides, I know what it&#8217;s like trying to read a really, really long article, so breaking it up and just focusing on the parts that got me fired up made way more sense.
</p>
<p>
There is one thing I want to address before I start serving up the follow-on installments.  At the end of Fantasai&#8217;s post, there&#8217;s a link to <a href="http://meyerweb.com/eric/thoughts/2006/09/15/w3c-change-outreach/">my 2006 post</a> about the benefit of having a community liaison, someone who bridges the gap between the WG and the public.  She then asks if anyone is interested in volunteering, but personally, I don&#8217;t see the need.  The WG already has a community liaison:  it&#8217;s you, Fantasai.  It has been for some time now, thanks to your regular and informative <a href="http://www.w3.org/blog/CSS">CSS WG blog</a> posts and other outreach work such as &#8220;WaSP Community CSS3 Feedback 2008&#8243;.  The job is being done, and being done very well, I don&#8217;t think there&#8217;s any doubt that the Working Group is much, much better for it.
</p>
]]></content:encoded>
			<wfw:commentRss>http://meyerweb.com/eric/thoughts/2009/02/11/feedback-on-wasp-community-css3-feedback-2008/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->