以下,自举:如何使用span3(或SPANX [任何数])类作为混入?以下,自举:如何使用span3

2019-05-12 07:22发布

难道不可能性增加span3类在一个mixin避免把它的每一个元素在我的HTML? 就像是:

.myclass {
    .span3;
    // other rules...
}

编辑

我很抱歉,我忘了指定一个重要的细节: span3是一个标准的自举类的。 我没有发现它在引导框架的定义任何文件。

Answer 1:

新的答案(需要较少的1.4.0)

你真正想要的是一些被称为扩展在更短的和SASS术语。 例如,你想要一个HTML元素(只是一个例子)...

<div class="myclass"></div>

...... 充分行为,如果它有一个span3类从引导添加到它,但没有实际添加该类的HTML。 这可以在更短的1.4.0使用来实现:extend()但仍然不容易,主要是因为动态类生成引导将不会被拾起:extend()

下面是一个例子。 假设该初始更少的代码( 动态生成.span3类作为自举一样):

.span3 {
  width: 150px;
}

.someClass .span3 {
  font-size: 12px;
}

.someOtherClass.span3 {
  background: blue;
}

您在1.4.0添加此更少的代码:

.myclass {
  &:extend(.span3);
}

产生这个CSS:

.span3,
.myclass {
  width: 150px;
}
.someClass .span3 {
  font-size: 12px;
}
.someOtherClass.span3 {
  background: blue;
}

注:怎么自动扩展的其他实例.span3 。 这是不同的比SASS ,但它只是意味着你需要更加明确一点在扩大。 这有避免过度CSS代码膨胀的优势。

要充分伸展,只需将all关键字的extend()这是从我的原代码更新,因为我不知道的all选项):

.myclass {
  &:extend(.span3 all);
}

产生这样的:

.span3,
.myclass {
  width: 150px;
}
.someClass .span3,
.someClass .myclass {
  font-size: 12px;
}
.someOtherClass.span3,
.someOtherClass.myclass {
  background: blue;
}

这使得你的.myclass 完全等价 (在我的例子)到.span3类。 这意味着你的情况,但问题在于,你需要重新定义自举的任何动态类几代是非动态的。 事情是这样的:

.span3 {
  .span(3);
}

这是为了让:extend(.span3)会找到一个硬编码类扩展到。 这将需要为动态使用任何选择的字符串做.span@{index}添加.span3

原来的答案

这个答案假设你从一个动态生成的类需要混入特性(这就是我认为您的问题)。

好吧,我相信我发现您的问题。 首先, 引导定义.spanX一系列的类mixins.less文件 ,所以你显然需要确保你包括在你的引导装入。 不过,我想这是你有那些已经包含给定的。

主要问题

主要的问题是引导是如何产生的,现在,通过在一个循环中动态类的名称。 这是定义循环.spanX系列:

.spanX (@index) when (@index > 0) {
      .span@{index} { .span(@index); }
      .spanX(@index - 1);
 }
.spanX (0) {}

目前, 因为类名称本身正在动态生成的 ,它不能被用来作为一个混合的名字。 我不知道这是否是一个错误或仅仅是更小的限制,但我知道,在写作的现在,任何动态生成的类名不作为一个混合的名字。 因此, .span3可能在CSS代码放置在你的HTML一类,但它不是直接提供给用于混入目的访问。

修复

然而,由于他们是如何构造的代码,你仍然可以得到你所需要的,因为你可以在循环代码见上面,他们使用一个真正的mixin本身定义的代码.spanX类。 因此,你应该能够做到这一点:

.myclass {
    .span(3);
    // other rules...
}

.span(3)码是什么,循环使用填充.span3类,所以称它为你的类将给予相同的代码.span3了。 具体地引导已在此定义mixins.less该混入:

.span (@columns) {
  width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1));
  *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%);
}

所以,你会得到width为属性.span3.myclass



Answer 2:

这是很容易与Less.js完成,但真正的问题是:“我应该用我的非结构类混合结构网格类”

答案是否定的。

这是一个坏主意,网格系统的优势在于,它创建的结构造型等造型之间的关注点分离。 我不是说“它应该永远,永远,永远做”。 但总的来说,它不应该。 我甚至不喜欢看到的是:

<div class="span3 sidebar">
  <ul class="nav">
    ...
  </ul>
</div>

span3是在同一个div作为.sidebar类。 这里的问题是,现在你的侧边栏不只是“漂浮”格之列里面,它已成为电网的一部分 - 这(一般),使得它更难以维持,因为解决方法的你的风格你需要建立强制这种造型来响应。



Answer 3:

那么你可以这样做,但你必须定义.somethign第一,在这个例子中,我将做到这一点font-wight: bold;font-size 20px 。 正如你在第二类看看。体我没有定义font-weight: bold;font-size: 20px; 我只是说.something进去

.something {
    font-weight: bold;
    font-size: 20px;
}
.body {
    background-color: gray;
    border: ridge 2px black;
    .something
}

你可以在这里看到的例子。 http://jsfiddle.net/7GMZd/

你不能做这种方式

.body {
    background-color: gray;
    border: ridge 2px black;
    .something {
         font-weight: bold;
         font-size: 20px;
    }
}


文章来源: Less and Bootstrap: how to use a span3 (or spanX [any number]) class as a mixin?