Sass[SCSS] 기초 이론 2 - 변수(Variables) 알아보기 & 사용하기 (전역변수, 지역변수, 재할당 등)
Sass[SCSS] 기초 2 - 변수(Variables) 알아보기 & 사용하기 (전역변수, 지역변수, 재할당 등)
우선 Scss에서 가장 많이 쓰는 기능중 하나인 변수입니다.
일반 css에서도 변수 선언 방법이 있는데 바로 :root 가상 클래스입니다.
:root {
--main-color: skyblue;
--basic-padding: 5px 15px;
}
이런식으로 --main-color 와 --basic-padding 의 변수를 미리 설정해두고
.button {
background-color: var(--main-color);
padding: var(--basic-padding);
}
이런식으로 사용합니다.
Scss에서도 문법 방식은 다르지만 이와 마찬가지로 비슷하게 사용됩니다.
/* 변수 선언 (Variables) */
$red: rgb(241, 72, 72);
$blue: rgb(49, 102, 247);
$green: rgb(54, 204, 86);
.item-list {
display: flex;
list-style: none;
gap: 15px;
.item {
.item-button {
padding: 5px 10px;
border: none;
border-radius: 6px;
font-size: 16px;
color: #fff;
cursor: pointer;
&.red {
background-color: $red; /* 변수 사용 */
}
&.blue {
background-color: $blue; /* 변수 사용 */
}
&.green {
background-color: $green; /* 변수 사용 */
}
}
}
}
Scss는 $red, $blue, $green 이런식으로 변수명 앞에 $를 붙혀줍니다.
그리고 아래에서 css에 대한 값으로 $red, $blue, $green 이렇게 넣어주기만 하면 됩니다.
변수명을 지정할때 주의할 점이 있는데
$-color: red; // - (대시&하이픈) 가능
$_padding: 20px 25px; // _ (언더바) 가능
$+padding: 20px 25px; // 특수문자 오류
$2color: red; // 숫자 오류
변수명 가장 앞에 특수문자를 사용하려면 - (대시&하이픈), _ (언더바) 이거 두개만 사용할 수 있고 나머지는 전부 오류가 발생합니다.
앞에 숫자를 사용해도 마찬가지로 컴파일시 오류가 발생해요.
그냥 맘편하게 변수를 사용하려면 특수문자나 숫자등을 쓰지 않고 일반 영문으로 변수명을 지정하면 될 것 같네요. :)
굳이 사용하고 싶으면 대시나 언더바를 사용하도록 해요.
아래는 컴파일된 결과물과 적용된 화면입니다. 컴파일된 코드를 보면 변수 자체는 컴파일되지 않습니다. (변수 선언이라는 주석아래 바로 .item-list에 대한 css가 나옴)
다만 변수가 사용된 값에 직접 들어가있는걸 확인할 수 있어요.
@charset "UTF-8";
/* 변수 선언 (Variables) */
.item-list {
display: flex;
list-style: none;
gap: 15px;
}
.item-list .item .item-button {
padding: 5px 10px;
border: none;
border-radius: 6px;
font-size: 16px;
color: #fff;
cursor: pointer;
}
.item-list .item .item-button.red {
background-color: rgb(241, 72, 72); /* 변수 사용 */
}
.item-list .item .item-button.blue {
background-color: rgb(49, 102, 247); /* 변수 사용 */
}
.item-list .item .item-button.green {
background-color: rgb(54, 204, 86); /* 변수 사용 */
}
추가로 변수에 이미지 경로를 지정해서 사용할수도 있습니다.
$image-url: "../images/";
.image-list {
display: flex;
list-style: none;
gap: 15px;
.image {
width: 200px;
height: 200px;
background-repeat: repeaet;
background-position: center center;
background-size: cover;
&:nth-child(1) {
background-image: url($image-url + "item_img01.jpg");
}
&:nth-child(2) {
background-image: url($image-url + "item_img02.jpg");
}
&:nth-child(3) {
background-image: url($image-url + "item_img03.jpg");
}
}
}
좀 더 심화해서 알아보자면 변수를 선언할때 선택자 안에서 선언하여 지역변수로 지정할 수 있는데 지역변수를 바깥에서 사용하면 오류가 발생합니다.
.name {
$text-color: darkorange; // 지역변수 선언
strong {
color: $text-color; // 지역변수 사용
}
}
.desc {
span {
color: $text-color; // 지역변수를 바깥에서 사용
}
}
잘못된 사용 방법의 예시입니다. 평소에 실무에서 사용을 할때는 주로 전역변수를 사용하고 특별한 경우를 제외하면 지역변수를 잘 사용하진 않습니다.
특별하게 지역변수를 바깥에서 사용해야할 경우에는 !global로 전역변수화 시켜줄 수 있습니다.
.name {
$text-color: darkorange !global; // !global 전역변수
strong {
color: $text-color; // global 전역변수 사용
}
}
.desc {
span {
color: $text-color; // global 전역변수를 바깥에서 사용
}
}
마지막으로 Scss에서의 변수도 자바스크립트의 변수와 같이 재할당이 가능합니다. 아래는 예시 코드입니다. :)
$main-color: rosybrown; // 변수선언
$main-color: brown; // 변수값 재할당
$sub-color: $main-color; // 변수에 변수값 할당
p {
color: $main-color; // brown
background-color: $sub-color // brown
}