BeNI 2022. 11. 29. 18:27
728x90
SCSS - 재활용

1. @mixin 과 @include 

: CSS 스타일 시트에서 재사용할 CSS스타일 그룹 선언을 정의하는 기능

 

1) 기본 형태 

- @mixin 으로 스타일 정의하고, @include를 이용하여 불러옴

* sass에서는 @mixin이 =, @include는 + 형태이다.

@mixin <이름> { ... }

@mixin 이름(<매개변수...>) { ... }

@include <이름>(<매개변수...>)

 

ex) 매개변수 없는 형태

 

ex) 매개변수 있는 형태

- 매개변수가 있는 형태면 include로 불러올 때 매개변수 있어야 한다.

- mixin 선언 시 매개변수에 기본 값 지정 가능하다.

 

2) 응용 형태

① 가변 인수를 사용하는 형태 

- 가변 인수 : ... (전개)연산자 이용

@mixin bg($w, $h, $b...) {
    width: $w;
    height: $h;
    background: $b;
}

.box {
    @include bg(
        100px,
        200px,
        url("/images/a.png") no-repeat center,
        url("/images/a.png") repeat-x, 
        url("/images/a.png") repeat-x center / contain
    );
}

 

 

ex) 보간과 전개 연산자를 이용한 마진 패딩 주기

 

ex) null값을 이용한 매개 변수 미리 지정

 

② @content 이용

- 중괄호에 들어간 내용이 @content로 들어간다.

- @content 규칙 using 키워드로 받아와서 사용 가능 ( 매개변수가 있다면 include에 항상 using 이 있어야함)

@content(arg);

@include media(lg) using ($c) {
    width: 400px;
    height: $c; // arg
}

 

 

③ 미디어 쿼리와 함께쓰기

- mixin 안에 media 쿼리를 넣으면 알아서 지정한 선택자의 미디어 쿼리가 된다.

 

2. @extend

 : 선택자를 가져와서 그 선택자의 스타일을 가져올 수 있다.

* 부작용 : 선택자 폭발

중첩문법으로 @extend를 많이 사용하게 되면 원하지 않는 선택자에 스타일이 적용될 수 있다.

 

+ placeholder 선택자(%) : sass에서만 사용가능하며 extend를 위해 있는 선택자

 

✔ 유의 사항

- media 선택자 안 스타일에 extend를 가져올 수 없다.

- 되도록 mixin을 사용하는게 더 좋음

 

SCSS - 함수

1. 기본 형태

@function 함수이름() {
    @return 리턴값;  /* 없어도 됨 */
}

 

ex) 예외 상황에 대해 에러를 호출하는 함수

$columns-width: 1200px;
@function grid($col: 1, $total: 12, $rest...) {
    @if($col > $total) {
        @error "$col must be less than $total.";
    }
    /* list써도 되고 안써도됨 */
    @if(list.length($rest) > 0){
        @error "Unnecessary arguments include.";
    }
    @return $columns-width * $col / $total;
}

* 함수 이름은 자신만의 커스텀 이름이 좋다. (중복 문제)

 

 

SCSS - 조건과 반복

1. if - else 문 / else if 문

1) 기본 형태

@if (조건문1) {
	/* 조건문1이 참일 때 */
} @else if (조건문2){
	/* 조건문2가 참일 때 */
} @else {
	/* 그 외 */
}

ex) mixin과 조건문을 활용한 예시

@mixin theme-colors($light-theme: true) {
  @if $light-theme {
    background-color: $light-background;
    color: $light-text;
  } @else {
    background-color: $dark-background;
    color: $dark-text;
  }
}

 

 

2. @each문 (forEach와 유사)

1) 기본 형태 

@each ele in list이름 {
  /* ele는 list의 각 요소들이 반환 */
}

 

ex) each문을 이용하여 size 설정

 

3. @for 구문 : 반복문

1) 기본 형태

 for $i from "시작인덱스" through "끝 인덱스(포함)" {
 	/* i는 1씩 증가한다. */
 }

 

ex) background-color 지정하는 예시

 

$base-color: #036;

@for $i from 1 through 3 {
  ul:nth-child(3n + #{$i}) {
    background-color: lighten($base-color, $i * 5%);
  }
}

 

 

4. @while문

@use "sass:math";

@function scale-below($value, $base, $ratio: 1.618) {
  @while $value > $base {
    $value: math.div($value, $ratio);
  }
  @return $value;
}

$normal-font-size: 16px;
sup {
  font-size: scale-below(20px, 16px);
}

 

 

SCSS - 가져오기, 모듈

1. @import (전체 가져오기)

 

1) 사용 방법

① 가져올 scss 파일 생성

// _variables.scss
$primary: orange;
$error: red;
$success: green;

* 파일 이름 앞에 _(언더바)가 있으면 scss에서 가져올 파일이라 인식해서 컴파일 안됨

 

② 가져올 파일을 쓸 파일 생성

- import 구문으로 가져온다. (확장자 생략 가능)

@import "./variables.scss";
or @import url("./variables.scss"); (컴파일된 css파일에 표기됨)

.main {
  background-color: $primary;
  border: 4px solid $success;
}

 

📌 컴파일 방법 :  sass scss:css (scss파일을 css파일로 컴파일 한다)

* css 파일로 컴파일 될때 아래 형식은 css파일에 표기된다

@import url("./variables.scss"); 

