이번 포스트에서는 모듈의 재사용을 위한 @use 룰의 사용법에 대해 알아보자. @use는 크게 2가지 용법으로 사용된다.
여러 stylesheet에 선언된 css들을 하나로 합쳐서 사용할 때
@use의 첫 번째 용도는 여러 stylesheet에 선언된 css들을 하나로 합쳐서 사용하는 경우이다. basic 경로에 미리 작성된 _code.scss와 _lists.scss 파일이 있다고 생각해보자.
그리고 이 2개의 파일은 06_use.scss에서 사용하려는 경우 @use가 사용된다.
_code.scss와 _lists.scss는 모두 순수하게 css 로만 구성되어있다. 이를 가져오는 use.scss의 결과는 다음과 같다.
code {
padding: 0.25em;
line-height: 0;
}
ul,ol {
text-align: left;
}
ul ul, ul ol, ol ul, ol ol {
padding-bottom: 0;
padding-left: 0;
}
_list.scss의 내부 css에서 & & 즉 외부 선택자 2개가 사용되었는데 외부 선택자는 ul또는 ol 이기 때문에 ul ul 또는 ul ol 또는 ol ol 또는 ol ul 이 가능하다. 복잡. ㅜㅜ
다른 scss 파일에 선언된 module 로드
@use를 이용한 module 로딩
다른 stylesheet에 선언된 minin, function, variable등 모듈을 로딩하기 위해서도 @use가 사용될 수 있다.
@use <module_url> [as <namespace>]
가져온 모듈은 기본적으로 module_url의 마지막 component 이름을 namespace로 사용할 수 있다. 하지만 변수 명으로 사용할 수 없는 경우는 명시적으로 namespace를 지정해야 한다. 그냥 언제나 명시적으로 namespace를 지정하는 것이 명확해 보인다.
간혹 참조되는 stylesheet에 초기화 변수가 사용되는 경우도 있다. 이를 위해서 !default flag를 이용한다. 즉 stylesheet 자체를 마치 함수처럼 사용는 것이다. !default는 "현재값은 기본 값이고 사용되면서 바뀔 수 있다" 라는 정도로 해석할 수 있다.
다음은 _library.scss 파일에 black, box-shadow라는 이름의 변수를 선언한 예이다.