CSS 전처리기
CSS를 확장하는 스크립팅 언어로써, 컴파일러를 통해 브라우저에서 사용할 수 있는 일반 CSS문법형태로 변환
null
, lists
와 maps
가 있음$
문자를 사용함$primary-color: #333;
body {
background-color: $primary-color;
}
body {
background-color: #333;
}
Sass의 변수에는 변수범위가 있음
변수를 특정 선택자에서 선언하면 해당 선택자에서만 접근이 가능함
$primary-color: #333;
body {
$primary-color: #eee;
background-color: $primary-color;
}
p {
color: $primary-color;
}
body {
background-color: #eee;
}
p {
color: #333;
}
변수를 선언할 때 global하게 설정하려한다면
!global
플래그를 사용함
$primary-color: #333;
body {
$primary-color: #eee !global;;
background-color: $primary-color;
}
p {
color: $primary-color;
}
body {
background-color: #eee;
}
p {
color: #eee;
}
추가적으로
!default
플래그는 해당 변수가 설정되지 않았거나 값이null
일때 값을 설정함
추후mixin
을 작성할 때 유용하게 사용됨
주의할점
+
,-
연산자를 사용할 때는 단위를 언제나 통일시켜야함오류 예시
$box-width: 100% - 20px
해당 작업을 해야한다면calc()
함수를 사용하면 됨
.container { width: 100%; }
article[role="main"] {
float: left;
width: 600px / 960px * 100%;
}
aside[role="complementary"] {
float: right;
width: 300px / 960px * 100%;
}
.container {
width: 100%;
}
article[role="main"] {
float: left;
width: 62.5%;
}
aside[role="complementary"] {
float: right;
width: 31.25%;
}
Sass의 매우 유용한 기능 중 하나는 선언을 중첩시킬 수 있다는 것
부모 선택자를 참조할때는&
문자를 사용함
/* CSS */
.container {
width: 100%;
}
.container h1 {
color: red;
}
/* Sass */
.container {
width: 100%;
h1 {
color: red;
}
}
@at-root
지시자를 사용함
.container {
.child {
color: blue;
}
@at-root .sibling {
color: gray;
}
}
.container .child {
color: blue;
}
.sibling {
color: gray;
}
중첩 시 4레벨보다 깊게 들어가지 말 것
import
기능은 스타일들을 여러 파일들로 나누고, 다른 파일에서 불러와서 사용하는 기능
@import 'layout.scss';
or
@import 'layout';
Sass에서 특정 선택자를 상속 할때,
@extend
지시자를 사용합니다
.box {
border: 1px solid gray;
padding: 10px;
display: inline-block;
}
.success-box {
@extend .box;
border: 1px solid green;
}
.box, .success-box {
border: 1px solid gray;
padding: 10px;
display: inline-block;
}
.success-box {
border: 1px solid green;
}
Placeholder 선택자
%
를 사용하면 상속은 할 수 있지만 해당 선택자는 컴파일되지 않음
%box {
padding: 0.5em;
}
.success-box {
@extend %box;
color: green;
}
.error-box {
@extend %box;
color: red;
}
.success-box, .error-box {
padding: 0.5em;
}
.success-box {
color: green;
}
.error-box {
color: red;
}
Sass의 핵심기능중 하나
extend와 비슷하지만 argument(인수)를 받을 수 있음
mixin을 선언할 때는@mixin
directive를 사용하며, 이를 사용할 때는@include
directive를 사용함
@mixin headline ($color, $size) {
color: $color;
font-size: $size;
}
h1 {
@include headline(green, 12px);
}
h1 {
color: green;
font-size: 12px;
}
#{}
표현은 특정 문자열을 다로 처리하지 않고 그대로 출력할 때 사용됨
@content
지시자를 사용하면 나중에@include
했을 때, 그 선택자 내부의 내용들이@contnet
부분에 나타나게 됨
@mixin media($queryString){
@media #{$queryString} {
@content;
}
}
.container {
width: 900px;
@include media("(max-width: 767px)"){
width: 100%;
}
}
.container {
width: 900px;
}
@media (max-width: 767px) {
.container {
width: 100%;
}
}
mixin과 비슷하지만 차이점은
mixin은 style markup을 반환하지만
function은@return
directive를 통해 값을 반환함
@function
지시자 사용
@function calc-percent($target, $container) {
@return ($target / $container) * 100%;
}
@function cp($target, $container) {
@return calc-percent($target, $container);
}
.my-module {
width: calc-percent(650px, 1000px);
}
.my-module {
width: 65%;
}
sass의 복잡한 문법이 필요 없다면, CSS의 표준 문법에 기반한 postcss를 사용하는 것이 더 편리함
Dart Sass는 Sass의 기본 구현으로 다른 구현보다 먼저 새로운 기능을 제공함
빠르고 쉽게 설치할 수 있고 순수 JS로 컴파일되어 최신 웹 개발 Workflow에 쉽게 통합할 수 있음
node sass는 현재 새로운 기능이 추가되지 않고 있음
@import
와 유사하지만 기존@import
가 가진 문제점을 보완함
Scss 커뮤니티에서는 점진적으로 import를 deprecated하고@use
만 사용하도록 할 계획임
@import
의 문제점@import
를 사용하기 때문에 혼란을 야기할 수 있음@use
의 장점@import
가 아닌 @use
를 사용하기 때문에 혼란을 피할 수 있음@use
는 모듈시스템과 동일하게 동작하기 때문에 컴파일 중 단 한번만 import됨@use
를 사용하면 모듈별로 별도의 namespace를 가지기 때문에 각 변수와 함수는 독립적으로 사용됨(alias(as) 이용)namespace.function()
과 같이 사용하기 때문에 어디서 가져온 요소인지 직관적으로 알 수 있음@forward
는 언제 사용할까@use
와 @forward
는 비슷한 기능을 함@use
vs @forward
@use
와 다르게 @forward
를 사용하면 페이지 내에서 forward한 모듈의 요소(variables, functions, mixins)를 사용할 수 없다@forward
는 전달만 할 뿐임@use
를 사용해 import하면 됨
/
를 나누기 연산 기능으로 사용하려면 아래와 같은 조건을 충족해야 함
()
로 묶여있는 경우npm install name
-P
(--save-prod
)라는 옵션을 부과한 것npm install name -D
--save-dev
와 동일npm install name -O
--save-dev
와 동일npm install name --no-save
npm install name@0.0.1
npm install name --force
npm install name -g
naem.css.map 파일은 sass파일이 css 파일로 컴파일될 때 생성되는 json 형식의 파일
CSS 파일의 각 행을 Scss소스 파일의 해당 행에 연결하는 정보가 들어 있음