W3C home > Mailing lists > Public > www-style@w3.org > June 1998

Re: Selector "on presence of"

From: Ian Hickson <exxieh@bath.ac.uk>
Date: Fri, 5 Jun 1998 20:51:01 +0100
Message-ID: <026201bd90d3$69fe13c0$cb20268a@hpxu>
To: Daniel.Glazman@der.edf.fr
Cc: Simon Richter <geier@psi5.com>, www-style@w3.org, Doug Rand <drand@sgi.com>
[I quote Daniel here, but Douglas said similar things of equal truth and my
response takes his comments into account. First I discuss the points raised,
then I propose a modification which would be easier to implement]

A quick subset of my original suggestion is:
>> BODY.letter:conditional(BODY IMG.logo) { margin-top: 2em; }
>> applies to BODY elements with class "letter" when there is an element IMG
>> with class "logo" in the document tree.

Daniel Glazman wrote:
> If you take a look at actual CSS 2 selectors, you'll see that they are
> designed so the browser does not have to deal with the complete parse
> treee of the document. Implementors have already refused extensions of
> selectors because of this lack of a full parse tree and for
> 'performances' reasons.

I fully realise that this idea is dramatically more complicated to implement
than anything so far present in CSS specs. As I said to Simon, in his case
and in all cases I have so far met there are quicker ways of achieving the
same effect. However, I am sure there are cases where (as far as the
_stylesheet_ author is concerned) this would be much simpler/easier.

Daniel's opinion:
> 1) lack of a parse tree: this is implementation problem and should
> not constrain the spec...
> 2) performances: even my Pilot is able to browse the web and the very
> first Sega or Nintendo is more powerful than my pc !

I agree, and will do so until the day that I decide to write my own

> So: your proposal is interesting but you can be 100% sure that
> implementors will refuse it for implementation reasons.
Ah... I see the postprocessor implemented in your sendmail is still
working... :-)

Unfortunately, you are right. However, I think most things which are going
to be in CSS3 are going to be hard to implement. Take, for example, Eric
Sink's "complex page patterns" suggestion (which looked very interesting,

> Last thing: pseudo-elements do not imply a condition on the target
> element in CSS2. Your proposal breaks that.
This is a pseudo-class. ("A:hover" is certainly a condition - it only
applies to an A elements that have the pointer over it).

An improvement over my idea is to drop the full parse tree search. Instead,
the pseudo-class only checks descendants. (If you read the original idea,
then basically you drop the ":main-selector" thing and infer it at the
beginning of _all_ of the checked selectors).

Examples to make it clearer, in order of clarity (clearest first):

BODY.letter:contains(IMG.logo) { margin-top: 2em; }
/* applies to BODY elements with class "letter" when it contains an element
IMG with class "logo". */

BODY H1 { font-size: 200%; }
BODY:contains(H2) H1 { font-size: 400%; }
/* H1 is twice as big when there is an H2 in the document. */

BODY P:contains(IMG) { text-align: center; }
/* Centers paragraphs that contain images. */

BODY FORM:contains(INPUT[type=submit]) BUTTON.javascriptsubmit
display:none; }
/* Hides BUTTON elements of class "javascriptsubmit" when they are contained
by a FORM element which contains an INPUT element with the "type" attribute
equal to "submit". */

BODY:contains(BLOCKQUOTE P IMG.signature):before { display: block;
background: white; color: red; border: thin solid black; content: "This \
contains a signed document!" }
/* Adds a bordered white box containg the text "This contains a signed
document!" at the top of the canvas when the body element contains a
blockquote containing a paragraph containing an image with class signature.

/* And now a reason not to have this feature: */

P.message:after { content: " nowhere"; }
DIV.special BLOCKQUOTE:contains(CITE A.author:focus) + P.status
SPAN.link:after { content: " an author"; }

/* assume the following document:

   <DIV CLASS=special>
         <P>We now have to consider
<CITE><A class=author href="...">Darwin</A></CITE>'s
      <P CLASS=status>
         (<SPAN class=link>That is a link to</SPAN>.)

Then it would normally render as:

  We now have to consider Darwin's book.
  (That is a link to nowhere.)

But if Darwin's name has the focus, then the text should change to:

  We now have to consider Darwin's book.
  (That is a link to an author.)


Now. About CSS not becoming a programming language...
Ian Hickson
Version: 3.12   Info: www.geekcode.com
GIT/M/S d->-- s+: a--->? C++(+++)>$ U>*++++ P L+>+++++ E(+)>+++ W+++ N(+) o?
K? w@ O- !M V- PS+ PE- Y+ PGP>+ t 5+++>++++ X- R+(+++) tv b++(+++) DI++
D++(---)>++++ G>+++ e(*)>+++++ h!()(--) !r y?
Received on Friday, 5 June 1998 18:42:58 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 27 April 2009 13:53:55 GMT