使用“&”选择器混合而不更改 HTML class
Mixin using "&" selector without changing HTML class
我想请教一个关于mixin uage的问题
我的目标是使用 mixin 根据不同的语言更改 TESTING 的字体大小。主页 class 和语言 class 必须在 HTML 标签中设置。
<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 标记中的 class 吗?
谢谢大家!
您需要解析 &
引用并使用第一个选择器与 .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
我想请教一个关于mixin uage的问题
我的目标是使用 mixin 根据不同的语言更改 TESTING 的字体大小。主页 class 和语言 class 必须在 HTML 标签中设置。
<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 标记中的 class 吗?
谢谢大家!
您需要解析 &
引用并使用第一个选择器与 .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