- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Fri, 18 Sep 2009 13:51:10 -0500
- 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 UTC