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

使用LESS CSS定义变量变量

经昱
2023-03-14
问题内容

假设我在网站的各个页面上使用了三种单独的配色方案。每种颜色都有浅,中和深三种色调,并且配色方案由体内的类别定义。假定默认为“红色”配色方案。像这样:

颜色定义

@red-lt:   #121;
@red-md:   #232;
@red-dk:   #343;
@green-lt: #454;
@green-md: #565;
@green-dk: #676;
@blue-lt:  #787;
@blue-md:  #898;
@blue-dk:  #909;

基本默认样式示例

body { background-color: @red-dk;
  #container { background-color: @red-md;
     p { color: @red-dk; }
  }
}

不同的配色方案样式示例

body.green { background-color: @green-dk;
  #container { background-color: @green-md;
     p { color: @green-dk; }
  }
}

我想使用变量,这样我就不必为每种方案重新编写所有的颜色变化,这样我就可以编写如下内容:

body.[color-var] { background-color: @[color-var]-dk;
  #container { background-color: @[color-var]-md;
     p { color: @[color-var]-dk; }
  }
}

…但是我不太了解如何完成这项工作。帮帮我…?


问题答案:

在选择器和参数混合中使用插值和转义,括号可获得所需的效果

  • 动态变量** 由内插:在一个串,"@{variable}"将被替换为变量的值。它们也可以嵌套:给定@{@{var}-foo}@var: bar;,结果为"barfoo"。 结果值被引用。要删除这些引号,请添加前缀~

  • 通过选择器插值动态选择[器:body.@{var}变成body.bar

例:

@red-md:   #232;
@red-dk:   #343;

.setColor(@color) {
    body.@{color} { background-color: ~"@{@{color}-dk}";
        #container { background-color: ~"@{@{color}-md}";
         p { color: ~"@{@{color}-md}"; }
      }
    }
}
.setColor(~"red"); // Escape to prevent "red" turning "#FF0000"
//.setColor(~"blue"); etc..

变成:

body.red {
  background-color: #334433;
}
body.red #container {
  background-color: #223322;
}
body.red #container p {
  color: #223322;
}

注意:最初编写答案时,选择器插值不存在。如果您正在使用旧的LESS编译器(在LESS 1.3.1a之前),请参阅上一版本的解决方案。在LESS1.4.0中将不再支持旧方法。



 类似资料:
  • 问题内容: 当我尝试使用var定义变量时,一切正常。 但是将其定义为const不能按预期工作,并且该变量未定义。 我已经在Chrome和Node.js上对其进行了测试。我想念什么吗? 先感谢您! 问题答案: 在 eval 代码中使用 let 和 const 不会调用严格模式。 let 和 const 是 lexicalDeclarations ,将它们的范围限制为封闭的词法范围。 __ __ 词法

  • 问题内容: 在jQuery的核心风格指南建议两种不同的方法来检查一个变量是否被定义。 全局变量: 局部变量: 特性: 为什么jQuery为什么对全局变量使用一种方法而对局部变量和属性使用另一种方法? 问题答案: 对于未声明的变量,将返回字符串文字,而身份检查将触发错误 “未定义foo” 。 对于局部变量(您 知道 已在某处声明),不会发生此类错误,因此进行身份检查。

  • 用户定义变量 数据库支持用户自定义变量,自定义变量使用@开头,能够被用于任何表达式和参数中。变量是不能持久的,作为范围为 session,这就意味着变量只在定义它的那个 session 里是有效的。一个变量通常使用 SET命 令来声明: SET @USER = 'Joe'; 变量也可以通过使用 SET() 方法来改变值。在查询中可以直接使用: SET @TOTAL = NULL; SELECT

  • 找到价格最高和最低的信息: mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop; mysql> SELECT * FROM shop WHERE [email protected]_price OR [email protected]_price; +---------+--------+-------+ |

  • 用户可以在Playbook中,通过vars关键字自定义变量,使用时用{{ }}引用以来即可。 Playbook中定义和使用的变量的方法 例如下面的例子中,用户定义变量名为http_port,其值为为80。在tasks firewalld中,通过{{ http_port }}引用。 --- - hosts: web vars: http_port: 80 remote_user: r

  • 问题内容: 是否可以使用webpack定义全局变量以产生如下所示的结果: 我看到的所有示例都使用外部文件 问题答案: 有几种方法可以处理全局变量: 1)将变量放入模块中。 Webpack仅对模块进行一次评估,因此您的实例保持全局状态,并在模块之间进行更改。 因此,如果您创建像a之类的东西并导出所有全局变量的对象,则可以读取/写入这些全局变量。您可以导入一个模块,从功能中对对象进行更改,然后导入另一