我想问一个关于mixin uage的问题
我的目标是使用mixin根据不同的语言更改TESTING的字体大小。必须在HTML标记中设置Home类和语言类。
<html class='Home en'>
<body>
<div class='text'>TESTING</div>
</body>
</html>
CSS设置
.Home {
.text {
@include font(20)
}
}
我根据不同的语言编写了一个mixin来处理字体大小
@mixin font($size) {
font-size: $size + px;
.en & {
font-size: $size - 5 + px;
}
}
但是,输出将变为:.en .Home .text {...}而不是.en.Home .text {...}
如何使用mixin处理此案例?或者我可以使用任何其他替代方法来修复此问题,而无需更改HTML标记中的类吗?
全部谢谢!
答案 0 :(得分:2)
您需要解析&
引用并使用第一个选择器与.en
连接,然后获取选择器的其余部分以构建完整选择器。 &
是包含所有父选择器的列表列表,因此您可以使用Sass列表函数迭代列表。
尝试以下方法:
@mixin font($size) {
font-size: $size + px;
// Get the first parent selector, to aply the '.en'
$root: nth(nth(&, 1), 1);
// Get all the other parent selectors
$rest : ();
@for $i from 2 through length(nth(&, 1)) {
$rest: append($rest, nth(nth(&, 1), $i));
}
// Create the selector
$selector: unquote(".en#{$root} #{$rest}");
// Print it at root
@at-root #{$selector} {
font-size: $size - 5 + px;
}
}
检查工作代码here