【发布时间】:2018-12-24 10:06:47
【问题描述】:
我正在尝试使用淘汰赛的style binding 将CSS3 variables 添加到一些div 元素中,然后在我们的CSS 中使用这些元素来计算最终样式。
例子:
var viewModel = function ViewModel() {
this.randomColor = ko.computed(function() {
// Random color thanks to @paul_irish
return "#" + Math.floor(Math.random() * 16777215).toString(16);
});
}();
ko.applyBindings(viewModel);
h2 {
/* default fall-back color: */
--random-colour: #666;
color: var(--random-colour);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<h2 data-bind="style: {'--random-colour': randomColor}">This should receive a random text color.</h2>
http://jsfiddle.net/tujhxdmc/5/
我希望它在样式标签中应用 css 变量,但它似乎只是被忽略了。周围的绑定和使用标准 CSS 属性的绑定都按预期工作,所以我确定这是 CSS 变量的问题。
如果您想应用字体粗细或文本装饰样式,或名称不是合法 JavaScript 标识符的任何其他样式(例如,因为它包含连字符),您必须使用该样式的 JavaScript 名称.例如,
- 不要写 { font-weight: someValue };写 { fontWeight: someValue }
但这不适用于 CSS 变量(必须以双连字符开头)。
如何在 Knockout 的样式绑定中使用 CSS 变量?
【问题讨论】:
-
查看源代码,如果没有拉取请求,我认为这不会以任何漂亮的方式得到支持:defaultBindings/style.js。
-
这似乎是驼峰样式属性的行,但看起来
--会被正则表达式吃掉。 -
..我不太喜欢那个样子
-
我在 GitHub 上提出了一个问题来跟踪它。你可以在这里找到它:Cannot bind to custom CSS property variables #2400。也许更好的方法会来自那个问题。
标签: javascript css knockout.js