
오늘은 Sass에서 제공하는 기능이 어떤 것이 있는지 살펴보면서, SCSS 구문으로 어떻게 표현할 수 있는지 알아보자.
$variable: value;// 예시
$hello-1: 1;
$HELLO_2: 2;li {
--column: 2;
width: calc(var(--column) * 20%); // -> width: 40%;
}
@media (min-width: 64em /* 1024px */) {
--column: 3; // -> width: 60%;
}li {
$column: 2;
width: calc($column * 20%); // -> width: 40%;
}
@media (min-width: 64em /* 1024px */) {
$column: 3; // -> width: 40%; Sass 변수는 동적 처리가 불가능하므로 미디어쿼리의 조건에 부합하더라도 $column의 값은 2로 유지됨.
}#{$변수명}```scss
//예시
.col-sm-$i -> .col-sm-#{$i}
```$변수명: (
key1: value1,
key2: value2,
)```scss
map.get($변수명, $key);
```at 으로 불리는 @ 를 붙여서 제공되는 Sass 기능으로, 스타일 중첩이나 보간 포함 등이 가능하다.
@use "파일경로";반드시 namespace를 작성해줘야 함.
namespace.mixin이름, namespace.function이름, namespace.variable이름
@use "variables";
body {
color: variables.$black;
}
as 사용@use "파일경로" as 별칭;@use "variables" as v;
body {
color: v.$black;
}* 를 지정하면 호출시 별칭을 작성하지 않아도 됨@use "파일경로" as *@use "variables" as *;
body {
color: $black;
}@use "sass:math";
body {
color: math.div(100% / 10);
// color: div(100% / 10); // 생략시 div()로 표기되는데, 이러면 어떤 내장변수를 사용했는지 알기 어려움
}@forward "url"@forward 파일경로 as list-*;ul {
@include 파일경로.list-패키지명();
}```sass
@forward 파일경로 hide 패키지명; // 제외될 패키지
@forward 파일경로 show 패키지명; // 사용 가능한 패키지
```// 선언
@mixin mixin명() {
// css 내용
}
// 사용
selector {
@include mixin명();
}// 선언
@mixin mixin명($parameter) {
속성: $parameter;
}
// 사용
selector {
@include mixin명($parameter);
}@mixin mixin명($parameter: 기본값) {
속성: $parameter;
}
// 예시
@mixin text-style($color: false) {
@if (type-of($color) === color) {
color: $color;
}
// color 값에 px이나 boolean 값이 출력되지 않게 하기 위해 if문 작성
}// 선언
@mixin flexLayout($type: flex, $x: center, $y: center) {
display: $type;
justify-content: $x;
align-items: $y;
}
// 사용
div {
@include flexLayout($x: flex-start);
}
/* 결과값
div {
display: flex;
justify-content: flex-start;ㄴ
align-items: center;
}
*/ ```scss
// 선언시
@mixin responsive($screen) {
if ($screen == T) {
@media screen and (min-width: 1200px) {
@content;
}
}
}
// 사용시
p {
@include responsive(T) {
font-size: 12px;
}
}
// 결과값
p {
@media screen and (min-width: 1200px) {
font-size: 12px;
}
}
```%)와 함께 사용할 수 있음!optional을 사용하면 확장 선택자가 존재하지 않는 동안 해당 확장 기능을 사용하지 않을 수 있음@function 함수명() {
@return 값;
}@debug 출력내용;
%스타일명 {
// 공통스타일 작성
}
// 예시
%tag-base {
font-size: 12px;
height: 20px;
padding: 0 6px;
}```scss
선택자 {
@extent %스타일명;
}
// 예시
.tag-red {
@extent %tag-base;
background-color: red;
}
```스타일의 출력을 제어하거나 반복 처리를 하는 등 스타일의 흐름을 제어하는 것으로 @ 을 붙인 작은 단위의 at_rules이다. flow control은 mixin이나 function 등의 내부에서도 사용할 수 있다.
@each 변수 in 순환할값 으로 사용되며 변수는 (key value) 그룹 또는 key, value 각각 호출 등 다양하게 선언할 수 있음@each $key, $value in $list {
@debug $key;
@debug $value;
}@for 순서변수 from 시작순서 through 마지막순서 {
}
// 예시
@for $i from 1 through 4 {
@debug $i; // 결과값 1, 2, 3, 4
}
!default 플래그로 선언해준 값으로 지정됨@use 파일 with (변수1: 값1, 변수2: 값2,..., 변수: 값) 으로 불러내서 !default 선언된 변수의 값을 변경할 수 있음