gpt4 book ai didi

css - 使用 SASS 通过循环嵌套选择器

转载 作者:技术小花猫 更新时间:2023-10-29 11:17:41 24 4
gpt4 key购买 nike

我有这个 HTML

<ul> // first level
<li>
<ul></ul> // second level
</li>
<li>
<ul> // second level
<li>
<ul></ul> // third level
</li>
</ul>
</li>
</ul>

是否有可能将嵌套列表一个接一个地循环,以获得类似这样的结果:

ul {
padding: 10px;
ul {
padding: 20px;
ul {
padding: 30px;
... through 10 * ul
}
}
}

有了这个,我只有列表乘法。

@for $i from 1 through 10 {
ul {
padding-left: 100 - (10 * $i) + px;
}
}

最佳答案

对于 3.4 之前的 Sass 版本,您需要执行此操作的函数不是 native Sass 的一部分(递归混合在某些版本中不起作用)。您需要名为 nest() 的 Compass 函数。

$sel: '';
@for $i from 1 through 10 {
// remove !global flag if you're using Sass < 3.3
$sel: if($i == 1, "ul", nest($sel, "ul")) !global;

#{$sel} {
padding-left: 10px * $i;
}
}

Sass 3.4 有这个函数的原生版本,叫做 selector-nest():

$sel: '';
@for $i from 1 through 10 {
$sel: if($i == 1, "ul", selector-nest($sel, "ul")) !global;

#{$sel} {
padding-left: 10px * $i;
}
}

输出:

ul {
padding-left: 10px;
}

ul ul {
padding-left: 20px;
}

ul ul ul {
padding-left: 30px;
}

ul ul ul ul {
padding-left: 40px;
}

ul ul ul ul ul {
padding-left: 50px;
}

ul ul ul ul ul ul {
padding-left: 60px;
}

ul ul ul ul ul ul ul {
padding-left: 70px;
}

ul ul ul ul ul ul ul ul {
padding-left: 80px;
}

ul ul ul ul ul ul ul ul ul {
padding-left: 90px;
}

ul ul ul ul ul ul ul ul ul ul {
padding-left: 100px;
}

如果你想拼出开头的 ul,那么你可以这样做:

ul {
// parent styles
border: 1px solid;

$sel: '';
@for $i from 2 through 10 {
$sel: if($i == 2, 'ul', nest($sel, 'ul')); // note no !global flag

#{$sel} {
padding-left: 10px * $i;
}
}
}

请注意,您可以使用简单的字符串连接而不是这些函数中的任何一个,但它只适用于您只嵌套一个选择器的情况。如果您有 2 个或更多选择器,这是绝对必要的:

$sel: '';
@for $i from 1 through 3 {
$sel: if($i == 1, "article, section", selector-nest($sel, "article, section")) !global;

#{$sel} {
h1 {
padding-left: 10px * $i;
}
}
}

输出:

article h1, section h1 {
padding-left: 10px;
}

article article h1, article section h1, section article h1, section section h1 {
padding-left: 20px;
}

article article article h1, article article section h1, article section article h1, article section section h1, section article article h1, section article section h1, section section article h1, section section section h1 {
padding-left: 30px;
}

关于css - 使用 SASS 通过循环嵌套选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22349680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com