css - 如何忽略mixin中的传递参数

标签 css less less-mixins

我想在元素中对边框使用 Less mixin,但我经常需要使用边框的不同边,而不是全部。

我写了一个简单的mixin:

.border-all (@border; @border-type; @border-color) {
  border-top: @border @border-type @border-color;
  border-right: @border @border-type @border-color;
  border-bottom: @border @border-type @border-color;
  border-left: @border @border-type @border-color;
}

例如,是否可以仅将参数传递给 border-topborder-bottom

所以:

.class {
  .border-all (3px; double; @border-color);
}

将输出:

.class {
  border-top: 3px double #333;
  border-bottom: 3px double #333;
}

我可以忽略将参数传递给 mixin 中的不同 CSS 属性吗?

最佳答案

首先我会问你为什么需要那个 mixin。它比 border: 3px double @border-color; 有什么好处?

我宁愿使用一个临时变量,而不是为一个 mixin 做一个相当臃肿和困惑的条件逻辑,例如:

.class {
   @border: 3px double @border-color;
    border-top: @border;
    border-bottom: @border;
}

是的,它是三行代码而不是一行,但它无疑更易于维护。

---

无论哪种方式,如果我必须使用这样的 mixin,我可能会将其简化为:

// usage:

.c1 {
    .border(top right, 1px solid black);
}

.c2 {
    .border(1px solid black);
}

// impl:

.border(@sides, @value) {
    .side(length(@sides));
    .side(@i) when (@i > 0) {
        @side: extract(@sides, @i);
        border-@{side}: @value;
        .side(@i - 1);
    }
}

.border(@value) {
    border: @value;
}

因为我真的看不出在这种情况下使用所有这些多余的逗号和/或分号有什么意义。

关于css - 如何忽略mixin中的传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30933261/

相关文章:

css - 如何在 LESS 编译器中抛出错误

css - Less 中基于变量的 Mixin 守卫

javascript - React.js 包含 css

css - 在条件内设置变量

javascript - 使按钮的宽度与高度相同

javascript - 从样式组中选择 css 样式

twitter-bootstrap - 是否可以将一个类或标签别名为 SASS 或 LESS 中的另一个类或标签?

less - 在 LESS 中使用 mixin 命名参数作为伪选择器

javascript - jquery 隐藏/显示 div 故障排除

html - 在指定的 div 中启用滚动?