Re: Test of empty substring-matching attribute selectors

On Wednesday 02 April 2008 18:50, fantasai wrote:
> Bert Bos wrote:
> > This test:
> >
> >    
> > http://www.w3.org/Style/Examples/013/css3-selectors-0603-empty.html
> >
> > tries to test substring-matching attribute selectors ~=, |=, ^=,
> > *=, $= (Selectors section 6.3[1]) with empty values, such as
> > p[title^=""].
> >
> > It assumes that such selectors are valid (i.e., not ignored) but
> > match nothing. I think that is what we decided last week[2]. I'm
> > not sure if we decided anything for |=, but it seems consistent to
> > treat it the same way.
> >
> > This test:
> >
> >     http://www.w3.org/Style/Examples/013/t050801-empty-attr-01.html
> >
> > is the same, except that it only tests ~= and |=, and is thus
> > suitable for CSS level 2, section 5.8.1[3].
> >
> > [1] http://www.w3.org/TR/css3-selectors/#attribute-selectors
> > [2] http://www.w3.org/2008/03/28-css-irc.html#T00-52-44
> > [3] http://www.w3.org/TR/CSS21/selector.html#matching-attrs
>
> Bert, [attr|=""] is not an ambiguous (match everything or match
> nothing) case. It is very clear from the existing definition that it
> should match attr=""
>    attr="-foo"
>    attr="-"
> and not
>    attr="foo--"
>    attr="foo"

I would drop the "very" and probably the "clear," too :-) It's not any 
more clear than the other substring-matching attributes. None of them 
says that the right-hand side must be non-empty to have an effect, and 
yet that is what we decided it meant.

It seems consistent to treat |= the same as ~=, except that the former 
uses white space as separators and the latter dashes. So if

    [foo~=""] does not match foo=" "

then also

    [foo|=""] does not match foo="-"

It's interesting that all browsers (at least those I tested: Konqueror, 
Opera 9.5 beta, iCab, Safari and Firefox) indeed treat [foo|=""] and 
[foo~=""] as matching nothing, although they treat [foo^=""] as 
matching always.

Firefox also treats [foo*=""] as matching nothing.

Konqueror is inconsistent, because [foo~=""] doesn't match, except when 
foo is itself empty (foo=""). I don't understand the logic of that. 
(Safari does the same, but not Webkit.)



Bert
-- 
  Bert Bos                                ( W 3 C ) http://www.w3.org/
  http://www.w3.org/people/bos                               W3C/ERCIM
  bert@w3.org                             2004 Rt des Lucioles / BP 93
  +33 (0)4 92 38 76 92            06902 Sophia Antipolis Cedex, France

Received on Wednesday, 2 April 2008 17:24:27 UTC