Sass(syntactically awesome stylesheets, 사스)는 햄튼 캐틀린이 설계하고 나탈리 바이첸바움이 개발한 스타일시트 언어입니다.
Sass는 종속형 시트(CSS)로 해석 및 컴파일되는 스크립트 언어입니다.
SassScript는 그 자체로 스크립트 언어입니다. - 위키백과
Sass는 2가지 문법으로 구성되어 있습니다.
① 들여쓰기 구문(indented syntax) - Sass
② 블록 형식(block format) - Scss
들여쓰기 구문과 SCSS 파일들은 각각 .sass, .scss 확장자를 가집니다.
Scss가 괄호와 세미콜론이 들어간 Sass라고 생각하시면 됩니다.
전처리 언어인 Sass를 사용하기 전에 VSCode에서 개발환경 세팅을 먼저 하겠습니다.
VSCode에서 좌측 확장(extension) 메뉴에 Live Sass Compiler를 검색해서 최신버전을 다운로드 받습니다.
그러면 우측 하단에 Watch Sass라는 버튼이 생성됩니다.
이 버튼을 누르면 현재 작성한 Sass파일을 자동으로 CSS파일로 변환해 줍니다.
왜 이렇게 Sass파일을 변환해줘야 할까요?
// example.scss
$mainColor: red;
$backgroundColor: pink;
body {
color: $mainColor;
background-color: $backgroundColor;
}
① 먼저 Sass를 사용하기 위해서 example.scss 파일을 생성합니다.
② 변수를 사용하기 위해서 $ 기호를 사용해서 변수 이름을 작성합니다.
③ 작성한 변수에 원하는 값을 넣습니다. ex) red, pink
④ CSS 선택자(ex. body)의 속성 값으로 위에서 선언한 변수를 사용합니다.
// example.scss
$bodyFontSize: 10px;
body {
font-size: $bodyFontSize; // font-size: 10px;
width: (400px * 2); // width: 800px;
height: (50% * 2); // height: 100%;
}
:root {
--main-color: pink;
--nav-padding: 10px;
}
width: calc(10px + 100px); /* 110px */
// exmaple.scss
body {
div {
height: 100%;
}
ul {
background: pink;
}
}
/* exmaple.css */
body div {
height: 100%;
}
body ul {
background: pink;
}
// example.scss
// Q. CSS에서 선택자 : div.container > div p.title > span를 선택할 때?
div.container {
>div {
p.title {
>span {
// 코드
}
}
}
}
// example.scss
// Q. 의사 클래스(pseudo-class)를 중첩하는 방법?
.container {
:hover {
background: pink;
}
}
.container {
&:hover {
background: pink;
}
}
// example.scss
.container {
color: white;
background: black;
}
.box {
@extend .container;
padding: 10px; // .container 에 적용된 CSS에 padding만 추가합니다.
}
// example.scss
%message-shared {
border: 1px solid black;
padding: 10px
color: #000;
}
.message {
@extend %message-shared;
}
.error {
@extend %message-shared;
}
// example.scss
@mixin button() {
font-size: 1rem;
padding: 1rem;
color: white;
}
.btn {
@include button(); //@include 키워드로 mixin으로 설정한 함수를 가져옵니다.
background: pink;
}
// example.scss
@mixin button($color) { // 👈 매개변수 값이
font-size: 1rem;
padding: 1rem;
color: $color; // 👈 여기로 들어갑니다.
}
.btn {
@include button(white); // 👈 인자로 white를 넣었습니다.
background: pink;
}
// base.scss
$my-font: sans-serif;
$main-color: #333;
body {
font-family: $my-font;
color: $main-color;
}
// styles.scss
@use 'base'; // 👈 위의 base.scss를 가져옵니다.
body {
color: base.$main-color; // 👈 base.scss에 있는 $main-color 변수를 사용합니다.
background: pink;
}
// base.scss
@mixin button($color) {
font-size: 1rem;
padding: 1rem;
color: $color;
}
// styles.scss
@use 'base.scss';
@include base.button(white); // 다른 파일의 mixin을 사용하는 방법입니다.
// _base.scss // 👈 _(언더바)를 사용합니다.
$my-font: sans-serif;
$main-color: #333;