- From: Peter Moulder <peter.moulder@monash.edu>
- Date: Wed, 20 Mar 2013 11:43:18 +1100
- To: www-style@w3.org
On Tue, Mar 19, 2013 at 02:34:39PM +0100, Simon Sapin wrote: > Le 19/03/2013 14:14, Peter Moulder a écrit : > >... > >There's an issue open as to whether the specificity of :matches should change > >from max specificity to something else, though that issue was raised before > >:not was changed to take a selector list, so there isn't yet a corresponding > >proposal as to how or whether the specificity of :not(a, b) might change if > >that proposal for :matches(a, b) were to be adopted. Possibilities include: - Keeping as max (which would then become the only selector to use max). - Same specificity as a pseudo-class. This might match some existing implementations (is this what Gecko does?). It might also be the simplest behaviour to implement on top of any other existing selection implementation that doesn't yet have :not; this might be relevant to polyfilling, for example. Shorter implementation time for :not might mean sooner availability of other CSS features. From an author perspective, this would be consistent with the specificity of other :xxx() selectors, but leave :matches() as inconsistent -- unless we chose to change :matches to have this specificity too. This latter option hasn't found much favour in the past (before considering the question of :not lists), and several people who have said that they like the proposed specificity-of-what-matches change to :matches specificity. - change to sum, so that :not(a, b) would in fact have the same specificity as :not(a):not(b). More generally, the two would have identical behaviour, except that :not(a):not(b) should be preferred by authors as more likely to get the same behaviour across different UAs. Another reason to recommend authors to prefer :not(a):not(b) is that various posts in this list constitute evidence that authors are less sure of the meaning and specificity of :not(a, b) than :not(a):not(b), including the posing of the question in this message and in the message that started this (parent) thread. This brings us to: - Drop the list argument feature of :not. This would reduce differences between selectors3 and selectors4, making life easier for both authors and CSS test suite authors, in addition to the reasons given above to recommend authors not to use the feature if it were retained. In implementation cost, there isn't a big difference as to whether :not takes a list or a single element (and some have said that a list is actually a bit easier for them). > Yes, there is an inline issue in the spec: > http://dev.w3.org/csswg/selectors4/#specificity > > The specificity of :not() and :matches() are, and IMO should remain, > consistent. I think dbaron’s proposal makes sense, but it requires > more discussion and unfortunately the group’s focus does not seem to > be on Selectors at all at the moment. In the case of a simple-minded selection engine such as that in libcroco, the proposed change to :matches specificity does have some additional implementation cost compared to max, but the difference isn't huge. However, much more relevant is what the cost is for more sophisticated implementations. There's also a runtime cost, because one needs to either evaluate all sub-selectors (rather than stopping at the first matching one), or at least one would need to sort the subselectors by specificity (and not sort by cheapness). (E.g. in this optimization, simple type selectors would go to the end of the list in this optimization, even though they're among the cheapest to evaluate and most likely to match. OTOH, a common case for :matches is that all the sub-selectors have the same specificity.) So far, I don't think these implementation & runtime costs are prohibitive to adopting this proposed change to :matches specificity. pjrm.
Received on Wednesday, 20 March 2013 00:43:45 UTC