W3C home > Mailing lists > Public > www-style@w3.org > December 2013

Re: [css-variables] cyclic dependencies involving fallback

From: Tab Atkins Jr. <jackalmage@gmail.com>
Date: Mon, 16 Dec 2013 10:16:47 -0800
Message-ID: <CAAWBYDCHa3SLiSq_PH=_GV1Ae3x6pmAwhRrX_ysAfDnsmsp3HQ@mail.gmail.com>
To: Cameron McCormack <cam@mcc.id.au>
Cc: www-style list <www-style@w3.org>
On Sun, Dec 15, 2013 at 2:49 PM, Cameron McCormack <cam@mcc.id.au> wrote:
> The spec currently says:
>
>   Custom properties may use variables in their own values to build up
>   composite variables. This can create cyclic dependencies where two or
>   more custom properties each attempt to use the variable that the
>   other defines; doing so makes all the custom properties involved in
>   the cycle compute to their initial value (which is a guaranteed-
>   invalid value).
>
> It's not clear exactly what "attempt to use" means here.
>
>   p {
>     var-a: var(b, var(a));
>     var-b: 1;
>   }
>
> Would this result in var-a being invalid since its value includes a
> reference to itself?  Or should it be valid because we don't need to
> evaluate the var(a) fallback?
>
> I interpreted the spec to mean that any occurrences of a variable reference
> on the right hand side would count when looking for cycles, and thus var-a
> would be invalid, but a bug reporter thought otherwise
> https://bugzilla.mozilla.org/show_bug.cgi?id=950501.

The paragraph in question was written before I added defaults, so I
accidentally skipped dealing with this. :/

I can go either way.  Can you describe what makes either difficult?

Note the similar-looking but actually quite distinct case of:

p {
  var-a: var(b, 1);
  var-b: var(a, 2);
}

Similarly, I can go either way with this.  Having them just be invalid
seems okay, but so does having them resolve to a:1 and b:2.  I think
those are the only two answers - we can't choose an arbitrary one to
declare invalid and then resolve all the fallbacks from that point,
because there's no distinguished "first" one.  They've either gotta
all be invalid, or all be invalid-but-triggering-fallback, and I think
I prefer just plain invalid here, since the latter involves two-pass
resolution.  (Maybe n-pass? Not putting enough thought into it right
now.)

~TJ
Received on Monday, 16 December 2013 18:17:34 UTC

This archive was generated by hypermail 2.3.1 : Monday, 2 May 2016 14:39:17 UTC