- From: Francois Remy <fremycompany_pub@yahoo.fr>
- Date: Thu, 31 Jul 2008 12:17:15 +0200
- To: "Boris Zbarsky" <bzbarsky@MIT.EDU>
- Cc: "www-style list" <www-style@w3.org>
From: "Boris Zbarsky" <bzbarsky@MIT.EDU>
>
> Francois Remy wrote:
>> http://www.w3.org/TR/2001/CR-css3-selectors-20011113/#content-selectors
>
> That's a pretty out-of-date draft. Recent drafts don't have :contains
> because no one implemented it. Largely because of the performance issues.
OK, I did'nt know that.
>
> See http://www.w3.org/TR/css3-selectors for the current draft.
>
>> It's quite stupid to think :matches cost more than :contains
>
> Indeed not.
>
>> since :matches en :contains are both to be reevaluated when an element is
>> added
>
> Or removed.
Yes. I always suppose the deletion when I speak about addition.
>
>> We don't need to implements a partial :matches because a whole :matches
>> is easily possible.
>
> That's good to hear. I look forward to seeing a detailed algorithm for
> implementing it plus the notification system needed for efficient style
> reresolution when the DOM is mutated.
OK, I will do it.
Please give me some time to do it, I've others activities at the moment.
>
>> If a developer want to make a buggy selector, it don't need :matches to
>> do it.
>> :root > * * * *:hover * * * * *:contains(e) * * { color: red; }
>
> I see nothing buggy in this selector, nor anything that would take
> significant processor time to deal with (apart from the :contains, which
> as I already mentioned is no longer in CSS3 Selectors).
I can assure you that this selector, even without the :contains, need a long
CPU-time.
In fact, :root > * * * * match (nearly) each elements of the document 4
times !
<html><body><a><b><c><d><e><f><g><h>Content</h></....>
The :root > * * * * selector can match
- "html > body a b c", "html > body a b d", "html > body a b e", ...
- "html > body b c d", "html > body b c e", ....
- "html > body c d e", ...
- ...
So, we get 4 mousein/out handlers attached to all elements matched by :root>
* * * *:hover.
In addtion, they also receive handlers for DOM mutation events (* added or
removed into id).
Because we continue to add some * after, elements of the document, the
complexity is very high.
>
>> a b::before {content:'[[X-CONTENT-B]]'; display: none; }
>> a:contains([[X-CONTENT-B]]) > c { ... }
>
> Of course that wouldn't work, even if :contains were implemented (since
> the generated content is not in the DOM). But the point that :contains is
> more expensive stands.
Hum, I checked the old spec and what you say seems to be true.
But as :contains doesn't any more exist, we can leave this point at the
moment.
Fremy
Received on Thursday, 31 July 2008 10:17:57 UTC