[CSS] SCSS
SCSS는 CSS Preprocessor(전처리기)라 불리며 CSS의 기능을 확장한 언어이다.
CSS 문법과 유사하며 선택자의 중첩, 조건문, 반복문, 단위연산 등 표준 CSS보다 많은 기능을 제공한다.
-
공식사이트 : https://sass-lang.com/
SCSS는 CSS 전처리기( preprocessor )인 SASS의 Version 3에서 생겨난 언어로 문법이 CSS와 유사하여 사용이 용이하고 CSS와의 호환성도 좋다. 때문에 사용자 수도 SCSS 쪽이 더 많고, 다수의 프레임워크, 라이브러리들도 SCSS의 문법을 활용하고 있다.
우리가 리액트에서 사용하는 Styled-component는 또한 SCSS 라이브러리 없이 SCSS 문법을 사용할 수 있다.
사용하기
-
변수 ( Variables )
우리가 알고 있는 Number, String, Boolean, Null과 List, Map, Color 의 자료형을 지원한다.
-
Color : 색상변수
red
,#FFFFFF
,rgba(255, 255, 255, 1)
- List : 공백이나 쉼표로 구분되는 배열
(a, b, c), d
- Map : key:value 형태의 배열
(a:apple, b:banana, c:coconut)
$pointColor: #390093; // $변수명: 값 → 변수선언 div{ background-color: $pointColor; // 변수사용 }
※ 지역변수 / 전역변수 개념을 지원한다. 즉, 스코프
{}
내에서 선언된 변수는 스코프 밖에서는 사용할 수 없다.※ 템플릿 리터럴과 비슷한 개념의
${}
를 지원한다.$fileName: unquote("bg.png"); div { background-image: url(http://abc.com/imgs/#{$fileName}); // ▶ #{$fileName} 부분이 bg.png로 치환된다. }
-
-
재활용 ( Mixins )
CSS스타일을
@mixin
으로 정의하고@include
로 변수와 같이 재사용이 가능하다. ( 특정 스타일 자체를 변수처럼 사용하는 기능 인 것 같다 )// 선언 @mixin blackBox{ background-color: #000000; font-size: 1rem; color: yellow; &:hover{ background-color: #888888; } } // 사용 div { @include blackBox; }
-
함수 ( Function )
함수를 정의하여 사용할 수 있다.
$n_scale: 0.8 @function f_scale($n_width, $n_scale){ @return $n_width * $n_scale } div{ width: f_scale(150) }
-
연산자 ( Operation )
+, -, *, /, % 연산자를 지원한다.
-
중첩 ( Nesting )
-
셀렉터를 중첩하여 사용할 수 있다.
div { width:100px; .like{ border: 1px solid #ffffff; li{ font-size: 1rem; } } &:hover{ background-color: #000000; } }
위 예제와 같이 CSS에서
div .like {}
,div .like li {}
,div:hover {}
로 분리작성해야하는 부분을 중첩하여 사용이 가능하게 하여 보다 직관적인 표현이 가능해진다.&
키워드는 부모 선택자로 치환된다. 컴파일 시 치환되는 원리이므로 아래와 같이 사용도 가능하다..textBox{ &-small{ font-size: 0.7rem; } &-big{ font-size: 1.2rem } }
위 코드는 각각
textBox-small
,textBox-big
으로 사용된다. -
속성의 상위 요소를 참조할 수 있다.
div { font: { size: 1rem; weight: bold; family: Verdana; } }
각각
font-size
,font-weight
,font-family
로 작성되어야하는 코드의 상위요소인font
를 생략시킨다.
-
-
조건 ( Condition )
if(조건문, 참일 경우 반환값, 거짓일 경우 반환값)
@if 조건문 { 참일 경우 반환값 } @else if 조건문 { 참일 경우 반환값 } @else { 나머지 반환값 }
-
반복 ( Loop )
@for $i from 1 through 10 { // 1부터 10까지(10포함)반복 } @for $i from 1 to 10{ // 1부터 10까지(10제외)반복 }
-
반복 ( Each )
List와 Map 데이터를 반복할 때 사용한다.
@each $반복문에서 사용할 변수명 in 배열{ // 반복할 내용 } @each $반복문에서 키를 받아올 변수명, $값을 받아올 변수명 in 배열 { // 반복할 내용 }
-
내장함수 ( Built-In-Modules )
공식문서 내 Documentation 참조
출처
- https://heropy.blog/2018/01/31/sass/
- https://seokzin.tistory.com/entry/SCSS-SCSS-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC
####