[whatwg] Re: <section> and headings

James Graham jg307 at cam.ac.uk
Thu Sep 2 02:42:50 PDT 2004

On 2 Sep 2004, at 03:32, Lachlan Hunt wrote:

> James Graham wrote:
>> On 31 Aug 2004, at 16:14, Lachlan Hunt wrote:
>>> In order to preserve the semantics of hn elements, I would produce 
>>> this outline:
>>> 1. Level 1 Heading
>>>    2. Level 2 Heading
>>>    2. Level 2/3? Heading
>>> Although it may not necessarily be structurally correct for that 
>>> document structure, the semantics of hn elements are preserved.
>> Ack. So presumably:
>> <section>
>>     <h>Level 1 Heading</h>
>>     <section>
>>         <h>Level 2 Heading</h>
>>         <section>
>>             <h4>Level 2/4? Heading</h4>
>>         </section>
>>     </section>
>> </section>
>> Would have a level 4 heading with no level 3 heading? Yuck. Sure 
>> that's bad markup but authors use it surprisingly often.
> So, what outline would this produce?
> <body>
>     <h1>Heading 1</h1>
>     <h2>Heading 2</h2>
>     <h4>Heading 4</h4>
> </body>
> IMO, the two are semantically equivalent, and should produce identical 
> outlines.

None of those headings are children of <section> elements so the most 
backward compatible approach would be to treat them as HTML4 headings.

>   They should both produce this outline that the validator produces:
> *  Heading 1
>       o Heading 2
>             + A level 3 heading is missing!
>                   # Heading 4

The "A level $level heading is missing" approach is terrible UI (for a 
client application rather than for the validator) because the user 
doesn't care that the markup is imperfect and has no way to fix the 
problem anyway. So even with pure HTML4 I would expect any client app 
to produce an outline like:

Heading 1
|--Heading 2
    |--Heading 4

As I've mentioned, I don't really think the HTML 4 heading model is 
robust enough to create structure. Hence my desire to tweak it.

>>> <body>
>>>     <h>Heading 1</h>
>>>     <section>
>>>         <h>Heading 2a</h>
>>>         <h2>Heading 2b</h2>
>>>         <section>
>>>             <h2>Heading 2c</h2>
>>>         </section>
>>>     </section>
>>>     <h2>Heading 2d</h2>
>>> </body>
>>> ...
>>> Heading 1
>>>     Heading 2a
>>>     Heading 2b
>>>     Heading 2c
>>>     Heading 2d
>> I disagree that this should be the interpretation of the markup 
>> above. Heading 2c should be a level lower than 2b

Sorry, I forgot to mention that Heading 2d should be at the same level 
as Heading 1 (since it's in the same section).

> Ok, let's look at that a bit closer.  If I understand you correctly, 
> then each section should start with an h1, and subsequent headings 
> should be regarded as various levels of sub heading.  Thus, there are 
> several missing headings:
> * Heading 1
>     o Heading 2a
>     o A Level 2, Heading 1 is Missing! **
>     -o Heading 2b
>         + A Level 3, Heading 1 is Missing!
>         -+ Heading 2c
> * A Level 1, Heading 1 is Missing! **
> -* Heading 2d

Assuming that we're not regarding headings in the same section as 
subtitles for the section rather than titles, the structure from the 
above, in my model, would be:

Heading 1
|--Heading 2a
|--Heading 2b
    |--Heading 2c
Heading 2d

My model ignores whether one uses <h1>, <h2>... or even a hypothetical 
<h> for the purposes of structure (justification: authors already do 
the same so we're unlikely to break any UAs that work with real 
websites). The choice of <h1>....<h6> should reflect the 'importance' 
of the heading. In a highly structured document, this might reflect the 
structure. In a newspaper, this might reflect the editorial importance 
attached to each story. In a document with a sidebar, the sidebar 
headings might be given lower importance than the headings in the main 

> ** Note: Missing Headings marked with ** could possibly be assumed to 
> be the headings just maked up with <h>, but I don't really like mixing 
> numbered headings with unnumbered headings, since an <h> could only 
> ever fill in for an <h1> in that case.
>> (I also think that only the first heading in a section should be 
>> regarded as a section title, the rest as subtitles. But I'm more 
>> ready to be persuaded that that's a bad idea)
> No, that is a bad idea.  Same-level structured headings should not be 
> regarded as sub headings for the purpose of an outline.  (Numbered 
> headings should work as I have already described.)
> eg.
> <section>
>     <h>Heading A</h>
>     <p>content...</p>
>     <h>Heading B</h> <!-- This is not a sub heading -->
>     <p>content...</p>
> </section>
> unless you want to force authors to have to do the following which, 
> from my experience of using divs for the same purpose, can result in 
> an unmanageable structure when there are lots of headings.
> <section>
>     <h>Heading A</h>
>     <p>content...</p>
> </section>
> <section>
>     <h>Heading B</h>
>     <p>content...</p>
> </section>

Yeah, that worried me too. I was also concerned about the speed impact 
of the additional CSS rules that would be required in the UA 
stylesheet. However authors already use heading elements as subtitles. 
So having a standardised mechanism to do this would be nice.

More information about the whatwg mailing list