CSS/SCSS

SCSS 문법 알아보기 2

IT Blue 2021. 6. 27. 21:31

 

반복문

 

/* SCSS */

/*
    -js-
    for (let i = 0; i < 10; i += 1) {
        console.log(`loop-${i}`)
    }

*/

// 1~10까지 반복 = 10번 반복
@for $i from 1 through 10 {
    // #{변수} - 문자 보간
    .box:nth-child(#{$i}) {
        width: 100px * $i;
    }
}

/* CSS */

.box:nth-child(1) {
  width: 100px;
}

.box:nth-child(2) {
  width: 200px;
}

.box:nth-child(3) {
  width: 300px;
}

.box:nth-child(4) {
  width: 400px;
}

.box:nth-child(5) {
  width: 500px;
}

.box:nth-child(6) {
  width: 600px;
}

.box:nth-child(7) {
  width: 700px;
}

.box:nth-child(8) {
  width: 800px;
}

.box:nth-child(9) {
  width: 900px;
}

.box:nth-child(10) {
  width: 1000px;
}

 

함수

 

/* SCSS */

@mixin center {
    display: flex;
    justify-content: center;
    align-items: center;
}

/*
-함수 선언-
@function 함수명($매개변수....) {
    @return 값
}

-사용 방법
함수명(인수)
*/

@function ratio($size, $ratio) {
    @return $size * $ratio
}

.box {
    $width: 100px;
    width: $width;
    height: ratio($width, 1/2);
    @include center;
}

/* CSS */

.box {
  width: 100px;
  height: 50px;
  display: flex;
  justify-content: center;
  align-items: center;
}

 

색상 내장 함수

 

mix($색상1, $색상2)

- 색상1과 색상2를 혼합하여 색상을 나타냄

- 예시) background-color: mix($color, red);

 

lighten($색상, 값%)

- 색상을 값%만큼 색상을 더 밝게 나타냄

- 예시) background-color: lighten($color, 10%);

 

darken($색상, 값%)

- 색상을 값%만큼 색상을 더 어둡게 나타냄

- 예시) background-color: darken($color, 10%);

 

saturate($색상, 값%)

- 색상을 값%만큼 채도를 올려줌 (선명하게)

- 예시) background-color: saturate($color, 40%);

 

desaturate($색상, 값%)

- 색상을 값%만큼 채도를 낮춰줌

- 예시) background-color: saturate($color, 40%);

 

grayscale($색상);

- 색상을 회색으로 만듬

- 예시) grayscale($color);

 

invert($색상);

- 색상을 반전

- 예시) invert($color);

 

rgba($색상, 투명도)

- 색상을 투명하게 만듬

- rgba($color, .5)

 

가져오기

 

// 방법1
@import url("./sub.scss");

// 방법2 (url() 생략)
@import "./sub.scss";

// 방법3 (.scss 생략)
@import "./sub";

// 여러 개를 가져올 수 있다
@import "./sub", "./sub2.scss";

 

데이터 종류

 

$number: 1;         // .5, 100px, 1em 숫자 데이터
$string: bold;      // relative, "../images/a.png" 문자 데이터
$color: red;        // blue, #FFFF00, rgba(0,0,0,.1) 색상 데이터
$boolean: true;     // false 
$null: null;        // 빈 데이터
$list: orange, royalblue, yellow;   // 배열 데이터
$map: (                             // 객체 데이터
  o: orange,
  r: royalblue,
  y: yellow
);

 

반복문 @each

 

/* SCSS */

$list: orange, royalblue, yellow;   // 배열 데이터

// @each 변수명 in 배열데이터명
@each $c in $list {
    .box {
        color: $c;
    }
}

/* CSS */

.box {
  color: orange;
}

.box {
  color: royalblue;
}

.box {
  color: yellow;
}

 

/* SCSS */

$map: (                             // 객체 데이터
  o: orange,
  r: royalblue,
  y: yellow
);

// @each 키, 값 in 객체데이터명
@each $k, $v in $map {
    .box-#{$k} {
        color: $v;
    }
}

/* CSS */

.box-o {
  color: orange;
}

.box-r {
  color: royalblue;
}

.box-y {
  color: yellow;
}

 

재활용 @content

 

/* SCSS */

@mixin left-top {
    position: absolute;
    top: 0;
    left: 0;
    @content;
}
.container {
    width: 100px;
    height: 100px;
    @include left-top;
}
.box {
    width: 200px;
    height: 300px;
    // 추가적인 내용이 @content 부분에 들어간다
    @include left-top {
        bottom: 0;
        right: 0;
        margin: auto;
    }
}

/* CSS */

.container {
  width: 100px;
  height: 100px;
  position: absolute;
  top: 0;
  left: 0;
}

.box {
  width: 200px;
  height: 300px;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  margin: auto;
}