• 연산 (Operations)
  • 보간법 (#{}, Interpolation)
  • Mixins

연산(Operations)

  • 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)등 수학의 연산 결과를 수행할 수 있다
  • 사칙연산의 원리를 따른다(+,-,*,/, %[나머지 연산자])
  • 폰트 속기형을 쓸 때 생각처럼 작동하지 않는다
  • 인터폴레이션(Interpolation) 방식으로 해결한다 #{}
  • 컬러 연산이 가능하다(RRGGBB값중 매칭되는 값들을 연산한다)
  • 문자 연산(String Operations) : 문자와 문자를 접합하려는 경우 + 연산자를 사용
  • 불린 연산도 연산이 가능하다
10 >= 11 // false
1 + 1 == 2 // true
red == #f00 // true

'foo' + 'bar' // 'foobar'
'foo ' + 'bar' // 'foo bar'

1 + 2 == 4 or 2 != two // true

true and false // false

not false // true

보간법(#{}, Interpolation)

  • 문자를 접합(용접과 비슷)
  • Sass는 변수를 “” 내부에서 처리 할 수 있는 보간법을 지원.
  • 웹 폰트 CDN을 사용할 경우, 보간법이 유용하게 활용.
$spoq-language: kr

@import url("http://spoqa.github.io/spoqa-han-sans/css/SpoqaHanSans-#{$spoq-language}.css")
  • RWD, 쿼리문 보간법 활용 #{...}
$selector: selector-name
$media-md: "screen and (min-width: 760px)"
$media-lg: "screen and (min-width: 1220px)"
$media-print: "not screen and (min-width: 21cm)"

.#{$selector}
	@media #{$media-print}
		background: #fff !important
		color: #000 !important

!important은 프린트(인쇄) 환경에서는 꼭 배경은 흰색, 컬러는 검정으로 출력해야 잉크 낭비를 줄일 수 있다.

믹스인(Mixins)

  • JS함수(function)와 흡사한 믹스인 모듈 정의(@mixin, =) 후, 호출(@include, +)해서 사용. 재사용이 가능.
  • @mixin 지시자(Directive)를 사용하여 정의한다. *Sass 문법에서는 '='으로 대체할 수 있다
  • @include 지시자를 사용하여 정의된 믹스인을 호출한다. *Sass 문법에서는 '+'으로 대체할 수 있다
  • 어떤 경우에 정적 믹스인 보다 플레이스홀더(%) 선택자가 좋은 선택인가? ex) common.css

Sass는 전달인자(Arguments)로 통일해서 쓴다. JavaScript는 매개변수(Parameter), 전달인자(Arguments)로 구분해서 쓴다. [- 매개변수(Parameter) : 값을 정의 할 경우 | - 전달인자(Arguments) : 값을 전달 할 경우]

  • scss
    • 정의: @mixin
    • 불러오기: @include
  • sass
    • 정의: =
    • 불러오기: +

활용성이 떨어지는 ‘정적 믹스인’

  • 정적인 믹스인은 매번 동일한 스타일만 설정이 가능하기 때문에 활용성이 떨어짐.
  • 기본적으로 매개변수(Parameter)가 설정되어 있지 않은 믹스인을 정적 믹스인이라고 한다.
=믹스인이름 {}
+믹스인이름

활용성이 향상된 ‘동적 믹스인’

  • 전달된 인자에 따라 스타일 변경이 가능하기 때문에 활용성이 향상.
=믹스인이름(매개변수1, 매개변수2) {}
+믹스인이름(전달인자1, 전달인자2)

전달 인자 (Arguments)

  • JS 함수 확장처럼 mixin으로 정의된 모듈에 인자를 전달하여 믹스인을 확장 할 수 있다.
  • 전달인자는 Sass의 변수와 유사하기에 변수 전달인자 앞에 ‘$’를 붙여야 하며, 각 인자는 콤마(‘,’)로 구분한다.
  • 전달인자의 기본 값을 설정하는 구문이 있다면 해당 인자는 선택사항이다. ex) $arg: value
=믹스인이름(매개변수1, 매개변수2, 매개변수3, 매개변수4) {}

키워드 전달 인자(Args, Keyword)

  • Mixin 호출시 값을 전달하지 않아 오류가 발생하는 것을 방지하기 위해 특정 값을 기본으로 설정할 수 있다.
=믹스인이름(매개변수1:기본값, 매개변수2:기본값) {}

가변 전달 인자(Args, Variable)

  • 전달할 인자의 개수가 고정된 경우, 응용하여 활용 불편.
  • 전달 받을 인자 List(배열)를 ‘…‘로 처리하면 복수의 인자를 처리하기 쉽다.
=믹스인이름(매개변수...) {}
  • 줄여서(‘…’) 전달하는 인자 표현식에는 ‘맵(Map) 데이터 유행’을 사용할 경우, ‘$를 제외한 키(Key)’를 전달하여 처리 가능하다 (반복문 없이)
@mixin colors($text, $background, $border) {
  color: $text;
  background-color: $background;
  border-color: $border;
}

$value-map: (text: #00ff00, background: #0000ff, border: #ff0000);
.secondary {
  @include colors($value-map...);
}

변수 범위(scope) 콘텐트 블록

  • 믹스인 내부에 @content를 사용하면 믹스인 호출 과정에서 믹스인 내부에서 처리될 콘텐츠(코드 블록)를 전달하여 코드를 섞을 수 있다.
// Sass
=apply-to-ie6-only
  * html
    @content

+apply-to-ie6-only
  #logo
    background-image: url(/logo.gif)
/* CSS */
* html #logo {
  background-image: url(/logo.gif);
}
  • html : * IE6,7 hack.

믹스인(Mixins) VS 플레이스홀더 %(placeholder)

  • 믹스인(Mixins)
    • 선택자마다 동일한 코드가 생성이 되어 코드량이 많아진다.
    • 인자를 전달함으로써 확장성이 좋다.
    • 외부에서 전달받은 인자 또는 콘텐츠를 병합해서 코드 덩어리를 출력이 된다.
  • 플레이스홀더 %(placeholder)
    • 선택자가 올라가 그룹핑이 된다.
    • 확장하기 힘들다.