- From: Lachlan Hunt <lachlan.hunt@lachy.id.au>
- Date: Wed, 16 Jul 2008 16:15:51 +0200
- To: Bert Bos <bert@w3.org>
- Cc: www-style <www-style@w3.org>
Bert Bos wrote: > On Saturday 12 July 2008 23:05, Lachlan Hunt wrote: >> Bjoern Hoehrmann wrote: >>> Could you explain why those other specifications are a concern at >>> all, and you can't just say the :context pseudo-class matches an >>> element if and only if some other specification identifies it as >>> the context ele- ment in a given selector evaluation context? >> Only because I didn't think of doing it in that way. > > Björn's definition makes sense, but it is much too abstract to be > useful. I can understand ':focus' and '::selection', because I have > indeed given elements the focus and selected text in a document. > But ':context' matches all elements (never parts of elements?) that are > somehow "special" as defined by the source document. HTML doesn't > define any such elements, nor does XML, so what does? HTML5, which now defines scoped stylesheets, does have such a special reference element, which is the parent sectioning element of the style element. > If there are concrete elements that are useful to select (first element > on the page, previous element with the focus, longest element without > children, element with the fewest vowels, whatever), than invent a name > that describes those element. Consider this example: <body> <section> <style scoped>...</style> </section> </body> In this example, the reference element (or "scope element") is the <section> element. There needs to be a way to match that element easily, without requiring the author to add an id to it. I would call that a concrete element that is useful to select. >> I have written >> a revised version based on your suggestions. It will now require >> both Selectors API and HTML5 to eventually define which element is >> the context element, which won't be difficult if this proposal is >> accepted. >> >> http://lists.w3.org/Archives/Public/www-archive/2008Jul/att-0023/Over >> view.html > > It seems you want something like the \G in Perl's regular expressions. > Why don't you define it in the Selectors API as a special notation > accepted by the querySelector() function? I wanted it to be a selector, instead of a special syntax, for several reasons: 1. Inventing a special syntax would effectively alter the grammar of selectors as used by the API. Doing that either means that either: a. Implementers would need to change their selector parsing, which I would then need to define. b. The string needs to be pre-processed in order to generate a conforming selector, which will effectively need to insert a selector into the sequence that only matched the correct element (or at least behave as if it did). I wanted to avoid such complexities, at least for version 1. 2. Using a pseudo-class allows it to be combined with other simple selectors in a sequence, which allows more powerful selection possibilities. e.g "ul:scope>li" selects all child LI elements if and only if the scope element is a UL element. 3. It allows for it to be used in other places where selectors are used, such as HTML5 and possibly XBL, instead of being restricted to just Selectors API. > (It seems to me you shouldn't need it at all. The problem seems to be > that x.querySelector(":root") doesn't return x. That looks strange to > me: you pass a tree and a pattern, and you get something outside the > tree!? But I'm not an expert on that spec...) The API doesn't change the way in which an element is evaluated against a selector; it's still evaluated in the context of the entire document. All it does is limit the collection of elements that are evaluated against it. -- Lachlan Hunt - Opera Software http://lachy.id.au/ http://www.opera.com/
Received on Wednesday, 16 July 2008 14:16:31 UTC