scss
중첩(Nesting)
<li>
<div class='hello'>HELLO</div>
<div class='world'>WORLD</div>
</li>
li{
.hello{color: royalblue}
.world{color:orange}
}
li .hello {
color: royalblue;
}
li .world {
color: orange;
}
- 상위 선택자를 반복하지 않고 중첩 기능을 이용하여 반복된 코드를 줄여준다.
상위 선택자 참조(&)
.btn{
position:absolute;
&.active{
color: red;
}
}
.btn {
position: absolute;
}
.btn.active {
color: red;
}
.fs{
&-small{font-size: 12px;}
&-medium{font-size: 14px;}
}
.fs-small {
font-size: 12px;
}
.fs-medium {
font-size: 14px;
}
중첩된 속성(네임스페이스)
.box{
font: {
weight: bold;
size: 10px;
family: sans-serif;
};
margin: {
top: 10px;
left: 20px;
};
}
.box {
font-weight: bold;
font-size: 10px;
font-family: sans-serif;
margin-top: 10px;
margin-left: 20px;
}
- 반복적으로 사용되는 네임스페이스를 중첩된 속성으로 사용한다.
변수(variables)
$size: 100px;
.container {
$sizeD: 200px;
position: fixed;
top: $size;
.item {
width: $size;
height: $sizeD;
transform: translateX($size);
}
}
.container {
position: fixed;
top: 100px;
}
.container .item {
width: 100px;
height: 200px;
transform: translateX(100px);
}
- $변수명: 반복되는 코드 > 재활용을 위해 변수를 만들어 사용할 수 있다.
- 변수는 선언된 범위에서 유효 범위를 가진다.
연산
div{
width: 20px + 20px;
height: 40px - 10px;
font-size: 10px * 2;
margin: (30px / 2);
margin: $size / 2;
padding: 20px % 7;
}
div {
width: 40px;
height: 30px;
font-size: 20px;
margin: 15px;
margin: 50px;
padding: 6px;
}
- 산술 연산에서는 단위를 같게 해야한다.
- 단위가 다를 경우 calc(100% - 100px)를 이용한다.
재활용(mixin)
@mixin center{display: flex; justify-content: center;align-items: center}
@mixin box($size: 100px){width: $size; height: $size;}
.container {
@include center;
@include box(200px);
width: 200px;
height: 200px;
background-color: orange;
}
.container {
display: flex;
justify-content: center;
align-items: center;
width: 200px;
height: 200px;
background-color: orange;
}
- 변수와 비슷하지만 반복되는 스타일 속성을 묶어서 재활용이 가능하다.
- @mixin 이름(인수) : mixin을 함수처럼 사용하여 인수를 통해 매개변수를 적용할 수 있다.
- 매개변수에 기본값을 지정하면 별도 인수를 전달하지 않아도 적용할 수 있다.
- 매개변수가 여러 개일 때, 갯수를 맞춰줘야 하고, 특정 매개변수의 값을 적용하고 싶을 때는 키워드 인수로 전달한다.
반복
@for $i from 1 through 3 {
.box:nth-child(#{$i}) {
width: 100px;
}
}
.box:nth-child(1) {
width: 100px;
}
.box:nth-child(2) {
width: 100px;
}
.box:nth-child(3) {
width: 100px;
}
함수
@function ratio($size, $ratio) {
@return $size * $ratio
}
.box{
$width: 100px;
width: $width;
height: ratio($width, 1/2);
}
.box {
width: 100px;
height: 50px;
}
색상 내장 함수
mix(royalblue, red)
lighten(royalblue, 10%)
darken(royalblue, 10%)
saturate(royalblue, 10%)
desaturate(royalblue, 10%)
grayscale(royalblue)
invert(royalblue)
rgba(royalblue, .5)
가져오기
- scss 파일 내부에서 다른 scss 파일 가져오기
@import './sub', './sub2'
scss 데이터의 종류
$number: 1;
$string: bold;
$color: red;
$boolean: true;
$null: null;
$list: orange, royalblue, yellow;
$map: (
o: orange,
r: royalblue,
y: yellow
);
each
@each $c in $list {
.box{
color: $c;
}
}
@each $key, $value in $map {
.box-#{$key} {
color: $value;
}
}
.box {
color: orange;
}
.box {
color: royalblue;
}
.box {
color: yellow;
}
.box-o {
color: orange;
}
.box-r {
color: royalblue;
}
.box-y {
color: yellow;
}
@content
@mixin left-top{
position:absolute;
top:0;
left: 0;
@content;
}
.container {
width: 100px;
height: 100px;
@include left-top {
bottom: 0;
right: 0;
margin: auto;
}
}
.container {
width: 100px;
height: 100px;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
margin: auto;
}
- 기본적인 mixin에 추가적인 속성을 부여해준다.