- From: Tab Atkins Jr. via GitHub <sysbot+gh@w3.org>
- Date: Wed, 30 Nov 2016 18:28:21 +0000
- To: public-css-archive@w3.org
The spec is clear - it's parsed as a `<declaration-value>`, which is just any valid token (with a few restrictions). There's no further structure to parse them into, so you have to keep the parsed result around, raw and without any further meaning assigned to them (beyond the `var()` substitution defined by the spec). One consequence of this, if you're following the Syntax spec, is that, yes, you can't have "half a function token" - the parsing algos never return function tokens, only function component values, which are whole functions that know what their arguments are. You similarly can't have half a (), [], or {} block. URL parsing is, unfortunately, fucked here. `url("foo")` and `url('foo')` cause the `url(` part to parse as a function token, but anything else causes the whole shebang to parse as a url token, and the whole contents between the parens is a url. As François says, `url(var(--foo))` is identical in meaning to `url("var(--foo)")` as a result. We need to add a new, non-stupid function for urls to make this work better, such as `image()`. --- So, back to the issue. Nothing's underspecified here. The value in `a.css` isn't a URL, it's a `<string-token>`. The value in `b.css` isn't a URL, it's a `<url-token>` (uninterpreted!). (And, as François notes, does *not* have the value you expect - it's not equivalent to `url("a.png")`.) Only in `c.css` is the value finally in a context where it's given a meaning, and it finally becomes a URL, where it can be resolved into an absolute URL, and that's done relative to the location of `c.css`, like any other URL in the file would be. I agree this isn't the friendliest behavior. But it's the logical behavior of untyped custom properties, as they're meaningless by design. The correct fix for this is to use a typed custom property, so we can actually parse the value in `b.css` and give it meaning. Let's finish up the Houdini custom properties stuff, so we can make sure we're doing things right and then produce a simple declarative version - that way you can write `@custom-property --b { type: "<url>"; }` and everything works as expected. -- GitHub Notification of comment by tabatkins Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/757#issuecomment-263953764 using your GitHub account
Received on Wednesday, 30 November 2016 18:28:29 UTC