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

Philip Jägenstedt philipj at opera.com
Tue Dec 1 07:36:08 PST 2009


On Tue, 01 Dec 2009 14:28:32 +0100, Lachlan Hunt  
<lachlan.hunt at lachy.id.au> wrote:

> 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.

You only need to provide styles for the elements you're using which  
wouldn't work with a simple generic style such as.

figure>[caption] { margin-left: 1em; font-weight: bold; }

Please, no examples where this doesn't work. It's obvious, but also very  
easy to fix.


> 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.

Imaginary template language:

<figure>
<@content@>
<div caption><@caption@></div>
</figure>

Does everything you could do with a new element. Almost everyone else will  
probably get by without wrapping divs though.

> 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.
>

If all of the ideas are rejected I agree that it would be better to drop  
figure, but I hope it won't come to that. A pointer to any parsing/styling  
issues of legend would be appreciated for reference.

-- 
Philip Jägenstedt
Core Developer
Opera Software


More information about the whatwg mailing list