- From: Kang-Hao (Kenny) Lu <kennyluck@csail.mit.edu>
- Date: Mon, 30 Apr 2012 14:41:48 +0800
- To: "Tab Atkins Jr." <jackalmage@gmail.com>
- CC: "L. David Baron" <dbaron@dbaron.org>, WWW Style <www-style@w3.org>
(12/04/30 13:48), Tab Atkins Jr. wrote:
> On Sun, Apr 29, 2012 at 1:57 PM, Kang-Hao (Kenny) Lu
> <kennyluck@csail.mit.edu> wrote:
>> (12/04/27 8:31), Tab Atkins Jr. wrote:
>> Well, "functionally equivalent after parsing" is of course better than a
>> vague equal sign but it's still pretty underspecified. It might also not
>> be what we want, for two reasons:
>>
>> 1) cycle() compares the inherited value to the arguments so that's a
>> comparison of computed values. That's is it should at least be
>> "functionally equivalent after parsed and computed".
>>
>> 2) there are cases that are "functional equivalent" but potentially hard
>> to tell programatically, such as:
>>
>> a. "url(http://www.example.com/)" vs. "image(http://www.example.com/)".
>> b. "image(black)" vs. "linear-gradient(0deg, black, black)"
>
> Neither of those are equivalent in the way I was thinking. I was just
> thinking "same tokens, and same order unless the difference in order
> is unimportant".
>
> Actually, since computed values shouldn't *have* order unless it's
> important (for example, the 'flex' function is just "two numbers, and
> a length or keyword"), comparison of the abstract notion of computed
> values should be fine. That allows "5px 10px" and "top 10px left 5px"
> to be "the same" potentially.
Please no "abstract notion"!
> However, I wouldn't be too put out if we just went for the "same
> tokens, and same order if important" definition. It's simple.
Which means that a hash color is different from rgb()? I doubt this is
implementable.
In any case, I believe this question has to be deferred to CSSOM.
>> If there are two values 'A' and 'B' for a property 'foo' such that A=B
>> in browser A and A!=B in browser B, authors can target Browser A and B
>> with something like
>>
>> .parent {
>> foo: B;
>> }
>>
>> .child {
>> foo: cycle(A, value-A-targeting-browser-A,
>> B, value-B-targeting-browser-B)
>> }
>>
>> Besides prefixed values, there even seem to be permanently exploitable
>> pairs that can be used here (say, by using the fact that Firefox is
>> 1/60px quantized).
>>
>> I don't have enough experience with the Web Platform to tell if this is
>> a big deal or not.
>
> This isn't a big deal. UA sniffing is already trivial to do (hard to
> do *right*, but trivial to do half-right, at least), and even within
> CSS, selectors make it very easy to target rules at specific UAs.
> Given any selector "A", the selector "A, :not(*):-foo-B" will be
> functionally equivalent in browsers that understand the -foo- prefix,
> and invalid everywhere else.
Yeah, although using prefixed selectors/values is "invalid" and easily
breakable with browser updates while exploiting differences on system
limitations isn't.
I think "validity" is probably theoretical so I am not in any sense
enthusiastic about it but I am just raising a point here.
Cheers,
Kenny
Received on Monday, 30 April 2012 06:42:18 UTC