- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Mon, 23 Mar 2009 12:31:10 -0500
- To: Eduard Pascual <herenvardo@gmail.com>
- Cc: Giovanni Campagna <scampa.giovanni@gmail.com>, Brad Kemper <brad.kemper@gmail.com>, Dave Smith <smithd7@tcd.ie>, www-style@w3.org
On Mon, Mar 23, 2009 at 11:39 AM, Eduard Pascual <herenvardo@gmail.com> wrote: > I'd like to point out that this is a need, rather than a convenience. > I already gave some explanation of this on my original proposal, but > to summarize: try to come with a selector that matches any 3rd-level > heading on a HTML5 document (it is achievable). Once you get it (if > you get it right), take a look at what you have and think if something > like :heading(3) or any other direct notation wouldn't make the whole > language more usable. FWIW, Eduard is completely correct here. We *need* a :heading(n) pseudoclass if we're going to benefit at all from the HTML sectioning algorithm. A :section(n) pseudoclass is only slightly less necessary. This actually *cannot* be achieved in vanilla CSS, because linear content can implicitly contain nested sections, and the header which establishes a section can actually come after the start of the content. Frex, in this example, a linear progression of elements creates a nested series of sections: <h1>Foo</h1> <p>foo</p> <h2>Bar</h2> <p>bar</p> <h3>Qux</h3> <p>qux</p> The section tree produced is equivalent to the one produced by the following: <section> <h1>Foo</h1> <p>foo</p> <section> <h1>Bar</h1> <p>bar</p> <section> <h1>Qux</h1> <p>qux</p> </section> </section> </section> For another example, take this markup: <section> <p>foo</p> <h1>Foo</p> <p>foo</p> </section> The <h1> is the header for the entire section, even though content precedes it. Thus, even if you can craft a selector that reliably selects headers of a particular heading level, you can't use that selector to then style the contents of the section that header corresponds to. A simply "{header} ~ *" won't work, because you have to hit previous content as well. There are some problems with the :section() pseudoclass, though. Namely, it can't decide whether it wants to be a pseudoclass or a pseudoelement. To be precise, it's *logically unable* to decide that, because sometimes it has to be a pseudoclass (when an explicit <section> element exists), and sometimes it has to be a pseudoelement (when sectioning is implicit). I'm not sure whether this will be a significant issue in implementation or not. ~TJ
Received on Monday, 23 March 2009 17:31:50 UTC