Re: [selectors] Proposal: :n-children() selector

On Tue, Feb 3, 2015 at 9:15 PM, Henrik Andersson <henke@henke37.cjb.net> wrote:
> Tab Atkins Jr. skrev:
>> That said, I'd actually prefer not to implement this.  Instead, I'd
>> prefer to get custom selectors working (at least the declarative alias
>> kind) as suggested in
>> <http://dev.w3.org/csswg/css-extensions/#custom-selectors>, so people
>> can do this themselves if they want it.  Doing this well requires
>> going a little further than what is currently written in the doc, but
>> all very believable - basically we need a way to handle plumbing
>> arguments through from the "custom" pseudo to the expansion, and we
>> need some better combinators to handle "self and/or siblings", etc.
>>
>> With that, you could do something like:
>>
>> @custom-selector $rest:--n-siblings($n)
>> :nth-child(1):nth-last-child($n) /self-and-siblings/ $rest;
>>
>> So that writing `.foo:--n-siblings(3)` would become
>> `:nth-child(1):nth-last-child(3) /self-and-siblings/ .foo` after
>> expansion.
>
> Those selectors look scary. Simplicity helps authors get things right.

You (or someone smarter than you that you're copy-pasting from) writes
them once.  Then you can use them in the simple way, like
`.foo:--n-children(5)`.  That's the whole point of custom selectors.

> There is also a matter of performance. I don't know how to evaluate
> performance, but one thing is clear: browsers have the opportunity to
> optimize if they know what you are doing.

It'll be similarly costly, most likely.  When something has both
proven itself popular as a custom selector *and* a native impl has
significantly better perf, we can add it in, but I'd prefer to enable
authors to do things themselves otherwise, rather than waiting for
standards bodies to agree on things and browsers to implement them.

~TJ

Received on Wednesday, 4 February 2015 09:34:14 UTC