css - 适当减少 CSS 提取列表

标签 css less frontend

所以我有一个参数混合 (.calculateWidth),它根据子元素宽度计算宽度。我希望这个 mixin 获取如下数据:

@heading: heading (class), none (width), 0 0 20px (padding), 0 (margin);
@imgContainer: imgContainer, 300px, 0 20px, 0;
@textContainer: textContainer, 330px, 0 20px, 0;

...并找到计算宽度所需的所有值(width1、width2、padding l/r 等)

下面是函数调用时的样子:

.calculateWidth(container, @imgContainer, @textContainer, floated);

现在我希望能够使用我想要的任何简写形式(0 20px 0 或 0 20px 等)来编写填充值,并让 .calculateWidth 正确提取它。

我遇到的问题是,这需要几个“& when”语句来捕获变量中的结果:

& when(length(@padding1) = 1) {
    @p1-l: @p1;
}
& when(length(@padding1) = 2) {
    @p1-l: extract(@p1, 2);
}
& when(length(@padding1) = 3) {
    @p1-l: extract(@p1, 2);
}
& when(length(@padding1) = 4) {
    @p1-l: extract(@p1, 4);
}

但是当我尝试使用“@p1-l”来计算宽度时,由于范围可变,它不会工作:

width: (@w1 + @p1-l + @p1-r) + (@w2 + @p2-l + @p2-r) + @m1-r;

我一直在尝试一切。任何建议将不胜感激。

最佳答案

& when 构造定义了一个规则集(不是混合),它不会将其内部变量暴露给外部范围。 IE。你需要使用一个 mixin,例如(使用任何合适的名称而不是 .-):

// ...

.-();
.-() when(length(@padding1) = 1) {
    @p1-l: @p1;
}
.-() when(length(@padding1) = 2) {
    @p1-l: extract(@p1, 2);
}
.-() when(length(@padding1) = 3) {
    @p1-l: extract(@p1, 2);
}
.-() when(length(@padding1) = 4) {
    @p1-l: extract(@p1, 4);
}

// ...

以上可以简化为:

// ...

.-(length(@padding1));
.-(1) {
    @p1-l: @p1;
}
.-(2) {
    @p1-l: extract(@p1, 2);
}
.-(3) {
    @p1-l: extract(@p1, 2);
}
.-(4) {
    @p1-l: extract(@p1, 4);
}

// ...

最后所有这些都可以简化为:

// ...

.-(length(@padding1));
.-(@i) {@p1-l: extract(@p1, @i)}
.-(1)  {@p1-l: @p1}

// ...

关于css - 适当减少 CSS 提取列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25257085/

相关文章:

javascript - 在 javascript 中,为什么 null !== undefined 是 true,但是 null == undefined 也是 true?

php - 仅在 WooCommerce 前端将小数风格化为大写

html - bootstrap 词缀在滚动时一直 float 到左侧

css - 如何将图像放在 css 中的另一个 block 上(我的意思是定位)

css - 在运行时消失的 DIV?

less - 如何为 :hover, : active, :disabled? 等状态编写更少的 mixin

html - LED灯边框

javascript - 如何防止电话号码被转换成 Skype 链接?

less - 混合属性中多个属性被视为单独的参数

css - 相对于覆盖值的字体大小