코딩 기록/Sass [SCSS]

Sass[SCSS] 기초 이론 2 - 변수(Variables) 알아보기 & 사용하기 (전역변수, 지역변수, 재할당 등)

kimyang-Sun 2023. 2. 2. 21:21

Sass

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
}