어쩌다 알게 된 ƪ(•̃͡•̃͡ ƪ

Sass에서 반복문(@for)과 변수로 클래스/스타일 중복 제거하기 본문

CSS/SCSS

Sass에서 반복문(@for)과 변수로 클래스/스타일 중복 제거하기

비니_ 2025. 11. 26. 11:02
728x90

 

🔖 기본 sass 방법

=> 중복으로 써야해서 코드가 길어짐

button{
	.&btn_time0{background-image:url(../../assets/img/btn_time0.png);}
    .&btn_time1{background-image:url(../../assets/img/btn_time1.png);}
    .&btn_time2{background-image:url(../../assets/img/btn_time2.png);}
    .&btn_time3{background-image:url(../../assets/img/btn_time3.png);}
}

 

 

🔖 중복을 줄이기 위해 반복문(@for) 사용

@for $i from 0 through 3{
    &.btn_time#{$i}{
        background-image:url('../../assets/img/btns/btn_time#{$i}.png');
    }
}

 

=> 이렇게 하려면 이미지 명이 명확하지 않아서(이미지 명으로만 무슨 아이콘인지 추측 불가) 밑에 방법으로!

 

🔖 반복문(@for)과 변수 사용

$btn_time_img_name:('../../assets/img/btns/btn_all_day.png', '../../assets/img/btns/btn_am_half.png', '../../assets/img/btns/btn_pm_half.png', '../../assets/img/btns/btn_direct.png');

근데 또 이름만 변수로 하기엔 같은 경로가 반복됨

이것도 줄이고 싶음!!

 

button{
    $btn_time_img_path:'../../assets/img/btns/';
    $btn_time_img_name:('btn_all_day.png', 'btn_am_half.png', 'btn_pm_half', 'btn_direct.png');

    @for $i from 0 through 3{
        &.btn_time#{$i}{
            background-image:url('#{$btn_time_img_path}#{nth($btn_time_img_name, $i)}');
        }
    }
}

 

 

에러뜸!! 왤까!!!❓🤔

 

Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
SassError: $n: List index may not be 0.

 

=> nth() 를 사용하는데 지금 i는 0부터 시작해서 nth(0)이 없으니 nth(1)부터 시작해야함

 

 

🔖 최종 코드

button{
    $btn_time_img_path:'../../assets/img/btns/';
    $btn_time_img_name:('btn_all_day.png', 'btn_am_half.png', 'btn_pm_half', 'btn_direct.png');

    @for $i from 0 through 3{
        &.btn_time#{$i}{
            background-image:url('#{$btn_time_img_path}#{nth($btn_time_img_name, $i + 1)}');
        }
    }
}


background-image:url('#{$btn_time_img_path}#{nth($btn_time_img_name, $i + 1)}');

 

완성..!!!!

 

 

 

728x90

'CSS > SCSS' 카테고리의 다른 글

[SCSS] @import 'ConfigFile';는 _ConfigFile.scss 가 불러와진다?  (0) 2025.03.29
[SCSS] @use 'sass:map';  (1) 2025.03.28
[SCSS] SCSS란?  (0) 2025.03.28
Comments