Вы можете выполнить интерполяцию с большинством функций CSS, включая rgba()
(см. Пример here). Фактически, интерполяция является одной из основных особенностей пользовательских свойств.
Но вы не можете сделать это с url()
, поскольку url(var(--url))
анализируется не как url(
функции маркера с последующим var(--url)
с последующим )
, но один url()
знак того, что является недопустимым, так как var(--url)
лечится, как и сам в URL, и unquoted URLs в url()
токены не могут содержать круглые скобки, если они не экранированы. Это означает, что замена никогда не происходит, потому что синтаксический анализатор никогда не видит никаких выражений var()
в значении свойства - действительно, ваше объявление background
полностью недействительно.
Если вы этого не поняли, все в порядке. Просто знайте, что вы не можете использовать интерполяцию var()
с url()
из-за устаревших причин.
Несмотря на то, что проблема изображали в вопросе связан с маркером наследство url()
, вы не можете сделать это путем создания URL лексемы из нескольких var()
выражений либо, в случае, если вы думали о попытке что-то вроде --uo: url(; --uc:);
или --uo: url("; --uc: ");
и background: var(--uo) var(--url) var(--uc);
, Это потому, что custom properties cannot contain unmatched string delimiters or parts of url()
tokens (called bad URL tokens).
Если вы хотите, чтобы указать URL в настраиваемого свойства, необходимо выписать все url()
выражение, и заменить, что все выражение:
:root {
--url: url("https://download.unsplash.com/photo-1420708392410-3c593b80d416");
}
body {
background: var(--url);
}
Или использовать JavaScript вместо var()
для выполнения интерполяции ,
Вы были так близко, '--url: url (yoururl);' 'background: var (- url);' – pol
@pol: Это совсем не близко. Это не соответствует точке этого вопроса на милю. Тем не менее, это * - единственное решение проблемы относительно url(). – BoltClock