이 문서에 대해서
이 문서는 Sass의 공식 메뉴얼(http://sass-lang.com/tutorial.html)을 의역한 것으로, 더 많은 정보는 Sass 레퍼런스(http://sass-lang.com/docs.html)를 통해서 찾을 수 있다.
중첩(Nesting)
CSS의 특성으로 인해서 셀렉터를 중복해서 사용해야 하는 경우가 많은데 Sass의 Nesting을 이용하면 코드의 양을 줄이고 연관된 코드끼리 그룹핑할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 | /* style.scss */ #navbar { width : 80% ; height : 23px ; ul { list-style-type : none ; } li { float : left ; a { font-weight : bold ; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /* style.css */ #navbar { width : 80% ; height : 23px ; } #navbar ul { list-style-type : none ; } #navbar li { float : left ; } #navbar li a { font-weight : bold ; } |
셀렉터 뿐만 아니라 이름의 중복도 줄일 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /* style.scss */ .fakeshadow { border : { style: solid ; left : { width : 4px ; color : #888 ; } right : { width : 2px ; color : #ccc ; } } |
1 2 3 4 5 6 7 8 | /* style.css */ .fakeshadow { border-style : solid ; border-left-width : 4px ; border-left-color : #888 ; border-right-width : 2px ; border-right-color : #ccc ; } |
부모 엘리먼트를 참조(Parent References)
(마우스가 엘리먼트 위로 올라왔을 때를 의미하는) :hover와 같은 pseudoclasses의 경우는 특수기호 '&'를 이용해서 부모 엘리먼트를 참조할 수 있다.
1 2 3 4 5 6 7 | /* style.scss */ a { color : #ce4dd6 ; &:hover { color : #ffb3ff ; } &:visited { color : #c458cb ; } } |
1 2 3 4 5 6 7 8 | /* style.css */ a { color : #ce4dd6 ; } a:hover { color : #ffb3ff ; } a:visited { color : #c458cb ; } |
변수(Variables)
CSS내에서 변수를 사용할 수 있다. 변수이름은 '$'로 시작해야 하고, 변수의 값으로 올 수 있는 것은 문자, 숫자(px, em포함), 칼러(#ce4dd6)가 있다. 변수를 이용하면 크기나 색상과 같은 값을 일괄적으로 변경할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /* style.scss */ $main- color : #ce4dd6 ; $style: solid ; #navbar { border-bottom : { color : $main-color; style: $style; } } a { color : $main-color; &:hover { border-bottom : $style 1px ; } } |
1 2 3 4 5 6 7 8 9 10 | /* style.css */ #navbar { border-bottom-color : #ce4dd6 ; border-bottom-style : solid ; } a { color : #ce4dd6 ; } a:hover { border-bottom : solid 1px ; } |
연산자와 함수(Operations and Functions)
연산자와 함수를 이용해서 엘리먼트의 크기나 좌표 또는 색상을 동적으로 변경할 수 있다.
- 연산자 : +, -, *, /, %
- 함수 : lightness, hue, saturation, 기타
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | /* style.scss */ #navbar { $navbar- width : 800px ; $items: 5 ; $navbar- color : #ce4dd6 ; width : $navbar-width; border-bottom : 2px solid $navbar-color; li { float : left ; width : $navbar-width/$items - 10px ; background-color : lighten($navbar-color, 20% ); &:hover { background-color : lighten($navbar-color, 10% ); } } } |
1 2 3 4 5 6 7 8 9 10 11 | /* style.css */ #navbar { width : 800px ; border-bottom : 2px solid #ce4dd6 ; } #navbar li { float : left ; width : 150px ; background-color : #e5a0e9 ; } #navbar li:hover { background-color : #d976e0 ; } |
Interpolation
'#{}'를 사용해서 변수로 속성이나 선택자의 이름을 동적으로 치환할 수 있다.
1 2 3 4 5 6 7 8 9 10 | /* style.scss */ $side: top ; $radius: 10px ; .rounded- top { border-#{$side}-radius: $radius; -moz-border-radius-#{$side}: $radius; -webkit-border-#{$side}-radius: $radius; } |
1 2 3 4 5 6 | /* style.css */ .rounded- top { border-top-radius: 10px ; -moz-border-radius- top : 10px ; -webkit-border-top-radius: 10px ; } |
Mixins
선택자와 속성을 재활용할 수 있도록 해주는 방법이다. 선언할 때는 '@mixin'으로 시작하고, 호출할 때는 '@include'을 사용한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* style.scss */ @mixin rounded- top { $side: top ; $radius: 10px ; border-#{$side}-radius: $radius; -moz-border-radius-#{$side}: $radius; -webkit-border-#{$side}-radius: $radius; } #navbar li { @include rounded- top ; } #footer { @include rounded- top ; } |
1 2 3 4 5 6 7 8 9 10 11 | /* style.css */ #navbar li { border-top-radius: 10px ; -moz-border-radius- top : 10px ; -webkit-border-top-radius: 10px ; } #footer { border-top-radius: 10px ; -moz-border-radius- top : 10px ; -webkit-border-top-radius: 10px ; } |
인자 (Arguments)
Mixin의 진정한 힘은 인자를 통해서 나타나는데, 인자는 Mixin 안에서만 사용되는 지역변수를 의미한다. 인자는 기본 값을 가질 수 있다.
1 2 3 4 5 6 7 8 9 10 11 | /* style.scss */ @mixin rounded($side, $radius: 10px ) { border-#{$side}-radius: $radius; -moz-border-radius-#{$side}: $radius; -webkit-border-#{$side}-radius: $radius; } #navbar li { @include rounded( top ); } #footer { @include rounded( top , 5px ); } #sidebar { @include rounded( left , 8px ); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /* style.css */ #navbar li { border-top-radius: 10px ; -moz-border-radius- top : 10px ; -webkit-border-top-radius: 10px ; } #footer { border-top-radius: 5px ; -moz-border-radius- top : 5px ; -webkit-border-top-radius: 5px ; } #sidebar { border-left-radius: 8px ; -moz-border-radius- left : 8px ; -webkit-border-left-radius: 8px ; } |
불러오기 (@import)
CSS는 @import 명령을 지원하는데, 이 명령은 다른 CSS를 불러오는 것이다. 이것은 별도의 파일을 네트워크를 통해서 로딩하는 것인데, 네트워크 커넥션은 느리고 비싼 행위다. Sass에서 import는 그 파일의 내용을 실제로 가져와서 파일에 통합하다.
Sass는 import를 위한 이름규칙이 있다. 불러지는 파일은 partials라고 불리고, 이 파일은 '_'로 이름이 시작된다. 예를들면 _rounded.scss 와 같은 식이다. 이 파일을 불러올 때 Sass에서는 @import 'rounded'를 사용한다.
1 2 3 4 5 6 7 | /* _rounded.scss */ @mixin rounded($side, $radius: 10px ) { border-#{$side}-radius: $radius; -moz-border-radius-#{$side}: $radius; -webkit-border-#{$side}-radius: $radius; } |
1 2 3 4 5 6 7 | /* style.scss */ @import "rounded" ; #navbar li { @include rounded( top ); } #footer { @include rounded( top , 5px ); } #sidebar { @include rounded( left , 8px ); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /* style.css */ #navbar li { border-top-radius: 10px ; -moz-border-radius- top : 10px ; -webkit-border-top-radius: 10px ; } #footer { border-top-radius: 5px ; -moz-border-radius- top : 5px ; -webkit-border-top-radius: 5px ; } #sidebar { border-left-radius: 8px ; -moz-border-radius- left : 8px ; -webkit-border-left-radius: 8px ; } |