Less 减:组合选择器变量
鉴于我想简化以下代码:Less 减:组合选择器变量,less,Less,鉴于我想简化以下代码: @title1: ~"h1.someclass > a"; @title2: ~"h1.otherclass > a"; @{title1},@{title2} { &:after { display: none; } } 评估结果如下: h1.someclass > a:after, h1.otherclass > a:after { display: none; } 我尝试使用 @titles: ~"@{tit
@title1: ~"h1.someclass > a";
@title2: ~"h1.otherclass > a";
@{title1},@{title2} {
&:after {
display: none;
}
}
评估结果如下:
h1.someclass > a:after,
h1.otherclass > a:after {
display: none;
}
我尝试使用
@titles: ~"@{title1},@{title2}"; // Combine selectors for easier code
@{titles} {
&:after {
display: none;
}
}
然而,这将产生不同的CSS
h1.someclass > a,h1.otherclass > a:after {
display: none;
}
这是因为变量的延迟计算吗?如果是这样,为什么它会以这种方式产生CSS?是否有一种不同的方式组合选择器变量,然后使用&:after?(几乎是从更广的范围复制粘贴) 您的尝试有两个问题:
~“h1.someclass>a”
也不过是一种黑客行为,除了极为琐碎的情况外,预计会产生副作用和未指定/未定义的行为@titles
的值就像一个简单/单一的选择器元素一样工作(例如,与body
相同)
也就是说,概括而言,应尽可能避免“基于字符串的选择器操作”(如~“@{title1},@{title2}”
),因为在较少的情况下,选择器不是字符串,字符串也不是选择器(它们也不会自动相互转换,但在某些极其琐碎的情况下除外)
到目前为止,在Less中定义可重用选择器列表的唯一非黑客方法是mixin(mixin也可以被视为“变量”,即使它们有另一种语法),该方法将任意一组规则放入具有所述列表作为其选择器的规则集中。例如,对于上面的示例,它将类似于:
@title1:~“h1.someclass>a”;
@标题2:~“h1.otherclass>a”;
.标题(@规则){
@{title1},@{title2}{@rules();}
}
//用法:
.头衔({
&:之后{
显示:无;
}
});
.(几乎从较宽的位置复制粘贴)
您的尝试有两个问题:
~“h1.someclass>a”
也不过是一种黑客行为,除了极为琐碎的情况外,预计会产生副作用和未指定/未定义的行为@titles
的值就像一个简单/单一的选择器元素一样工作(例如,与body
相同)
也就是说,概括而言,应尽可能避免“基于字符串的选择器操作”(如~“@{title1},@{title2}”
),因为在较少的情况下,选择器不是字符串,字符串也不是选择器(它们也不会自动相互转换,但在某些极其琐碎的情况下除外)
到目前为止,在Less中定义可重用选择器列表的唯一非黑客方法是mixin(mixin也可以被视为“变量”,即使它们有另一种语法),该方法将任意一组规则放入具有所述列表作为其选择器的规则集中。例如,对于上面的示例,它将类似于:
@title1:~“h1.someclass>a”;
@标题2:~“h1.otherclass>a”;
.标题(@规则){
@{title1},@{title2}{@rules();}
}
//用法:
.头衔({
&:之后{
显示:无;
}
});
.这是因为变量的延迟计算吗?-否。这是因为转义字符串(请参阅)不被视为复杂选择器(因此逗号或其他特殊操作在这里没有意义)。有关更多参考资料,请参阅。因此需要其他方法(参见第3部分的示例)。这是因为变量的惰性计算吗否。这是因为转义字符串(请参阅)不被视为复杂选择器(因此逗号或其他特殊操作在这里没有意义)。有关更多参考资料,请参阅。因此,还需要一些其他方法(例如,参见第3部分)。非常感谢您的解释。mixin的想法很好,看起来仍然很粗糙,但比(在我的例子中)有4个不同的长选择器更好:)。谢谢你的解释。mixin的想法很好,看起来仍然很粗糙,但比(在我的例子中)有4个不同的长选择器更好:)。