循环遍历 SCSS 中的两个 @each 列表

Posted

技术标签:

【中文标题】循环遍历 SCSS 中的两个 @each 列表【英文标题】:Looping through two @each lists in SCSS 【发布时间】:2012-09-20 16:33:34 【问题描述】:

在我的 CSS 中,我必须创建引用“头发颜色”和“发型”的类

我写了一个 mixin 来帮助我的 CSS 写作更高效:

@mixin hair($hair, $colour) 
    .hair-#$colour .#$hair   
background:image-url("xsppsfhair#$hair#$colour.svg") center top no-repeat, 
image-url("xsppsheadgrey.svg") center top no-repeat, 
image-url("xsppsbhair#$hair#$colour.svg") center top no-repeat;





@include hair(spikyboy, blonde);    
@include hair(curlyafroboy, blonde);    

这会产生以下 CSS

.hair-blonde .spikyboy 
  background: url('../images/xsppsfhairspikyboyblonde.svg?1348681869') center top no-repeat, url('../images/xsppsheadgrey.svg?1348834673') center top no-repeat, url('../images/xsppsbhairspikyboyblonde.svg?1348682005') center top no-repeat;


.hair-blonde .curlyafro 
  background: url('../images/xsppsfhaircurlyafroblonde.svg?1348681869') center top no-repeat, url('../images/xsppsheadgrey.svg?1348834673') center top no-repeat, url('../images/xsppsbhaircurlyafroblonde.svg?1348682005') center top no-repeat;

这很好,但由于我总共有 35 种发色和发型组合,所以我最终还是有太多的@includes。

On this page,它说 SASS 有一个 @each 可以用来循环列表。还有一个例子here。但是,这两个示例都只显示循环 1 个列表。是否可以遍历两个列表?

我尝试了许多代码变体,但似乎没有一个可以工作。我认为以下内容肯定会起作用,但我只是收到一条关于 $colour 未定义的错误消息。

$hairstyle: (red, blonde, ltbrown);
$haircolour: (red, blonde, ltbrown);

    @each $hair in $haircolour, $colour in $haircolour 
    .hair-#$colour .#$hair  
background:image-url("xsppsfhair#$hair#$colour.svg") center top no-repeat, 
image-url("xsppsheadgrey.svg") center top no-repeat, 
image-url("xsppsbhair#$hair#$colour.svg") center top no-repeat;
    

    .girl.hair-#$colour #eyelash 
        background: image-url("xsppseyelash#$colour.svg") center top no-repeat;
    

有人可以指点一下我做错了什么吗?

【问题讨论】:

【参考方案1】:

你需要做的是在第一个循环中创建一个循环(我已经简化了一点,以便更容易看到):

@mixin style-matrix($colors, $styles) 
    @each $s in $styles 
        @each $c in $colors 
            .#$s .#$c 
                background:image-url("xsppsfhair-#$s-#$c.svg");
            
        
    


$colors: blonde, brunette, auburn;
$styles: beehive, pixie, bob;
@include style-matrix($colors, $styles);

你得到这个输出:

.beehive .blonde 
  background: image-url("xsppsfhair-beehive-blonde.svg");


.beehive .brunette 
  background: image-url("xsppsfhair-beehive-brunette.svg");


.beehive .auburn 
  background: image-url("xsppsfhair-beehive-auburn.svg");


.pixie .blonde 
  background: image-url("xsppsfhair-pixie-blonde.svg");


.pixie .brunette 
  background: image-url("xsppsfhair-pixie-brunette.svg");


.pixie .auburn 
  background: image-url("xsppsfhair-pixie-auburn.svg");


.bob .blonde 
  background: image-url("xsppsfhair-bob-blonde.svg");


.bob .brunette 
  background: image-url("xsppsfhair-bob-brunette.svg");


.bob .auburn 
  background: image-url("xsppsfhair-bob-auburn.svg");

【讨论】:

以上是关于循环遍历 SCSS 中的两个 @each 列表的主要内容,如果未能解决你的问题,请参考以下文章

SCSS @each 循环可以包含多个地图吗?

jquery中each遍历对象和数组

PHP 数组遍历方法大全(foreach,list,each)

scss 使用@each映射列表中的项目

急! jquery $.each 嵌套循环遍历

jQuery中的工具