- From: Leif Halvard Silli <xn--mlform-iua@xn--mlform-iua.no>
- Date: Thu, 22 Oct 2009 02:23:00 +0200
- To: fantasai <fantasai.lists@inkedblade.net>
- CC: www-style list <www-style@w3.org>
fantasai On 09-10-21 02.41: > Leif Halvard Silli wrote: >> Is this meant to have the following meaning: ? >> >> ?!? If "*" *is neither* the only component (i.e. w/o prefix) >> *nor* immediately preceding a pseudo-element, >> THEN the "*" may be dropped. >> >> If the answer is "yes, this is what is meant", > > Yes, that is what is meant, and it is completely *unambiguous* > due to the grammatical structure created by the use of "is" in > both places, which is why I'm not dropping the "is". 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*/ SECONDLY: Why do you specifically call out pseudo-elements? The current draft doesn't do that. [1] 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) 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. 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.[[ 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. */ : ':' ':'? [ IDENT | functional_pseudo ] ; [[ And more directly, in the same grammar: [5] ]] simple_selector_sequence : [ type_selector | universal ] [ HASH | class | attrib | pseudo | negation ]* | [ HASH | class | attrib | pseudo | negation ]+ ; [[ The CSS 2.1 grammar uses 'simple selector' instead of 'sequences, but otherwise has the same grammar w.r.t. 'pseudo': simple_selector : element_name [ HASH | class | attrib | pseudo ]* | [ HASH | class | attrib | pseudo ]+ ; 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. But then, the same section also discern between simple selectors and pseudo-elements ...: [6] ]]* new simple selectors including substring matching attribute selectors, and new pseudo-classes * new pseudo-elements, and introduction of the "::" convention for pseudo-elements [[ Finally, the Table of Contents lists simple selectors under section 6, while pseudo elements are listed in its own section. [7]. CSS 2.1 also discerns similarly (except in the grammar). CONCLUSIONS * Simple selector sequences are made up of two kind of components: - simple selectors - pseudo elements * 'Components of simple selectors' are not properly defined [1] http://www.w3.org/TR/css3-selectors/#universal-selector [2] http://www.w3.org/TR/css3-selectors/#simple-selectors-dfn [3] http://www.w3.org/TR/css3-selectors/#pseudo-elements [4] http://www.w3.org/TR/css3-selectors/#negation [5] http://www.w3.org/TR/css3-selectors/#grammar [6] http://www.w3.org/TR/css3-selectors/#changesFromCSS2 [7] http://www.w3.org/TR/css3-selectors/#contents -- leif halvard silli
Received on Thursday, 22 October 2009 00:23:36 UTC