当前位置: 首页 > 面试题库 >

Less and Bootstrap:如何使用span3(或spanX [任何数字])类作为mixin?

邓昀
2023-03-14
问题内容

是否可以span3在mixin中添加类以避免将其放在HTML的每个元素中?就像是:

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

编辑

抱歉,我忘记指定一个重要的细节:这span3是Bootstrap的标准类。我在Bootstrap框架的任何文件中都找不到它的定义。


问题答案:

新答案(要求LESS 1.4.0)

您真正想要的是在LESS和SASS术语中_扩展的_
东西。例如,您需要一个HTML元素(仅作为示例)…

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

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

这是一个例子。假定此初始LESS代码( 不像.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

原始答案

该答案假定您希望 从动态生成的类中 混合 属性(这就是我认为的问题所在)。

好的,我相信我发现了您的问题。首先,bootstrap定义了文件中的.spanX一系列类mixins.less,因此显然您需要确保将其包含在bootstrap负载中。但是,我想假设您已经包含了这些内容。

主要问题

主要问题是引导程序如何通过循环中的动态类名立即生成那些引导程序。这是定义.spanX系列的循环:

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

当前, 由于类名称本身是动态生成的
,因此不能用作混合名称。我不知道这是Bug还是LESS的局限性,但我确实知道,在撰写本文时,任何动态生成的类名称都不能用作混合名称。因此,.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



 类似资料:
  • 问题内容: 我使用引导程序,并试图像这样将div(span7)居中: 我的CSS代码是: 但这并不是中心。如何设置中心? 编辑 现在在Bootstrap 4中 问题答案: Twitter的引导程序类浮动在左侧,因此它们不会以通常的方式居中。因此,如果您希望它居中,只需将其添加到规则中即可。 CSS

  • 问题内容: 我是将ES6类与React结合使用的新手,以前我一直将我的方法绑定到当前对象(如第一个示例所示),但是ES6是否允许我将类函数永久地绑定到带有箭头的类实例上?(在作为回调函数传递时很有用。)当我尝试使用CoffeeScript尝试使用它们时,会出现错误: 这样,如果我要传递给,例如,它将仅限于类实例,而不是对象。 问题答案: 您的语法略有不同,只是在属性名称后缺少等号。 这是一项实验功

  • 问题内容: 我有两个数字,我想将它们一起用作密钥。目前,我正在串联它们的字符串表示形式。例如,假设键号是4和12。我使用: 该地图声明为。 我认为这太糟糕了!我喜欢使用a以外的其他键作为键!我想要创建这些密钥的最快方法。 谁有个好主意? 问题答案: 创建一个包含两个数字的对象,并将其用作键。例如: 如果您喜欢数学方法,请参见此StackOverflow答案。

  • 问题内容: 具体来说,我正在尝试使用字符串任意过滤ORM。我已经尝试过exec和eval解决方案,但是我遇到了麻烦。下面的代码不起作用,但这是我知道如何解释我要去的地方的最好方法 问题答案:

  • 问题内容: 我有以下查询。如何保持撇号()完整而不被替换 为其他字符我也想处理其他字符,例如 输出: 谢谢。 问题答案: 您可以特别使用utl_i18n软件包和unescape_reference()函数。这是一个例子: 结果:

  • 问题内容: 什么正则表达式模式需要我传递给 拆分成字符串使用的所有空格字符(子字符串数组,等)作为分隔符? 问题答案: 某些东西 这会将所有空白分组为分隔符。 因此,如果我有字符串: 这将产生字符串并省略和之间的空白。 正如VonC指出的那样,应该转义反斜杠,因为Java首先会尝试将字符串转义为特殊字符,然后将其发送给解析。你想要的是字面量,这意味着你需要通过。可能会造成一些混乱。 在相当于。