W3C home > Mailing lists > Public > public-html@w3.org > September 2009

Re: what is dt?

From: Tab Atkins Jr. <jackalmage@gmail.com>
Date: Fri, 18 Sep 2009 13:51:10 -0500
Message-ID: <dd0fbad0909181151w1f101258x901d2766b1ae01f7@mail.gmail.com>
To: Leif Halvard Silli <xn--mlform-iua@xn--mlform-iua.no>
Cc: Lachlan Hunt <lachlan.hunt@lachy.id.au>, public-html@w3.org, Shelley Powers <shelleyp@burningbird.net>
On Fri, Sep 18, 2009 at 1:15 PM, Leif Halvard Silli
<xn--mlform-iua@xn--mlform-iua.no> wrote:
> Tab Atkins Jr. On 09-09-18 16.58:
>> A third solution (that was actually suggested by you, Lachlan,
>> yesterday in IRC) is to use an attribute to disambiguate the caption
>> from the content.  So you'd have markup like:
>>
>> <figure>
>>  <p caption>Exhibit A</p>
>>  <h1>Madonna and child</h1>
>>  <img src="foo" alt="bar">
>> </figure>
>
> As Lachlan said, one disadvantage to this would be that it would be
> impossible to place the caption /last/. Unless you also add a special rule
> for last child ...

Huh?  I'm not sure how this applies.  Lachlan's objection was to using
the first <h1> child as the caption, as the content might want to have
an <h1> child as well.  That's not a problem here - there's absolutely
no reason to have a [caption] at the top-level of the content (it
would have to be in a nested <figure>, and there's no ambiguity
there).

In other words, the following is perfectly fine, and doesn't require
the author to change their markup specially to avoid bad effects:

<figure>
  <h1>Madonna and child</h1>
  <img src="foo" alt="bar">
  <p caption>Exhibit A</p>
</figure>

The <p> could even go in the middle I guess, though that would be very
odd and I wouldn't recommend it.

Also, just in case it wasn't clear, the intention is that @caption can
be put on *any* child of <figure>.  It's not just for <p>.  You can
put it on <ul>, <div>, or whatever.  The intended rendering (stolen
from another suggestion from Lachy) can be expressed as:

figure { display: table; }
figure>[caption] { display: table-caption; caption-side: bottom;
margin: 0; text-align: center; }
figure>[caption]:first-child { caption-side: top; }

> Also, if you can accept <figure caption >, then why not <dl figure >
> instead?

I don't understand the connection.  <figure> doesn't get @caption.
Some child of it does.  The intent is basically identical to that of
<time pubdate> - rather than minting a new element just to indicate
that something has a particular semantic relation to its
parent/ancestor, you just pop an attribute on it.

This approach isn't infinitely scaleable, of course - it's been stated
before that basing actual behavior/parsing/etc on attributes is a big
antipattern that is to be avoided at nearly all costs.  But as long as
the relation conveys nothing more than a bit of semantics, it should
be okay, just like <time pubdate> does.  (This would mean that
<details> should probably keep using actual elements, so <dt>/<dd>
seems fine there.)

<dl figure> is something different entirely - it's changing the
semantics of the element entirely, rather than adding additional
semantics like <* caption>.  It also just feels weird; to me, it's
probably *weirder* than <figure><dt/><dd/></figure>.

~TJ
Received on Friday, 18 September 2009 18:52:10 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 9 May 2012 00:16:48 GMT