[whatwg] <figure><img><* caption>

Lachlan Hunt lachlan.hunt at lachy.id.au
Tue Dec 1 05:28:32 PST 2009


Philip Jägenstedt wrote:
> As currently speced, the proper usage of <figure> is:
>
> <figure>
> <dd><img src="bunny.jpg" alt="A Bunny"></dd>
> <dt>The Cutest Animal</dt>
> </figure>
>
> Apart from all that has been said about legacy parsing, leaking style in
> IE, etc I would (perhaps not be the first to) add:
>
> 1. It seems quite easy to confuse or mistype dd/dt. Without guessing how
> often authors will get it wrong, I think everyone agrees that (all else
> equal) a syntax which is harder to confuse/mistype is better.

Yes, I expect we'll see a lot of authors get them reversed, using the dd 
for the caption if they want the caption below the content.  This is 
likely to occur since existing authors have already learned that dt 
comes before dd when used within a dl, and because old habbits die hard, 
they're likely to repeat the pattern within figure.

> 2. Only the caption needs to be marked up, the content is implicitly
> everything else. While some content may need a wrapping element for
> styling, e.g. <img> usually does not.
>
> 3. Aesthetics. (My eyes are bleeding, but I can't speak for anyone else's.)

Some additional reasons why using dt/dd in figure is a bad solution:

The simplest workaround presented so far to solve the styling issue in 
IE is basically to do this:

<div class="figure">
   <figure>
     <dd><img src="image" alt="..."></dd>
     <dt>Caption</dt>
   </figure>
</div>

And then rather than style the figure itself, give some style to the div 
because some styles don't work properly when applied to the figure. 
This effectively makes the figure element itself entirely useless, 
especially given that all browsers lack support for it.

It would be far easier for authors to just stick with this entirely hack 
free alternative that doesn't use the new elements:

<div class="figure">
   <img src="image" alt="...">
   <p class="caption">Caption</p>
</div>

At least until browsers actually implement support for <figure> and 
IE6/7's market share becomes negligible.  It will take a couple of years 
for those events to occur, and there's no need to rush into using the 
new elements yet.

> The main difficulty with coming up with something better seems to have
> been finding a name for an element which isn't already taken. If that's
> the only issue, why not just take some inspiration from <time pubdate>
> and use an attribute instead?
>
> <figure>
> <img src="bunny.jpg" alt="A Bunny">
> <p caption>The Cutest Animal</p>
> </figure>

I was the first one to suggest that on IRC a while ago, but I'm not 
convinced it's a good idea.  Although it's certainly better than using 
dt/dd.

See IRC logs here.
http://krijnhoetmer.nl/irc-logs/whatwg/20090917#l-1525
http://krijnhoetmer.nl/irc-logs/whatwg/20090918#l-1133

The original idea for using the attribute was that it could apply to a 
wide range of elements, like p, div, etc.  But that makes it difficult 
for browsers to provide sensible default styling for captions, since it 
requires carefully overriding existing defaults for so many other elements.

To some extent, it even makes it difficult for authors to provide 
reasonable styles if they can't guarantee which elements content writers 
will choose for their caption.  Imagine designing a CMS template with 
some default styles for figure and caption, the CSS in the template 
would have to deal with so many possible element choices just for the 
caption, it'll be difficult to get it right and test everything.

Limiting the caption attribute to just the p element, or just div or 
something, might help, but I'd still expect authors to end up using it 
on other elements anyway.

There are only 2 sensible options for element choices: <legend> or 
introducing a new element.  Using dt/dd is *not* and was never a 
sensible choice for figure, and the idea must be dropped.

Since Hixie is adamant that introducing a new element for the caption 
isn't going to happen, and I've yet to find a way to convince him 
otherwise, that leaves us with legend.

Although legend has it's own styling issues in browsers, these will 
eventually be resolved in a couple of years.  Therefore, the best 
solution is to revert the spec back to using legend for figure, but 
strongly discourage authors from using these new elements yet, until the 
implementation issues are resolved.

-- 
Lachlan Hunt - Opera Software
http://lachy.id.au/
http://www.opera.com/


More information about the whatwg mailing list