- From: fantasai <fantasai.lists@inkedblade.net>
- Date: Tue, 13 Jan 2009 17:50:03 -0800
- To: "Tab Atkins Jr." <jackalmage@gmail.com>
- CC: www-style list <www-style@w3.org>
Tab Atkins Jr. wrote: > This is lifted from the :has-child proposal thread, since at least one > person (Brad Kemper) liked the syntax, and at least one implementor > (Boris Zbarsky) thought it wouldn't be horrible for implementations (at > least, no more horrible than current child and sibling combinators). > Thought I'd give it a proper write-up, since I've had reason to want it > in the last week. > > /:matches pseudo-class/ > > The :matches(/selector fragment/) pseudo-class represents an element > that has another specified element /after /it in the document tree. The > selector fragment starts with either the child combinator (>) or the > adjacent-sibling combinator (+), optionally followed by whitespace, > followed by a simple selector (see Selectors Level 3 for the definition > of a simple selector). This matches if an element matched by the simple > selector occurs as a child (if > was used) or following adjacent sibling > (if + was used) of the target element. If the selector fragment is > invalid or empty, the entire selector is invalid. > Examples: > td:matches(> input:checked) /* Matches any td with a checked input as a direct child */ > h1:matches(+ ul) /* Matches any h1 which is directly followed by a <ul> */ Going with the original idea that a full :matches() implementation would match any element that matches its argument selector, you'd need to write elem:matches(* > child) or :matches(elem > child) e.g. td:matches(* > input:checked) :matches(h1 + ul) :matches would take a normal selector rather than a fragment that begins with a combinator (which seems very unbalanced to me, like passing a mathematical function an expression that began with the multiplication symbol). It would just be restricted to only allow the > and + combinators. An alternative syntax that was proposed many years ago is to add the ability to change the subject of the selector with some kind of punctuation, e.g. !td > input:checked { ... } !h1 + ul { .. } Again, you can make the same combinator restrictions for anything after the !. I personally find this easier to read. A syntax like :matches() is only necessary if you're matching against multiple branches of the tree. ~fantasai
Received on Wednesday, 14 January 2009 01:50:48 UTC