프론트엔드/HTML & CSS

[SCSS] 변수와 타입

테오구 2022. 4. 28. 17:36
728x90

Sass는 css에 변수 개념을 도입해줍니다.

변수로 사용 가능한 형태는 숫자, 문자열, 폰트, 색상, null, list, maps가 있습니다.

변수를 사용할 때는 php같이 $문자를 사용합니다.

SCSS

$color-primary: #e96900;
$url-images: '/assets/images/';
$w: 200px;
.box {
  width: $w;
  margin-left: $w;
  background: $color-primary url($url-images + 'bg.jpg');
}

유효 범위

SCSS의 변수엔 변수 범위가 있습니다.

변수를 특정 selector에서 선언하면 해당 selector에서만 접근이 가능합니다.

선언된 블록({})내에서만 유효범위를 가집니다.

SCSS

$color: #333; /* 전역 변수 */
body {
  $color: #eee; /* 지역 변수 */
  background-color: $color;
}
p {
  color: $color;
}

변수 재할당

$red: #ff0000;
$blue: #0000ff;
$color-primary: $blue;
$color-danger: $red;
.box {
  color: $color-primary;
  background: $color-danger;
}

global (전역 설정)

!global 플래그를 사용하면 변수의 유효범위를 전역(Global)로 설정할 수 있습니다.

SCSS

$primary-color: #333;
body {
  $primary-color: #eee !global;
  background-color: $primary-color;
}
p {
  color: $primary-color;
}

default (초깃값 설정)

!default 플래그는 할당되지 않은 변수의 초깃값을 설정합니다.

**‘변수와 값을 설정하겠지만, 혹시 기존 변수가 있을 경우는 현재 설정하는 변수의 값은 사용하지 않겠다’**는 의미로 쓸 수 있습니다.

SCSS

$color-primary: red;
.box {
  $color-primary: blue !default;
  background: $color-primary;
}

Bootstrap같은 외부 SCSS라이브러리를 연결했더니 변수 이름이 같아 내가 작성한 코드의 변수들이 overwrite된다면 문제가 될 것이다.

이럴 때 SCSS라이브러리에서 사용하는 변수에 !default 플래그가 있다면 기존 코드를 overwrite 하지 않고도 사용할 수 있습니다.

$white: #fff !default;
$gray-100: #f8f9fa !default;
$gray-200: #e9ecef !default;
$gray-300: #dee2e6 !default;
$gray-400: #ced4da !default;
$gray-500: #adb5bd !default;
$gray-600: #6c757d !default;
$gray-700: #495057 !default;
$gray-800: #343a40 !default;
$gray-900: #212529 !default;
$black: #000 !default;

#{} (문자 보간)

자바스크립트의 백틱 ${} 문법과 같다고 보면 됩니다.

중괄호 안에 들어간 값은 문자열로 치환됩니다.

SCSS

$family: unquote("Droid+Sans"); /* Sass의 내장 함수 unquote()는 문자에서 따옴표를 제거 */ 
@import url("<http://fonts.googleapis.com/css?family=#{$family}>"); /* #{$family} == Droid+Sans */
728x90

'프론트엔드 > HTML & CSS' 카테고리의 다른 글

[SCSS] Mixin(믹스인)  (0) 2022.04.30
[SCSS] Nesting (중첩)  (0) 2022.04.29
scss  (0) 2022.04.28
CSS(box-sizing : border-box)  (0) 2021.08.30
window load  (0) 2021.08.28