【发布时间】:2014-10-08 00:13:57
【问题描述】:
Bootstrap 使用一些 LESS mixins 来生成它的 column 类(和其他几个类);
.make-grid-columns() {
// Common styles for all sizes of grid columns, widths 1-12
.col(@index) when (@index = 1) { // initial
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
.col((@index + 1), @item);
}
.col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
.col((@index + 1), ~"@{list}, @{item}");
}
.col(@index, @list) when (@index > @grid-columns) { // terminal
@{list} {
position: relative;
// Prevent columns from collapsing when empty
min-height: 1px;
// Inner gutter via padding
padding-left: (@grid-gutter-width / 2);
padding-right: (@grid-gutter-width / 2);
}
}
.col(1); // kickstart it
}
我可以看到LESS mixin guards被用来创建循环,我可以理解LESS documentation中给出的代码示例;
.loop(@counter) when (@counter > 0) {
.loop((@counter - 1)); // next iteration
width: (10px * @counter); // code for each iteration
}
div {
.loop(5); // launch the loop
}
但我似乎无法准确理解 bootstrap 使用的更复杂的嵌套保护表达式是如何工作的。有人可以更详细地评论上面的引导代码,让我知道发生了什么吗?
【问题讨论】:
-
这个循环与the documentation 中的第二个示例基本相同(涉及递归和守卫)。唯一的区别是附加的“终端”混合,它用于实际呈现由先前迭代生成的选择器列表字符串。那么,对您来说,有哪些确切的陈述有问题呢? (考虑到唯一使用的保护表达式是简单的
=、<=、>)。 -
抱歉,我是 LESS 的新手,刚刚开始浏览文档(我看到你已经做出了贡献)。我刚刚经历了模式匹配部分 - 这是嵌套的 .col 选择器(例如 .col((@index + 1), @item); )让我感到困惑,但我现在似乎已经明白了。
-
第二个例子也很棒——干杯。
-
以防万一,请不要将此 Bootstrap 网格代码视为学习“现代”少的东西。事实上,这段代码(特别是它的“通过字符串连接生成选择器列表”)是非常古老的 sn-p 并且它确实显示了“过时”的做事方式:)。 (奇怪的是,有一次我们有一个很好的 discussion 关于它)。
-
Done.
标签: css twitter-bootstrap loops less