W3C home > Mailing lists > Public > www-style@w3.org > October 2009

Re: [Selectors] Clarify when universal selector may be omitted

From: fantasai <fantasai.lists@inkedblade.net>
Date: Thu, 22 Oct 2009 10:29:22 -0700
Message-ID: <4AE09672.9040505@inkedblade.net>
To: Leif Halvard Silli <xn--mlform-iua@xn--mlform-iua.no>
CC: www-style list <www-style@w3.org>
Leif Halvard Silli wrote:
> I think in reality you disagree with what I intended above.
>     FIRSTLY:
> Change of position: I assume that both these are valid, right?
>    *::marker {}/*Var1*/
>     ::marker {}/*Var2*/


> Why do you specifically call out pseudo-elements? The current draft 
> doesn't do that. [1]

That's the error we're trying to fix here.

> Or to ask differently, why isn't the following,
>    *::marker{}
> a case of a simple selector sequence where the "*" - quoting the text - 
> "is not the only component of a sequence of simple selectors"?
> 1) Isn't pseudo-element covered by the word 'component'?
> 2) If yes, then what is 'pseudo-element' a component of, if not of a 
> 'simple selector sequence'?
> 3) If it is a component of a 'simple selector sequences', then it is 
> unecessary and confusing to call it out (this is what has confused me)

A pseudo-element is not part of a simple selector sequence
because it is not a simple selector. It may be appended
to the simple selector sequence, but that does not make it
part of the simple selector sequence.

>     THIRDLY:
> This is what the spec says about what kind of 'component' a 
> pseudo-element is:
> The "simple selectors" definition paragraph says: [2]
>   ]]A simple selector is either a type selector, universal
> selector, attribute selector, class selector, ID selector, or
> pseudo-class. One pseudo-element may be appended to the last
> sequence of simple selectors in a selector.[[
> Even if this paragraph defines the list of simple selectors, 
> pseudo-element is not described as a simple selector. But it IS 
> described as an appendix to a simple selector sequence. Thus it ought to 
> be considered a component of a simple selector sequence, even if it 
> (may) not (be) a simple selector itself.

No. "component" means "constituent part". If I append X to Y,
X doesn't become a component part of Y. It becomes a constituent
part of X + Y.

> 3 paragraphs further down it is said, however:
>   ]]An empty selector, containing no sequence of simple selectors and no 
> pseudo-element, is an invalid selector.[[
> Here the pseudo-element is not considered part of the simple selector 
> sequence.


> The pseudo element definition says: [3]
>   ]]Only one pseudo-element may appear per selector, and if present it 
> must appear after the sequence of simple selectors that represents the 
> subjects of the selector.[[
> Here too, pseudo-elements are not considered part of the simple 
> selectors sequence.


> However, the text about the negation pseudo class talks about both the 
> negation pseudo-class and the pseudo-elements as simple selectors (why 
> else would it, inside the same parenthesis, specifically exclude them 
> both from "simple selectors"?): [4]
>   ]]The negation pseudo-class, :not(X), is a functional notation taking 
> a simple selector (excluding the negation pseudo-class itself and 
> pseudo-elements) as an argument. It represents an element that is not 
> represented by the argument.[[

This is also an error, that has already been fixed in the Editor's Draft.
See the discussion at

> The grammar section also considers pseudo-elements are part of a simple 
> selector sequence - it says about pseudo-elements that they "occur only 
> in the last simple_selector_sequence" - thus it is clearly a 'component' 
> of a simple selector sequence: [5]
> ]]
> pseudo
>   /* '::' starts a pseudo-element, ':' a pseudo-class */
>   /* Exceptions: :first-line, :first-letter, :before and :after. */
>   /* Note that pseudo-elements are restricted to one per selector and */
>   /* occur only in the last simple_selector_sequence. */

The grammar is written this way because the grammar for
pseudo-classes and pseudo-elements intersect. The names
of the productions here are not definitions, they are
merely suggestive; the grammar could have been written
using numerical references but it's harder to understand
that way.

> According to section 1.3 of CSS3 selectors, "the components of" a simple 
> selector sequence are called "simple selectors": [6]
>   ]]what was referred to in CSS2 as a simple selector is now called a 
> sequence of simple selectors, and the term "simple selector" is now used 
> for the components of this sequence[[
> Thus, a pseudo-element, being a component of a sequence of simple 
> selectors, should itself be a simple selector.

A pseudo-element is not a simple selector.

> * Simple selector sequences are made up of two kind of components:
>  - simple selectors
>  - pseudo elements

This statement is false. Simple selector sequences are made up of
simple selectors ONLY.

> * 'Components of simple selectors' are not properly defined

"Components of simple selectors" is not used anywhere in the
specification, so it doesn't matter whether it is defined or not.

Received on Thursday, 22 October 2009 17:29:59 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 11 February 2015 12:34:30 UTC