- npm install -g sass
- sass scss:css
scss 파일의 이름앞에
_
를 붙이면 해당 scss파일은 컴파일 시 css로 만들어지지않는다.
이때 파일을 가져오는 @import는 해당 이름의_
는 생략해도 상관없다
즉,_
는 단지 scss에서 css로의 컴파일의 유무를 나타내기만 한다
원하는 scss파일 내용을 가져오는 역할로
@import "file경로"
형태로 사용한다.
이때 file은 경로로 하되 js의 모듈때처럼.js
를 붙이듯이.scss
를 꼭 붙일 필요는 없다.
url , css, http를 import할 경우 컴파일 결과(scss->css)로 출력되어 포함한다.
@import와 다르게 모듈화 하여 name space( 개체를 구분할 수 있는 범위를 나타내는 말)를 부여할 수 있다.
@import "./variables.scss";
.main{
$color:$primary;
background-color:$color;
border:4px solid $color;
}
@use "./variables.scss";
.main{
$color:variables.$primary;
background-color:$color;
border:4px solid $color;
}
@import
에서$primary
와 다르게@use
에서는variables.$primary
로 사용한다.
매번 이름으로만 적는것을 대처하기 위해서
as
를 사용한다.
@use "./variables.scss" as v;
.main{
$color:v.$primary;
background-color:$color;
border:4px solid $color;
}
사용이유 : A라는 파일을 import한 B를 import한 C에서 A라는 모듈화된 내용을 사용하려고 할 때
- 기본적으로 A에서 모듈화한 내용을 가진 B는 B안에서만 동작이된다.
이를 범위 밖에서도 사용하기 위해 사용한다.
_mixins
와_variables
를 @use한 your-style의 main.scss를 @use한 my-style의 main.scss를 만든 상태에서sass my-style:css
명령어를 입력
- _mixins.scss
@mixin square($size:100px){ width:$size; height:$size; }
- _variables.scss
$primary:orange; $error:red; $success:yellowgreen;
- your-style/main.scss
@use "./variables.scss" as var; @use "./mixins" as mix; @forward "./variables"; @forward "./mixins" ; .notUseInclude{ $color : var.$primary; font-size : 12px; } .useInclude{ @include mix.square } .your-style{ $color:var.$primary; color : var.$success; @include mix.square; }
- my-style/main.scss
@use "../your-style/main"; .my-style{ position:relative; border:4px solid main.$primary; @include main.square(400px); }
- css/main.css
.notUseInclude { font-size: 12px; } .useInclude { width: 100px; height: 100px; } .your-style { color: yellowgreen; width: 100px; height: 100px; } .my-style { position: relative; border: 4px solid orange; width: 400px; height: 400px; } /*# sourceMappingURL=main.css.map */
마찬가지로 as를 통해 namespace를 부여하는데 주의하여야한다.
- your-style/main.scss
@use "./variables.scss" as var; @use "./mixins" as mix; @forward "./variables" as var-*; @forward "./mixins" as mix-*; .notUseInclude{ $color : var.$primary; font-size : 12px; } .useInclude{ @include mix.square } .your-style{ $color:var.$primary; color : var.$success; @include mix.square; }
- my-style/main.scss
@use "../your-style/main"; .my-style{ position:relative; border:4px solid main.$var-primary; @include main.mix-square(400px); }
@forward에 as namespace*
를 붙여 처리한다main.$primary
는 main.$var-primary
로 $가 앞에오면서 as내용이 추가되고main.square(400px)
은 main.mix-square(400px)
으로 처리된다. @import를 통해 대상을 가져와서 처리는 하지만 중복된 충돌을 해결하기 위하여 @use를 통해 namespace로 중복된 충돌을 피했고
이러한 namespace를 좀 더 편하게 쓰기 위해 as를 통해 namespace를 직접 지정해주었다.
이러던 중 import나 use가 반복될 A->B->C의 형태로 C에서 A를 원할때 기존의 모듈의 import나 use는 이를 사용한 대상(B)에만 적용되어 문제가 발생한다.
이를 해결하기 위해 @forward를 사용하였고 이것 또한 각각의 @forward로 가져온 값이 충돌이 발생할 가능성이 있기 때문에
as 값-
를 통해 충돌을 피하였다.
전역함수는 따로
@use
를 통해 가져올 필요없이 바로 사용할 수 있고
내장모듈은@use
를 통해 필요한 메소드를 가져와서 사용할 수 있다.
@use "sass:color"
color 처리 | 전역함수 | 내장모듈 |
---|---|---|
어둡게하기 | darken | color.adjust |
밝게하기 | lighten | color.adjust |
채도 | saturate | color.adjust |
채도 | desaturate | color.adjust |
회색처리 | grayscale | color.grayscale |
대조 | invert | color.invert |
@use "sass:list"
list | 내장모듈 |
---|---|
추가 | list.append |
인덱스 | list.index |
리스트 길이 | list.length |
리스트 합치기 | list.join |
특정 리스트 값 반환 | list.nth |
- 가상클래스 : 선택자에 추가하는 키워드로, 선택한 요소의 특별한 상태에 스타일을 적용할 때 사용한다.
- 가상요소 : 선택자에 추가하는 키워드로, 선택한 요소의 일부분에만 스타일을 입힐 수 있다.
first-child의 전체에 적용한 font-weight와 달리 first-letter인 한글자에만 적용한 font-size , color를 볼 수 있다.