【发布时间】:2015-09-03 12:41:31
【问题描述】:
我想遵循this blog 中规定的模式,它使用以下 css 规则来指定项目应出现的位置:
.items li {
position: absolute; top: 0; left: 0;
}
.items li:nth-child(1) { transform: translate3d(0, 0%, 0); }
.items li:nth-child(2) { transform: translate3d(0, 100%, 0); }
.items li:nth-child(3) { transform: translate3d(0, 200%, 0); }
但是,我不知道列表中有多少项目,所以我不想像上面那样硬编码 30 行,并且限制为 30 个列表项目。相反,我想在每次添加项目时添加样式规则,这意味着我可以拥有无限数量的列表项。
我尝试了各种方法,但不知道如何以编程方式动态添加此类样式规则。任何帮助将非常感激。我正在用 Dart 编写应用程序,但同样欢迎使用 Javascript 解决方案。
更新
请参阅下文,了解让我走上正轨的公认答案。它使用 jquery,所以我在下面为像我这样使用 Dart 的人提供了一个版本。 Dart 版本使用我刚刚找到的How do I dynamically add a stylesheet using Dart? - 我不知道我之前是怎么错过的。感谢大家的帮助。
import 'dart:html' as Html;
void main(){
Html.StyleElement styleElement = new Html.StyleElement();
Html.document.head.append(styleElement);
Html.CssStyleSheet sheet = styleElement.sheet;
final rule = 'div { border: 1px solid red; }';
sheet.insertRule(rule, 0);
}
【问题讨论】:
-
这种模式是否像看起来那样静态?可能根本没有理由在 javascript 中执行此操作。你听说过 sass/scss/less 吗?浏览器不喜欢样式修改。上述工具使生成样式变得非常容易。
-
我没有使用过 sass/scss 或更少,但据我所知,他们在这里没有做我需要的事情。基本问题是我需要为 unknown 数量的列表项中的 每个 设置一个样式,因此每次向列表中添加一个项时我都需要添加一个样式。我认为 sass/scss 或更少对此没有帮助?
-
好吧。 scss 允许您定义要生成的 css 模板,您只需传递一个常量即可执行 x 次。您可以将常量设置为 2000。这样根本不会执行任何 javascript,并且您的浏览器会很高兴,因为加载样式将是一次加载+缓存操作。修改样式肯定会触发浏览器重做布局,这是您要不惜一切代价避免的
标签: javascript html dart