SCSS(Sass) 사용하기
1. 개요 https://sass-lang.com/
Sass와 SCSS는 CSS를 위한 Preprocessor Language이다.
CSS에 없는 variables, nested rules, mixins등 CSS를 유지관리하기에 편리한 기능을 가지고 있다.
Sass와 SCSS는 문법적인 차이가 있다. SCSS가 기존 CSS와 더 유사하다.
Sass는 확장자가 .sass인 오리지널 Sass 문법과 .scss인 SCSS (Sassy CSS) 문법 두 가지 형식을 모두 지원합니다.
이 두 문법은 기능적으로 동일하며, 구문 차이만 있다. 기본적으로 SCSS 문법을 사용하는 것이 일반적이고, 더 널리 사용되고 있습니다.

Sass는 현재 3 버전까지 출시되었습니다. 각 버전은 다음과 같습니다:
Sass 1: 초기 버전으로, 2006년에 처음으로 공개되었습니다. Ruby 기반으로 동작하며, 들여쓰기를 사용한 오리지널 Sass 문법을 사용한다.
Sass 2: 2007년에 출시되었습니다. 이 버전에서는 여러 개의 .sass 파일을 컴파일하거나 컴파일된 CSS를 결합하는 기능 등이 추가되었다.
Sass 3: 2010년에 출시되었으며, 가장 널리 사용되는 버전입니다.
이 버전에서는 .scss 확장자를 가진 SCSS 문법이 도입되었습니다. SCSS는 CSS와 거의 동일한 문법을 가지고 있어
기존의 CSS 코드를 쉽게 Sass로 변환할 수 있게 되었습니다. 또한, Sass 3에서는 변수, 중첩 규칙, 믹스인, 상속 등과 같은 다양한 기능을 포함하여
스타일 시트 작성을 더욱 편리하게 만들어 주었습니다.
[정리] SCSS는 Sass 3 버전부터 도입된 문법 형식 중 하나로 Sass 3 버전 이상을 사용하면 SCSS 문법을 활용할 수 있다.
SCSS는 CSS와 거의 동일한 문법을 가지고 있으며, 중괄호({})와 세미콜론(;)을 사용하여 스타일을 정의한다. 이를 통해 기존의 CSS 코드를 쉽게 Sass로 변환할 수 있게 되었습니다.
SCSS를 사용하여 스타일 시트를 작성할 수 있으며, Sass의 기능과 장점을 모두 활용할 수 있다.
2. 프로젝트 시작하기
프로젝트 폴더를 만든다. scss_learning 폴더를 만들고 하위 폴더로 css js 폴더를 만든다.
visual code를 이용하여 HTML을 다음과 같이 만들어 보자.
3. extension 설치하기
visual code의 extension을 클릭해보고 필요한 extension을 설치한다. Live Sass를 설치한다.

4. HTML을 다음과 같이 수정한다.
(1) variables 사용하기
css/mystyle.scss 파일을 다음과 같이 만든다.
자동으로 css/mystyle.css 파일이 생성된다. mystyle.scss 파일에서 작업을 진행하면 된다.
(2) scss 파일 분해 및 조합
파일을 기능별로 분활하고 이를 한꺼번에 모아서 사용할 수 있다.
css/variables.scss 파일을 다음과 같이 만든다.
css/mystyle.scss파일을 다음과 같이 수정을 한다. @import 를 이용하여 불러오기를 한다.
@import는 단순 파일 불러 오기에 사용된다. 만일 모듈화 하여 사용하고 십다면 @use를 사용한다.
(3) 중첩 (nesting)

(4) mixins
mixins은 재사용 가능한 코드 조각을 정의하는 기능입니다. Mixin을 사용하면 일반적으로 반복되는 스타일 규칙을 한 곳에 정의하여 필요할 때마다 호출할 수 있습니다.
이는 코드의 중복을 줄이고 유지 보수성을 향상시키는 데 도움이 됩니다.
css/mystyle.scss파일을 다음과 같이 추가 한다. @include 키워드를 사용하여 Mixin을 호출하고, 호출 시에 매개변수를 전달합니다.
html 파일을 다음과 같이 추가한다.
(5) 모듈사용하기
위에서 정의한 button 믹스인을 모듈로 만들어 보자. 새파일이름은 _butons.scss( partial 파일 )로 만든다.
만약에 .sass 파일이나 .scss 파일의 파일이름을 underscore _ 로 시작하면 css 파일로 따로 컴파일되지 않습니다.
html 에서 해당 css 파일을 불러올일이 없고, import 만 되는경우에는이 기능을 사용하세요.
// buttons 모듈을 만든다. 파일이름은 _butons.scss 로 만든다.
mystyle.scss 파일을 다음과 같이 수정한다. mystyle.scss 파일에서 클래스 .button-primary과 .button-secondary를 사용할 수 있다.
(6) built-in modules https://sass-lang.com/documentation/modules

