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

在LESS CSS中动态定义变量

斜烈
2023-03-14
问题内容

我试图通过实际分配变量的组合名称来创建一个可在LESS CSS中动态定义变量的混合模块。

简化的用例(不是真正的用例):

.define(@var){
    @foo{var}: 0;
}

然后人们会这样称呼mixin:

.define('Bar'){
    @fooBar: 0;
}

由于使用选择器名称时可以进行这种字符串内插,因此我想知道变量名称是否也可以使用;到目前为止,我对尝试过的各种语法都没有运气(除上述语法外,我尝试了转义,引用,使用~前缀等等)。

编辑

我又尝试了另一件事,我觉得自己可能会接近。但是我遇到了LESS语法的奇怪问题。如果我这样写:

.define(@var){
    #namespace {
         @foo: @var;
    }
}

然后这样称呼它:

.define(0)

然后@foo,我可以以通常的 命名空间 方式使用:

.test {
     #namespace;
     property: @foo; /* returns 0 */
}

但是,对于插入字符串的选择器,这并不适用:

.define(@var, @ns){
    #@{ns} {
         @foo: @var;
    }
}

.define(0, namespace);

.test {
     #namespace;
     property: @foo;
}

上面的代码给我以下错误:

名称错误:#namespace未定义

但是,字符串插值成功且有效。事实上,如果我.test删除该部分并修改上面的内容以输出测试属性,则可以看到CSS解析正确。我的意思是:

.define(@var, @ns){
    #@{ns} {
         @foo: @var;
         prop: @foo;
    }
}

.define(0, namespace);

输出以下CSS:

#namespace {
    prop: 0;
}

问题答案:

这无法完成

LESS当前无法实现您想要做的事情。 如果您提前知道要允许使用哪些变量名 (换句话说,不是完全动态的),我可以想到两种可能的“解决方法
。然后可以执行以下操作之一:

想法#1(变量)

.define(@var) {
  @fooBar: 0;
  @fooTwo: 2;
  @fooYep: 4;

  @fooSet: 'foo@{var}';
}

.define(Two);
.test {
  .define(Bar);
  prop: @@fooSet;
}
.test2 {
  prop: @@fooSet;
}

想法2(参数混合)

.define(@var) {
  .foo() when (@var = Bar) {
    @fooBar: 0;
  }
 .foo() when (@var = Two) {
    @fooTwo: 2;
  }
 .foo() when (@var = Yep) {
    @fooYep: 4;
  }
  .foo();
}

.define(Two);
.test {
  .define(Bar);
  prop: @fooBar;
}
.test2 {
  prop: @fooTwo;
}

CSS输出(两个想法都适用)

.test {
  prop: 0;
}
.test2 {
  prop: 2;
}

结论

但是我不确定它是否真的有用,也不知道它在您的实际用例中是否可以有任何实际的应用程序(因为您提到的不是真正的用例)。如果要在LESS中使用完全动态的变量,则不能通过LESS本身来完成。



 类似资料:
  • lesscss-python 是 Less CSS 的 Python 版本。

  • 注意:用户界面已经在 Dreamweaver CC 和更高版本中做了简化。因此,您可能在 Dreamweaver CC 和更高版本中找不到本文中描述的一些选项。有关详细信息,请参阅此文章。 不通过编写 SQL 来定义记录集 您不需要手动输入 SQL 语句就可以创建记录集。 在“文档”窗口中打开要使用记录集的页面。 选择“窗口”>“绑定”以显示“绑定”面板。 在“绑定”面板中,单击加号 (+) 按钮

  • 问题内容: 有人可以解释一下使用之间的区别吗 和 也许彼此之间有好处? 我到处都使用变量,甚至在每个页面都包含的配置类型文件中,我仍然使用变量,因为我不明白为什么要使用define方法。 问题答案: DEFINE使常量,并且常量是全局的,可以在任何地方使用。它们也不能重新定义,可以是哪个变量。 我通常将DEFINE用于Configs,因为事后没有人可以将其弄乱,而且我可以在没有全局关联的情况下在任

  • 正如我们已经描述过的,模板可以使用在数据模型中定义的变量。 在数据模型之外,模板本身也可以定义变量来使用。 这些临时变量可以使用FTL指令来创建和替换。请注意每一次的 模板执行 工作都维护它自己的私有变量, 同时来渲染页面。变量的初始值是空,当模板执行工作结束这些变量便被销毁了。 可以访问一个在模板里定义的变量,就像是访问数据模型根root上的变量一样。 这个变量比定义在数据模型中的同名参数有更高

  • 问题内容: 在我的 Dockerfile中 ,我想 定义 稍后 可以 在Dockerfile中使用的变量 。 我知道该指令,但是我不希望这些变量是环境变量。 有没有一种方法可以 在Dockerfile范围内声明变量 ? 问题答案: 您可以使用-请参阅https://docs.docker.com/engine/reference/builder/#arg 该指令定义了一个变量,用户可以在构建时使用

  • 有没有一种方法可以在Dockerfile范围声明变量?