SCSS의 여러 문법들에 대해 알아본다 nesting, media query 사용하기, mixin, extends 등등을 살펴본다.
css Preprocessor (전처리기)
SASS, SCSS, Less .. 이 들은 css 전(예비)처리기이다. 즉 css 동작 전에 사용하는 기능인데 css가 주지 못하는 불편한 과정들을 이들이 도와주게 된다. 웹에서는 오직 css만 동작하므로, 보통 전처리기로 작성한 뒤, 이 파일을 css로 컴파일하는 과정을 거치게 된다.
SASS vs SCSS
SASS SASS : SCSS를 작성하는데 있어서 구조적 차이가 있고 작성이 번거롭고 복잡할 수 있다. SCSS : 기존 CSS와 유사하게 작성할 수 있어 친근하게 느껴져 배우기 쉽다.
가장 큰 차이는 {}, ; 에서 나타난다.
sass
1 2 3 4 5
//sass .box width:100px a color:red
scss
1 2 3 4 5 6 7
//scss .box{ width:100px; a{ color:red; } }
sass는 들여쓰기로 범위를 구분하고 ;을 쓰지 않는다. scss는 {}로 적용 범위를 구분하고 ;을 쓴다. css와 거의 유사한 형태이다.
공용 스타일을 범용으로 하나의 파일로 묶고, 이를 여러 sass 파일에 가져다쓸때 partial을 사용한다. 예를 들어, mixin으로 만든 코드를 여러 scss 파일에서 재 사용해야할때, 그때마다 mixin을 새로만드는것이 아니라 _mixins.scss 식으로 파일을 만들어 범용 코드를 넣어놓고, 그 파일을 import 해 불러오는 식으로 사용한다.
예제를 위해, scss폴더 안에 partial 라는 폴더를 만들어보자 현재 폴더구조는 이렇다.
partial 폴더 안에 _mixins.scss 파일을 생성하고 아까 만든 mixin 변수를 넣어준다. 앞에 _(언더스코어)를 붙이는 이유는 컴파일을 하지말라는 의미인데 이 _mixin.scss는 watiching sass를 시작해도 _mixins.css로 컴파일 되지 않는다. 어차피 이 파일을 다른 scss 파일에서 가져다 쓰기 때문에 컴파일 할 필요가 없기 때문이다. 이 규칙은 scss 뿐만이 아니라 다른 언어에서도 비슷하게 적용된다.
partial 파일을 가져올때는 @import “파일명”식으로 가져온다. 단, 앞의 언더스코어(_)와 뒤의 확장자(.scss)를 붙이지 않는다
가끔 partial파일을 import를 할 때, 스펠링등을 잘못쳐셔 실수로 없는 파일을 import 하는 경우가 있는데.. 이럴경우 자꾸 vscode에서 확장 호스트가 예기치 않게 종료되었습니다 또는 extension host terminated unexpectedly 식의 에러를 발생시키게 된다.. 그리고 자꾸 vscode가 튕기게 되고 watiching sass가 안켜지는 이상한 문제가 지속적으로 발생됐다.
어제 한참 고생했는데 결론부터 말하자면 color Highlight 확장때문에 발생한 문제였다. 왠지 모르겠지만 저 확장이랑 무언가 충돌이 나는듯하다. color Highlight 확장을 사용안함으로 설정하고 다시 로드하면 더이상 에러를 발생시키지 않는다. 그리고 저거랑 비슷한 역할을 하는 colorize라는 확장이 있다.. 저걸 설치하니 문제 해결..ㅠㅠ
어제 저거때문에 공부도 못하고 구글링 엄청 했는데 오늘 내가 유료로 듣는 인프런 강사님께서 해결책을 알려주셨다… 허무허무..ㅠㅠ
결론: 강의를 끝까지 듣자..
scss의 if 문 사용하기
scss에서도 if문을 사용할 수 있다. 예를들어, mixin 변수에 따른 다른 스타일 효과를 주고 싶을때 다음과 같이 사용할 수 있다.