W3C home > Mailing lists > Public > www-style@w3.org > May 2002

Re: small selector syntax addition

From: Ian Hickson <ian@hixie.ch>
Date: Sat, 04 May 2002 01:55:13 +0100
Message-ID: <3CD33171.8060407@hixie.ch>
To: fantasai <fantasai@escape.com>
CC: www-style@w3.org
fantasai wrote:
> $ and :matches()

$ is this idea exactly equivalent to :subject and (...).

:matches() in this idea is exactly equivalent to :matches() in my proposal, 
after moving any selectors associated with the subject of the argument out to 
the level of the :matches() pseudo, and replacing the subject with a #.


    foo:matches($[baz] bar)


    foo[baz]:matches(# bar)

>     - A $ in front of a simple selector sequence indicates the subject
>       of the selector. By default the last sequence is the subject.

This is unnecessary if you have my :matches().

>     Advantages:
>        3. Can be used to to make almost any selector imaginable, so it won't
>           need to be extended with each subsequent vesion of the spec.

This isn't true. If you try to convert the selectors I gave in my last post, 
you'll see that there is at least one which your syntax cannot do.

>        4. Parsing and processing code for the main selector can be
>           reused to handle the :matches() argument.

I forgot to mention this as a plus point for mine.

>        6. A partial implementation of just $ will suffice for most needs.

I don't really understand this.

>        7. Reads better: .section > $div > code

    .section > div:has( > code)

I don't see that the dollar sign is any more understandable.

>           One can see the selector as mapping unbroken path through the
>           tree, branching only when selectors _need_ to branch off.
>               .section > :matches(h1,h2,h3,h4,h5,h6) + $div > code

I really don't understand what you mean by that. It sounds like an advantage 
which also applies to my suggestion, though.

You forgot the following disadvantages:

       1. Changes one of the basic concepts of CSS, that the subject of the
          selector is the last simple selector in the chain.

       2. Can only have one description on the right hand side, unless you use
          the :matches() form, at which point the dollar syntax is redundant.

       3. removes the potential use of a dollar sign from the language for
          future extensions.

       4. Ambiguous: what does it mean if there are two $s in a selector?

       5. Can't describe everything.

For completeness, here are some examples:

       /* select gardens in the village containing at least one pot plant */
       village $garden plant[type=pot]

       /* select gardens in the village containing at least one infected plant */
       village $garden plant > flea

       /* select gardens in the village containing at least two plants */
       village $garden plant ~ plant

       /* select gardens containing at least two infected plants */
       village $garden plant:matches($ > flea) ~ plant > flea

       /* select all plants that are before infected plants */
       $plant + plant > flea

       /* select all clean plants that are before infected plants */
       $plant:not(:matches($ > flea)) + plant > flea

       /* select all fleas if the document contains an antiflea element */
       /* can't be done */

Given that every useful [1] selector using this syntax can be algorithmically 
converted into one that uses my :matches() (this is true for all the proposed 
syntaxes, in fact), I don't see the advantage of this proposal.

-- Footnotes --
[1] this proposal allows for impossible selectors which are not possible using 
my :matches() form. For example:


...can never match. These cannot be converted to the :matches() form.

Ian Hickson
``The inability of a user agent to implement part of this specification due to
the limitations of a particular device (e.g., non interactive user agents will
probably not implement dynamic pseudo-classes because they make no sense
without interactivity) does not imply non-conformance.'' -- Selectors, Sec13
Received on Friday, 3 May 2002 20:55:17 UTC

This archive was generated by hypermail 2.3.1 : Monday, 2 May 2016 14:27:01 UTC