【问题标题】:LESS CSS how to modify parent property in mixinLESS CSS如何修改mixin中的父属性
【发布时间】:2015-04-18 18:28:51
【问题描述】:

我正在寻找一种更少的语法来做这样的事情:

.button-default{
  background-color: rgb(100,200,250);
  :hover{
    .button-hover-effect-mixin();
  }
}
.button-warning{
  background-color: rgb(250,100,0);
  :hover{
    .button-hover-effect-mixin();
  }
}

.button-hover-effect-mixin(){
    background-color: darken(PARENT.background-color, 50%);
}

我知道如何使用参数或全局变量来做到这一点,但悬停效果并不总是旨在改变背景颜色。

【问题讨论】:

  • 您无法使用 LESS 定位父元素,因为您无法使用 CSS 定位父元素(LESS 预处理 CSS 并且不知道 CSS 所在的 html 上下文)。

标签: less less-mixins


【解决方案1】:

如果您的意思是.button-default.button-warning.button-hover-effect-mixin 的“父母”,那么您的朋友就是variables

.button-default {
    @background-color: rgb(100, 200, 250);
    background-color: @background-color;
    &:hover {
        .button-hover-effect-mixin();
    }
}

.button-warning {
    @background-color: rgb(250, 100, 0);
    background-color: @background-color;
    &:hover {
        .button-hover-effect-mixin();
    }
}

.button-hover-effect-mixin() {
    background-color: darken(@background-color, 50%);
}

您也可以将此变量设为.button-hover-effect-mixin 的参数。此外,不要错过:hover 附近的& 选择器(没有&,它会扩展为.button-default :hover,这可能不是您需要的,请参阅Nesting)。


而且...如果方向正确并且这些颜色是按钮之间的唯一区别,我会将整个 sn-p 重写为如下内容:

.button(default, rgb(100, 200, 250));
.button(warning, rgb(250, 100, 0));

.button(@name, @color) {
    .button-@{name} {
        background-color: @color;
        &:hover {
            background-color: darken(@color, 50%);
        }
    }
}

【讨论】:

  • 谢谢马克斯!我不知道,LESS 编译器可以从 sn-p 访问 mixin 中的这个 @background-color 变量。对我来说,解决方案是将更多属性声明为变量,以使它们在 mixin 中可访问。片段二是我所说的“不仅是背景颜色”,但无论如何也要感谢 ScottS。
  • 我只是看了代码然后想,pff,第二个例子是多么愚蠢:)
猜你喜欢
  • 2018-04-08
  • 2012-08-13
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
相关资源
最近更新 更多