如何在声明它的同一规则中使用 CSS 变量
How to use CSS variable in same rule that declares it
在我的自定义元素的定义中,我有以下代码:
<dom-module id="dom-element">
<style>
p {
--test: brown;
color: var(--test);
}
</style>
<template>
<p>I'm a DOM element. This is my local DOM!</p>
</template>
<script>
Polymer({
is: "dom-element"
});
</script>
</dom-module>
但是,CSS 自定义 属性 不起作用。 Polymer 只是把这个变成了:
p {
--test: brown;
color: var(--test);
}
进入这个:
p {
color: ;
}
但我希望输出为:
p {
color: brown;
}
可在此处找到演示:http://plnkr.co/edit/ogMVPKNvc7SYISomWPWm?p=preview
如果我不使用 Polymer,并在纯 JavaScript 中创建自定义元素,CSS 自定义 属性 会按预期工作。
我搜索了 Google,但没有找到相关内容。这里有什么问题?如何将 CSS 自定义 属性 与 Polymer 一起使用?
Polymer 1 的 CSS 垫片(默认启用)显然不会在使用它的同一规则中处理 CSS 变量声明,因此您必须将声明移动到 :host
在这种情况下。
<!-- inside dom-module's template -->
<style>
:host {
--test: brown;
}
p {
color: var(--test);
}
</style>
HTMLImports.whenReady(() => {
Polymer({
is: 'x-foo'
});
});
<head>
<base href="https://polygit.org/polymer+1.7.1/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="polymer/polymer.html">
</head>
<body>
<x-foo></x-foo>
<dom-module id="x-foo">
<template>
<style>
:host {
--test: brown;
}
p {
color: var(--test);
}
</style>
<p>Hello world</p>
</template>
</dom-module>
</body>
但是,您可以在导入 polymer.html
之前使用声明的 global setting (useNativeCSSProperties
) 在 Polymer 中启用本机 CSS 属性,这将允许您的代码工作 as-is:
<script>window.Polymer = {lazyRegister: true, useNativeCSSProperties: true};</script>
<!-- import polymer.html here -->
HTMLImports.whenReady(() => {
Polymer({
is: 'x-foo'
});
});
<head>
<script>window.Polymer = {dom: 'shadow', lazyRegister: 'max', useNativeCSSProperties: true};</script>
<base href="https://polygit.org/polymer+1.7.1/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="polymer/polymer.html">
</head>
<body>
<x-foo></x-foo>
<dom-module id="x-foo">
<template>
<style>
p {
--test: brown;
color: var(--test);
}
</style>
<p>Hello world</p>
</template>
</dom-module>
</body>
在我的自定义元素的定义中,我有以下代码:
<dom-module id="dom-element">
<style>
p {
--test: brown;
color: var(--test);
}
</style>
<template>
<p>I'm a DOM element. This is my local DOM!</p>
</template>
<script>
Polymer({
is: "dom-element"
});
</script>
</dom-module>
但是,CSS 自定义 属性 不起作用。 Polymer 只是把这个变成了:
p {
--test: brown;
color: var(--test);
}
进入这个:
p {
color: ;
}
但我希望输出为:
p {
color: brown;
}
可在此处找到演示:http://plnkr.co/edit/ogMVPKNvc7SYISomWPWm?p=preview
如果我不使用 Polymer,并在纯 JavaScript 中创建自定义元素,CSS 自定义 属性 会按预期工作。
我搜索了 Google,但没有找到相关内容。这里有什么问题?如何将 CSS 自定义 属性 与 Polymer 一起使用?
Polymer 1 的 CSS 垫片(默认启用)显然不会在使用它的同一规则中处理 CSS 变量声明,因此您必须将声明移动到 :host
在这种情况下。
<!-- inside dom-module's template -->
<style>
:host {
--test: brown;
}
p {
color: var(--test);
}
</style>
HTMLImports.whenReady(() => {
Polymer({
is: 'x-foo'
});
});
<head>
<base href="https://polygit.org/polymer+1.7.1/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="polymer/polymer.html">
</head>
<body>
<x-foo></x-foo>
<dom-module id="x-foo">
<template>
<style>
:host {
--test: brown;
}
p {
color: var(--test);
}
</style>
<p>Hello world</p>
</template>
</dom-module>
</body>
但是,您可以在导入 polymer.html
之前使用声明的 global setting (useNativeCSSProperties
) 在 Polymer 中启用本机 CSS 属性,这将允许您的代码工作 as-is:
<script>window.Polymer = {lazyRegister: true, useNativeCSSProperties: true};</script>
<!-- import polymer.html here -->
HTMLImports.whenReady(() => {
Polymer({
is: 'x-foo'
});
});
<head>
<script>window.Polymer = {dom: 'shadow', lazyRegister: 'max', useNativeCSSProperties: true};</script>
<base href="https://polygit.org/polymer+1.7.1/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="polymer/polymer.html">
</head>
<body>
<x-foo></x-foo>
<dom-module id="x-foo">
<template>
<style>
p {
--test: brown;
color: var(--test);
}
</style>
<p>Hello world</p>
</template>
</dom-module>
</body>