[선택자]
div {
color:black;
.foo { // 자손(descendant) 선택자
color: black;
}
> .foo { // 자식(child) combinator
color: black;
}
+ .foo { // 인접형제(adjacent sibling) 선택자
color: #000;
}
~ .foo { // 일반형제(general sibling) 선택자
color: yellow;
}
& .foo { // Sass 부모(Parent) 참조 선택자
color: #fff;
}
.foo & { // Sass 부모(Parent) 참조 선택자
color: red;
}
&.bar {
color: green;
}
}
[import]
@import 'common.css';
@import 'common'; // scss 확장자는 생략 가능
[변수생성]
$imgPath : '../img/';
$white : #fff;
[믹스인]
- 생성
@mixin clear{
clear: both;
display: table;
content : '';
}
- 사용
&:after{
@include @clear;
}
- 함수처럼 매개변수 활용도 가능
@mixin fontInfo($size, $lh, $ls){
font-size: $size;
line-height: $lh;
letter-spacing: $ls;
}
p{
@include fontInfo(24px, 26px, -0.05em);
}
[수학 함수]
// 퍼센트 변경 함수
percentage(13/25) // 52%
// 반올림 함수
round(2.4) // 2
// 올림 함수
ceil(2.2) // 3
// 내림 함수
floor(2.6) // 2
// 절대값 함수
abs(-24) // 24
// 비교하여 작은것을 반환하는 함수
min(10px, 12px) // 10px
// 비교하여 큰것을 반환하는 함수
max(10px, 12px) // 12px
// 난수 함수
random(1) // 0~1
//사용
a {
font-size: ceil(2.2) + px;
padding: floor(2.6) + px;
margin: max(10px,12px);
top: min(10px,12px);
}
[문자 연산]
- 자바스크립트 처럼
''
를 사용하지 않아도 된다.
cursor: poi + nter; // pointer
[삼항 연산자]
$main-bg: #000;
.main {
// $main-bg 값이 black과 같다면 #fff로 설정
// 거짓이라면 #000으로 설정
color: if($main-bg == black, #fff, #000);
}
[확장]
- less의 .test와 비슷한 기능을 하는 확장 (sass에서는 권장되지 않는다.)
.test { color: #ddd; }
.box{
@extend .test;
}
[반복 for 문]
@for $i from 1 to 10 { // to : ~ 10 미만
.img_#{$i} {
background: url('img_#{$i}.jpg') no-repeat;
}
}
@for $i from 1 through 10 { // through : ~ 10 이하
.img_#{$i} {
background: url('img_#{$i}.jpg') no-repeat;
}
}
$imgWidth : 100, 200, 300;
$imgHeight : 50, 100, 200;
@for $i from 1 through 3{
&:nth-of-type(#{$i}){
background-image: url('img_#{$i}.jpg');
width: #{nth($imgWidth, $i)}px;
height: #{nth($imgHeight, $i)}px;
}
}
[each]
- List(배열) 데이터 타입으로 활용 가능
@each $obj in aaa, bbb, ccc, ddd {
.item-#{$obj} {
background: url("img/#{$obj}.jpg");
}
}
// CSS compile 결과
.item-aaa {
background-image: url("img/aaa.jpg");
}
.item-bbb {
background-image: url("img/bbb.jpg");
}
.item-ccc {
background-image: url("img/ccc.jpg");
}
.item-ddd {
background-image: url("img/ddd.jpg");
}
- Map 데이터 타입으로 하나의 데이터, 두개의 변수 필요
@each $key변수, $value변수 in 데이터 {
// 반복 내용
}
$test-data: (
first: aaa,
second: bbb,
third: ccc
);
@each $text, $data in $test-data {
.box-#{$text} {
background: url("/images/#{$data}.png");
}
}
// CSS compile 결과
.box-first {
background: url("/images/aaa.png");
}
.box-second {
background: url("/images/bbb.png");
}
.box-third {
background: url("/images/ccc.png");
}
[미디어 쿼리의 보간법 활용]
$i-phone: "only screen and (max-width: 320px)";
@media #{i-phone} {
background: black;
}
[사용자 정의 함수]
-
반드시 return 키워드가 있어야 계산 결과를 돌려받을 수 있다.
-
grid-width
@function grid-width($n:1) {
// 연산 결과 반환(@return)
@return $n * $unit-width + ($n - 1) * $gutter-width;
}
div {
// grid-width 함수 호출 결과 값 반환(전달인자 5)
width: grid-width(5); // 5 * 40 + (5-1) * 10 = 240px
}
- px 값을 em 단위로 변경하는 함수
@function px2em($font_size, $base_font_size: 16) {
@return $font_size / $base_font_size + em;
}
p {
font-size: px2em(12, 20); // 12/20 + em = 0.6em
}
- 단위 제거 함수
@function deUnit($value) {
@return ($value / ($value * 0 + 1))
}
p {
font-size: PX2REM(20px);
}
[색상 관련 내장 함수]
- 채도(saturation) 변경
$base-color: #000;
.saturate {
color: saturate($base-color, 20%);
}
- 휘도(lightness) 변경
$base-color: #000;
.darken {
color: darken($base-color, 10%);
}
- alpha + 불투명도를 증가시킨다.(더 불투명해진다)
$base-color: #000;
.opacify {
color: opacify($base-color, 0.3);
}
- alpha - 불투명도를 감소시킨다.(더 투명해진다)
$base-color: #000;
.transparentize {
color: transparentize($base-color, 0.25);
}