[참고] https://sass-lang.com/documentation/modules/color#lightness
HTML에 다음을 추가한다.
(7) @extend
@extend는 Sass에서 스타일을 확장(상속)하기 위해 사용되는 기능입니다.
HTML에 다음을 추가한다.
(8) Placeholder 선택자 %
Sass에서 Placeholder 선택자 %는 스타일을 정의하는데 사용되는 선택자입니다. Placeholder 선택자는 스타일을 포함한 CSS 규칙을 정의할 수 있지만,
컴파일된 CSS에서 실제로 사용되지는 않습니다. 대신, 다른 선택자가 Placeholder 선택자를 상속하여 스타일을 사용할 수 있습니다.
Placeholder 선택자는 @extend 지시문을 통해 상속될 때 유용하게 사용됩니다.
다른 선택자가 Placeholder 선택자를 상속하면, Placeholder 선택자의 스타일은 해당 선택자로 확장되고, 컴파일된 CSS에서 사용됩니다.
(9) @function
@function은 Sass에서 사용자 정의 함수를 생성하는 기능입니다. 함수는 재사용 가능한 코드 블록으로, 입력 값을 받아 처리하고 결과를 반환합니다.
@function을 사용하여 함수를 정의하고 호출하여 계산, 변환 또는 스타일 적용과 같은 작업을 수행할 수 있습니다.
함수는 값을 반환하기 위해 @return 지시문을 사용합니다. 함수는 다른 Sass 코드 내에서 표현식처럼 사용될 수 있으며,
반환된 값을 변수에 할당하거나 다른 속성에 사용할 수 있습니다.
(10) @if, @else if, @else 조건문
특정 조건에 따라 다른 스타일 또는 속성을 적용하는 데 사용됩니다.
(11) Sass에서는 다음과 같은 반복문 지시자를 제공합니다.
@for
Sass에서 반복문을 구현하는 기능 중 하나입니다.
다음과 같이 CSS가 생성된다.
@while
@while은 Sass에서 제공하는 반복문 지시자 중 하나입니다. @while을 사용하여 특정 조건을 만족하는 동안 반복적으로 코드를 실행할 수 있습니다.
다음과 같이 CSS가 생성된다.
@each 반복문
Sass에서 반복문을 구현하는 기능 중 하나입니다. @each를 사용하면 리스트나 맵의 각 항목을 순회하면서 스타일 또는 속성을 적용할 수 있습니다.
다음과 같이 CSS가 생성된다.
비디오강의
(1) Introduction https://www.youtube.com/watch?v=_kqN4hl9bGc&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb
(2) Compiling SASS https://www.youtube.com/watch?v=Sk5jMurFHCo&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=2
(3) Variables https://www.youtube.com/watch?v=LXx_oE6IBWs&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=3
(4) partials & @import https://www.youtube.com/watch?v=sIzt6kr3MHc&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=4
(5) Project Structure https://www.youtube.com/watch?v=OxT05SPg1js&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=5
(6) Nested Rules https://www.youtube.com/watch?v=vajsECys5Tc&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=6
(7) using Math https://www.youtube.com/watch?v=sXE3nwjCY_w&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=7
(8) Maps https://www.youtube.com/watch?v=La8wN7o-cL8&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=8
(9) Loops https://www.youtube.com/watch?v=I1lp8eSKmEs&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=9
(10) Conditionlas https://www.youtube.com/watch?v=QPZOvED3N_8&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=10
(11) Parent Selectors https://www.youtube.com/watch?v=unhOp1Z-hec&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=11
(12) Mixins https://www.youtube.com/watch?v=eW1nhSZaPEw&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=12
(13) Functions https://www.youtube.com/watch?v=l0VljiUg2d0&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=13
(14) Making Classes https://www.youtube.com/watch?v=JIskeGNEVEk&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=14
(15) Media Queries https://www.youtube.com/watch?v=3R4fpnIAozs&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=15
(16) Grid System #1 https://www.youtube.com/watch?v=GA65QBSec-Y&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=16
(17) Grid System #2 https://www.youtube.com/watch?v=jWV_fU3qMnw&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=17
(18) @extends https://www.youtube.com/watch?v=vqI9kuoy6xM&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=18
(19) CSS Library https://www.youtube.com/watch?v=Ta0hiPMH9Qg&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=19
(20) Purging CSS https://www.youtube.com/watch?v=5IpRkfdWoaM&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=20
(21) Customizing Library https://www.youtube.com/watch?v=btMR5e4ZRM4&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=21
(22) Extending Library https://www.youtube.com/watch?v=AqyCmYxy60s&list=PL4cUxeGkcC9jxJX7vojNVK-o8ubDZEcNb&index=22