【问题标题】:Use selector name as variable in LESS mixin在LESS mixin中使用选择器名称作为变量
【发布时间】:2013-06-21 12:50:26
【问题描述】:

我正在尝试在 LESS 中创建一个 mixin,它将使用它的选择器名称作为混合中的变量。 mixin 应该看起来像这样,但我找不到它的确切语法,或者它是否可能:

.bg{
 background-image: url('images/@{SELECTORNAME}.png');
}

#header{
  .bg;
}

结果:

#header{
    background-image: url('images/header.png');
}

我认为这是不可能的,而且如果选择器是这样的会发生什么:

div#menu ul li

这实际上行不通,但也许有人知道替代方案,无论这在任何其他预处理器中都是可能的。

谢谢!

【问题讨论】:

  • 你不应该在 CSS 选择器中使用 ID
  • @koningdavid:这是关于如何使用 CSS 的哲学立场,我碰巧不同意这个立场。在 CSS 选择器中使用 ID 有一些有效的情况。

标签: css less


【解决方案1】:

您无法“读取”选择器名称。

但是,您可以构建选择器,以在 mixin 中与文件名链接,如下所示:

.buildSelectorConnection(@selectorName, @pre: ~'') {
  @{pre}@{selectorName} {
     background-image: url('images/@{selectorName}.png');
  }
}

.buildSelectorConnection(header, ~'#');
.buildSelectorConnection(do-a-class, ~'.');

CSS 输出

#header {
  background-image: url('images/header.png');
}
.do-a-class {
  background-image: url('images/do-a-class.png');
}

但是,如果你想让这样的东西能够处理像div#menu ul li 这样的东西,那么它需要更多的逻辑、你的决策和一些 javascript 编码,其中生成的实际文件名是什么喜欢div-menu-ul-li.png

不过……

可以这样做:

.buildSelectorConnection(@selectorName, @pre: ~'', @post: ~'') {
  @{pre}@{selectorName}@{post} {
     background-image: url('images/@{selectorName}.png');
  }
}

.buildSelectorConnection(menu, ~'div#', ~' ul li');

CSS 输出

div#menu ul li {
  background-image: url('images/menu.png');
}

这基本上可以让您构建任何选择器字符串,但文件名本身将只是传入的初始选择器,它需要对文件名有效。

【讨论】:

【解决方案2】:

是的,LESS 刚刚在 1.4.0 中引入了扩展功能。

在此处查看此问题的答案:Does LESS have an "extend" feature?

【讨论】:

  • extend 似乎不是我正在寻找的功能。据我了解,extend 扩展了先前定义的 mixin,创建了另一个具有附加 CSS 属性的可用 mixin。
猜你喜欢
  • 2012-11-12
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 2018-12-07
  • 1970-01-01
  • 2014-10-28
  • 2023-04-02
相关资源
最近更新 更多