@import "~~~.css" (확장자가 css) 

@import "http://~~" 

 

 

2. @use (부분 가져오기)

- 모듈 처럼 가져오는 방식

@use "./variables.scss" as var; /* as 안쓰면 variables로 사용  */

.main {
  background-color: var.$primary;
  border: 4px solid var.$success;
}

 

3. @forward

- 가져온 파일을 외부에서도 사용할 수 있게 해줌(받아서 다시 전달)

@use "./variables.scss" as var;
@forward  "./variables" as var*; /* as var* 생략가능(이름 충돌때문에 사용) */
 
/* 위 파일을 쓰는 파일에서 사용 방법 */
.body {
  border : 4px solid var.$varprimary
}

/* 위 방식이 가독성이 안좋아서 하이픈을 붙임 */
@forward  "./variables" as var-*;

 

SCSS - 내장 모듈

1. 사용 방식

: @use sass:모듈이름

* 전역 모듈도 있다. 전역 모듈은 안 불러와도됨 ex) hsl, hsla, if, rgba

 

2. 모듈 종류

 

1) sass:color

Sass: sass:color (sass-lang.com)

 

Sass: sass:color

The hue is a number between 0deg and 360deg (inclusive). The whiteness and blackness are numbers between 0% and 100% (inclusive). The hue may be unitless, but the whiteness and blackness must have unit %. The alpha channel can be specified as either a unit

sass-lang.com

ⓐ lighten, darken : amount 만큼 어둡게/밝게 만듬

darken($color, $amount) //=> color 
lighten($color, $amount) //=> color 

 

- color.adjust로 위 메서드를 구현할 수 있음

color.adjust($color,
  $red: null, $green: null, $blue: null,
  $hue: null, $saturation: null, $lightness: null,
  $whiteness: null, $blackness: null,
  $alpha: null)

 

 

2) sass:list

Sass: sass:list (sass-lang.com)

 

Sass: sass:list

Returns a new list containing the elements of $list1 followed by the elements of $list2. ⚠️ Heads up! Because individual values count as single-element lists, it’s possible to use list.join() to add a value to the end of a list. However, this is no

sass-lang.com

ⓐ list.append: list에 추가

list.append($list, $val, $separator: auto)

@debug list.append(10px, 20px, $separator: comma); // 10px, 20px

 

ⓑ list.join: 리스트들을 합쳐서 새로운 list를 만듬

list.join($list1, $list2, $separator: auto, $bracketed: auto)

debug list.join(10px 20px, 30px 40px); // 10px 20px 30px 40px
@debug list.join(10px, 20px, $separator: comma); // 10px, 20px
@debug list.join(10px, 20px, $bracketed: true); // [10px 20px]

 

ⓒ list.length

list.length($list)

ⓓ list.nth : 리스트 인덱싱

list.nth($list, $n)

@debug list.nth(10px 12px 16px, 2); // 12px

 

 

3) sass:map

Sass: sass:map (sass-lang.com)

 

Sass: sass:map

⚠️ Heads up! In practice, the actual arguments to map.set($map, $keys..., $key, $value) are passed as map.set($map, $args...). They are described here as $map, $keys..., $key, $value for explanation purposes only. If $keys are not passed, returns a c

sass-lang.com

ⓐ map.get / map.set

map.get($map, $key, $keys...)
map.set($map, $key, $value)

ⓑ map.has-key : key 값을 가지고 있나 ?

map.has-key($map, $key, $keys...)

$font-weights: ("regular": 400, "medium": 500, "bold": 700);

@debug map.has-key($font-weights, "regular"); // true
@debug map.has-key($font-weights, "bolder"); // false

ⓒ map.keys / map.values : 키값들, values들을 반환(리스트)

map.keys($map)
map.values($map)

ⓓ map.merge: 병합하기

$light-weights: ("lightest": 100, "light": 300);
$heavy-weights: ("medium": 500, "bold": 700);

@debug map.merge($light-weights, $heavy-weights);
// ("lightest": 100, "light": 300, "medium": 500, "bold": 700)

- 중복된 게 있으면 더 뒤에 있는 인자가 앞에 인자를 덮어쓴다.

 

 

4) sass:math

Sass: sass:math (sass-lang.com)

 

Sass: sass:math

$y and $x must have compatible units or be unitless. 💡 Fun fact: math.atan2($y, $x) is distinct from atan(math.div($y, $x)) because it preserves the quadrant of the point in question. For example, math.atan2(1, -1) corresponds to the point (-1, 1) and

sass-lang.com

 

 

5) sass:meta

ⓐ meta.call

meta.call($function, $args...)
@use 'sass:meta';

meta.call($callback, 인수); /*콜백함수에 인수를 넣어 실행*/
meta.type-of(값) /*타입 체크*/

 

6) sass:string

Sass: sass:string (sass-lang.com)

 

Sass: sass:string

string.unquote($string) unquote($string) //=> string Returns $string as an unquoted string. This can produce strings that aren’t valid CSS, so use with caution. SCSS Syntax @debug string.unquote("Helvetica"); // Helvetica @debug string.unquote(".widget

sass-lang.com

- quote, unquote : 따옴표 처리

 

 

SCSS - 디버그

1. 종류

@debug "~~" // console.log()
@warn "~~"  // console.warn()
@error "~~" // console.error() throw error랑 비슷함

 

 

 

728x90