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

更少的js:Mixin属性作为另一个mixin的参数?

姬旭
2023-03-14
问题内容

如何创建一个使用嵌套mixin属性作为参数的mixin?

我用下一个示例解释自己。

我有一个“过渡属性”混合:

.transition-property (@props){
  -webkit-transition-property: @props;
  -moz-transition-property: @props;
  -o-transition-property: @props;
  transition-property: @props;
}

从这个mixin我想使用一个’transform’mixin属性,所以我试图这样称呼:

 .transition-property(~"opacity, .transform");

‘.transform’mixin应该返回以下值之一:

 transform
 -ms-transform
 -webkit-transform

问题是我找不到将这些属性名称注入“过渡属性” mixin的方法,有人可以对此有所了解吗?

最终所需的CSS

element {
  -webkit-transition-property: opacity, -webkit-transform;
  -moz-transition-property: opacity, -moz-transform;
  -o-transition-property: opacity, -o-transform;
  transition-property: opacity, transform;
}

问题答案:

好的,首先,有个一般性的评论:使用CSS预处理器(例如LESS,SASS或其他任何东西)生成供应商前缀实际上是当今滥用最大的方法之一(确实,不需要用前缀和浪费来充实您的代码)您需要花费时间编写此类mixin,因为出现了诸如Autoprefixer,-prefix-free之类的工具。

不管哪种方式,这都是(多种)通用解决方案(但考虑到代码量及其复杂性,我认为这实际上是一个矫kill过正的方法,在这里,我将使用LESS1.6.0示例,因为在早期版本中,它会变得更加冗长而笨拙):

// usage:

element1 {
    .vendorize(transition-property; opacity, transform);
}

element2 {
    .vendorize(transition-property; width, box-shadow, color);
}

element3 {
    .vendorize(transition-property; height);
}

// implementation:

// prefixes we want to be used:
@prefixes: -webkit-, -moz-, -o-, ~'';

// here we specialize what values are to be prefixed:
.vendorize-value(transform)  {.true}
.vendorize-value(box-shadow) {.true}
// etc.
.vendorize-value(...) when (default()) {.false} // to handle not prefixed values

// and now the mixin that can apply all of above specializations:
.vendorize(@property, @values) {

    .-1();
    .-1(@i: length(@prefixes)) when (@i > 0) {
        .-1((@i - 1));
        @prefix: extract(@prefixes, @i);
        .-2();
    }

    .-2(@j: length(@values)) when (@j > 0) {
        .-2((@j - 1));
        @value: extract(@values, @j);
        .vendorize-value(@value);
    }

    .false() {@{prefix}@{property}+: @value}
    .true()  {@{prefix}@{property}+: ~'@{prefix}@{value}'}
}

(当然,如果您 transform需要加上前缀,但看起来仍然太疯狂,则可以简化一下)。

upd:修复了一些错误。



 类似资料:
  • 问题内容: 我尝试建立一些通用的边距/填充混合… 这是我的代码: 某些事情不正确,所以我想知道是否可以将一些CSS属性设置为mixin值吗?有人可以帮忙吗? 问题答案: 如果要使用变量作为属性名称,则需要使用 字符串插值 - 。 所以这应该工作: 只需注意: 对于属性选择器… 也将适用于其中的属性选择器 …因此也许您应该重新考虑一下。

  • 描述 (Description) 每当mixin在另一个mixin中定义时,它也可以用作返回值。 例子 (Example) 以下示例演示了mixin inside mixin中使用mixin inside mixin的LESS文件 - <html> <head> <link rel = "stylesheet" href = "style.css" type = "text/cs

  • 这是我的代码: 我想将的值设置为,我该怎么做?我试过,

  • 我试图创建一个类来保存数量可变的项(它们本身就是另一个类对象)。 我有第二课: 然后类1包含类2的数组: 我想做的是: 第一行设置myQuotes。Curr是没有问题的,但是当我试图在数组中设置一个值时,下一行错误与运行时91对象变量或块变量未设置 有没有关于我做错了什么以及如何设置类数组中元素的值的指针? 提前谢谢!

  • 问题内容: 因此,我最近开始涉足OOP,到目前为止一切进展顺利。虽然我本身没有任何问题,但我希望有一个令人惊奇的功能,尽管我找不到关于该功能的任何文档。 在为对象分配属性时,我经常发现我必须更改依赖于他人的属性,例如光明与黑暗。这是一个例子: 现在,尽管这很酷,但我想要的是相同的过程,但是如果一个属性发生更改,则在同一对象内。如果我重置光的属性(是的),我希望黑暗相应地增加/减少。如果可以更改光的

  • 一些maven插件有一个“encoding”参数,该参数有一个与之关联的属性,还有一个默认值,也是一个属性。 看起来这两个属性执行相同的操作: 这种冗余有什么原因吗?插件参数的“用户属性”属性和同一参数的“默认”属性之间有区别吗?