如何动态更改 SASS 中的 nth-child() 属性?

Posted

技术标签:

【中文标题】如何动态更改 SASS 中的 nth-child() 属性?【英文标题】:How can I dinamically change the nth-child() property in SASS? 【发布时间】:2022-01-19 18:12:59 【问题描述】:

晚上好,

我目前正在做一个设计项目,并希望得到这样的东西:Menu

为此,我在 SASS 中使用了此代码:

&:nth-child(1)
  left: 10px;

&:nth-child(2)
  left: 15px;

&:nth-child(3)
  left: 30px;

&:nth-child(4)
  left: 35px;

&:nth-child(5)
  left: 50px;

&:nth-child(6)
  left: 55px;

&:nth-child(7)
  left: 70px;

&:nth-child(8)
  left: 75px;

&:nth-child(9)
  left: 50px;

&:nth-child(10)
  left: 55px;

&:nth-child(11)
  left: 30px;

&:nth-child(12)
  left: 35px;

&:nth-child(13)
  left: 10px;

&:nth-child(14)
  left: 15px;

现在是硬编码的,如果列表中的元素数量不同,布局就不一样了。

所以我想动态地做这个,我该怎么做?

提前感谢您的帮助,

亚历克斯

【问题讨论】:

听起来你想在运行时调整布局? Sass 不会在您的网站本身上执行。它是一个 CSS 预处理器。您可能需要明确说明您想要达到的结果,并使用基于 CSS 的布局或 CSS 和 javascript 的组合。 如果我理解正确,您可以简单地创建一个循环。然后,如果存在重复模式,您可以轻松应用它,如果没有,也许您需要一个数组,其中包含要传递给属性的值。 【参考方案1】:

几个可以帮助你的例子:

如何使用模式创建一个简单的循环

@for $i from 1 through 20 
  li:nth-child(#$i) 
    left: 25px + $i * 10px; // could be anything, you need to find the pattern
  

编译为:

li:nth-child(1) 
  left: 35px;


li:nth-child(2) 
  left: 45px;


li:nth-child(3) 
  left: 55px;


li:nth-child(4) 
  left: 65px;


li:nth-child(5) 
  left: 75px;


li:nth-child(6) 
  left: 85px;


li:nth-child(7) 
  left: 95px;


li:nth-child(8) 
  left: 105px;


li:nth-child(9) 
  left: 115px;


li:nth-child(10) 
  left: 125px;


li:nth-child(11) 
  left: 135px;


li:nth-child(12) 
  left: 145px;


li:nth-child(13) 
  left: 155px;


li:nth-child(14) 
  left: 165px;


li:nth-child(15) 
  left: 175px;


li:nth-child(16) 
  left: 185px;


li:nth-child(17) 
  left: 195px;


li:nth-child(18) 
  left: 205px;


li:nth-child(19) 
  left: 215px;


li:nth-child(20) 
  left: 225px;

如何使用更复杂的模式创建循环

@for $i from 1 through 20 
    @if ($i < 11) 
      li:nth-child(#$i) 
        left: 25px + $i * 10px; // could be anything
      
    
    @else 
      li:nth-child(#$i) 
        left: (25px + (10 * 10px)) - ((11 - $i) * -1) * 10px; // could be anything
       
    

编译为:

li:nth-child(1) 
  left: 35px;


li:nth-child(2) 
  left: 45px;


li:nth-child(3) 
  left: 55px;


li:nth-child(4) 
  left: 65px;


li:nth-child(5) 
  left: 75px;


li:nth-child(6) 
  left: 85px;


li:nth-child(7) 
  left: 95px;


li:nth-child(8) 
  left: 105px;


li:nth-child(9) 
  left: 115px;


li:nth-child(10) 
  left: 125px;


li:nth-child(11) 
  left: 125px;


li:nth-child(12) 
  left: 115px;


li:nth-child(13) 
  left: 105px;


li:nth-child(14) 
  left: 95px;


li:nth-child(15) 
  left: 85px;


li:nth-child(16) 
  left: 75px;


li:nth-child(17) 
  left: 65px;


li:nth-child(18) 
  left: 55px;


li:nth-child(19) 
  left: 45px;


li:nth-child(20) 
  left: 35px;

如何从值列表创建循环

$fooList : 10px, 20px, 30px, 0px, 200px, 80px, -10px;
@for $i from 1 through length($fooList) 
    li:nth-child(#$i) 
        left: nth($fooList, $i);
    

编译为:

li:nth-child(1) 
  left: 10px;


li:nth-child(2) 
  left: 20px;


li:nth-child(3) 
  left: 30px;


li:nth-child(4) 
  left: 0px;


li:nth-child(5) 
  left: 200px;


li:nth-child(6) 
  left: 80px;


li:nth-child(7) 
  left: -10px;

【讨论】:

以上是关于如何动态更改 SASS 中的 nth-child() 属性?的主要内容,如果未能解决你的问题,请参考以下文章

利用 SASS 简化 `nth-child` 样式的生成

使用第 n 个子值作为 SASS 变量

如何使用js更改sass文件中的变量

如何使用 nth-child 更改每隔一个 wordpress 帖子的位置?

如何在反应 js 代码中动态更改 css 选择器属性值?

SASS 中的动态类名