HTML & CSS/Sass(SCSS)

Sass(SCSS) 기초문법 1

SeaPlus 2021. 11. 28. 15:37


 

1. $변수선언

CSS 는 변수를 사용할 수 없습니다. 때문에 반복적으로 사용되는 코드를 계속해서 입력해야하고, 그 코드가 바뀌면 모든 코드를 수정해야하는 어려움이 있습니다. 하지만 Sass(SCSS)는 그 코드를 변수로 지정해 필요한곳에 사용할 수 있습니다. 이는 나중에 코드를 수정해야할 상황에서 변수의 값만 변경하면 되므로 작업이 간단해 집니다.

 

예를 들어 

$red: #fe3900

$red 라는 변수를 선언하고 사용시

/*scss*/

GNB{background-color: $red;}

CTA{background-color:$red;}

modal{background-color:$red;}

GNB, CTA, modal 세개의 요소 모두 background-color 값을 $red라는 변수를 통해 선언을 했고 나중에 $red의 컬러를 약간 조정하게 되더라도 선언된 값 #fe3900을 수정하면 한꺼번에 수정하게 됩니다.


 

 

2. @Mixin @include

@Mixin 은 SCSS 의 문법중 가장많이 사용되는 요소입니다.

@Mixin은 그룹단위의 css 스타일 코드를 변수처럼 사용할 수 있습니다. 

사용 방법은 한꺼번에 자주 사용되는 코드들을 @mixin으로 묶은뒤 @include를 통해 사용하면되는 아주 간단한 구조 입니다.

 

예를 들어

/*scss*/

@mixin text-style-12() {
  font-size: 12px;
  line-height: 16px;
  letter-spacing: -0.005em;
}

@mixin text-style-13() {
  font-size: 13px;
  line-height: 20px;
  letter-spacing: -0.01em;
}

GNB{
@include text-style-12;
}

text-style을 지정할때 같이 선언되는 font-size, line-height, letter-spacing을 @mixin 으로 묶었습니다. 

GNB 요소가 @include를 통해 2개의 @mixin중 text-style-12를 선언해 그 안에 묶여있는 font-size, line-height, letter-spacing을 적용받게 됬습니다.


 

3. @content

@content 는 @Mixin 에 정의 되어있지 않은 스타일을 추가적으로 더 넣을수 있게 합니다.

이는 @media 에서 굉장히 유용하게 작용합니다.

 

아래의 예를 살펴봅니다.

/*scss*/

@mixin responsiveDesktop {
    @media screen and (min-width: 1200px) {
      @content;
    }
}

GNB{
	color: $red;
    @include responsiveDesktop{ color:$blue;}
}

 

@mixin responsiveDesktop은 1200px 이상일때는 @content로 스타일 선언을 추가로 할수있게 만들었습니다.

결과적으로 GNB는 1200px 미만일때 색상은 $red,  1200px 이상일때는 $blue가 됩니다.


 

 

4. %(플레이스 홀더)

%(플레이스 홀더)는 mixin과 비슷하지만 인자를 받아쓸수 없고 공통적으로 사용하는 범위가 한정되어있을때 자주사용합니다. 사용할때는 @extend 문을 선언하여 사용합니다.

mixin 과의 또 다른 차이점은 mixin은 여러곳의 선택자에서 사용되더라도 그대로 컴파일 되어 나오고, %(플레이스 홀더)

는 여러곳의 선택자에서 사용되면 컴파일 이후 그 선택자들을 모두 묶어 스타일 되어 나옵니다.

 

아래 예시를 보겠습니다.

/*scss*/

%tag-base{
	height:10px;
    width:10px;
    }
    
@mixin text-style-12() {
  font-size: 12px;
  line-height: 16px;
  letter-spacing: -0.005em;
}

.tag-red{
	@include text-style-12;
    @extend %tag-base;
    color: $red;
    }
    
.tag-green{
	@include text-style-12;
    @extend %tag-base;
    color: $green;
    }

위와 같은 방법으로 플레이스홀더, mixin을 선언한뒤 둘다 .tag-red, .tag-green에 사용을 하고 컴파일을하면 어떻게 css 스타일이 적용이 될까요?

/*css*/

.tag-red{
	font-size: 12px;
	line-height: 16px;
	letter-spacing: -0.005em;
	color: $red;
    }
    
.tag-green{
	font-size: 12px;
	line-height: 16px;
	letter-spacing: -0.005em;
	color: $green;
    }
    
.tag-red, 
.tag-green{
	height:10px;
	width:10px;
    }

 

5. @import

마지막으로 import 입니다. import는 css에도 있는 구문으로서 파일들을 별도로 분리시킨후 다른 파일 에서 가져올때 사용되는 구문입니다. css 와 scss의 import구문의 가장 큰 차이점은 

 

CSS: @import 구문 호출할 때마다 HTTP요청을 추가로해 성능 저하를 야기함.

SCSS: CSS자체에 파일이 포함되어 성능저하 야기 X. 

 

이런 현상의 이유는 결과적으로 분리된 SCSS 파일 전체를 import 시킨후 하나의 덩어리진 css 로 컴파일 하기 때문입니다.

scss를 사용하면 성능저하 이슈를 해결함과 동시에 유지보수에 용이하게 파일들을 관리할수 있게 됩니다.

 

아래 예시 사진을 보면 더 쉽게 이해가 가능합니다.

3000줄 이상의 css 코드 덩어리

위 사진은 3000천줄 이상의 css 코드 덩어리 입니다. 

웹 페이지를 만들때 스타일 코드는 이처럼 몇천줄 이상이 되기 쉽상인데 이는 유지보수에 큰 어려움을 주고 이를 해결하기 위해 CSS로 @import를 하면 성능저하 이슈가 생기는 상황입니다.

스타일 코드를 scss를 사용해 분산관리후 main.scss에 import

위 사진은 scss를 사용해 스타일 코드를 module, component, constants, layout등 세부적으로 카테고리화 한뒤 그안에서 각 카테고리에 맞는 스타일 코드를 선언하고 마지막으로 main.scss 파일에 @import 했습니다.

이처럼 scss를 사용하면 몇천줄 되는 스타일코드를 카테고리화 시켜 세부적으로 관리가능하고 기존의 css에서 발생했던 성능이슈도 해결할수 있습니다.

 

 

 

 

참고:

김버그의 UI 개발 부트캠프)

 

 

'HTML & CSS > Sass(SCSS)' 카테고리의 다른 글

Sass(SCSS) 시작하기!!  (0) 2021.10.20