Hi, I’m Kang Byeong-hyeon.

..

[카카오 테크 캠퍼스 2기] 1단계 4주차 WIL - SCSS




image.png




SCSS(SASS)를 사용하는 이유?

표준 CSS로 작성하면서 반복되는 선택자로 인해 코드가 길어지는 문제가 발생하곤한다.

SCSS와 같은 CSS Preprocessor를 사용하면 이러한 문제점을 개선할 수 있다.




CSS Preprocessor란?

CSS Preprocessor는 전처리기라는 의미로, CSS가 동작하기 전에 사용하는 기능을 의미한다.

전처리기는 CSS 문법과 굉장히 유사하지만 선택자의 중첩(Nesting), 조건문, 반복문, 다양한 단위(Unit)의 연산 등 표준 CSS 보다 훨씬 많은 기능을 사용해서 편리하게 작성할 수 있다.

이렇게 작성한 전처리기 코드를 웹에서 동작 가능한 표준 CSS로 컴파일하는 과정을 거치게 된다.

이 컴파일은 Vite, Parcel, Webpack과 같은 번들러를 통해 수행하게 된다.




주석




상위(부모) 선택자 참조

.btn {
  position: absolute;
  &.active {
    // .btn.active
    color: red;
  }
}

.list {
  li {
    &:last-child {
      // li:last-child
      margin-right: 0;
    }
  }
}




중첩된 속성

네임스페이스가 동일한 속성인 경우 중첩기능을 통해 설정이 가능하다.

.box {
  font: {
    weight: 700;
    size: 10px;
    family: sans-serif;
  }
  margin: {
    top: 10px;
    left: 20px;
  }
  padding: {
    top: 10px;
    bottom: 40px;
    left: 20px;
    right: 30px;
  }
}




변수

.conatiner {
  $size: 200px; // .container 내부의 유효범위를 가짐.
  position: fixed;
  top: $size; // 200px
  .item {
    $size: 100px; // 재할당
    width: $size; // 100px
    height: $size; // 100px
    transform: translateX($size);
  }
}




산술연산

div {
  // $size: 30px;
  width: 20px + 20px;
  height: 40px - 10px;
  font-size: 10px * 2;
  // 1. margin: (30px / 2);
  // 2. margin: $size / 2;
  padding: 20px % 7;
}

span {
  font-size: 10px;
  line-height: 10px;
  font-family: serif;
  font: 10px / 10px; // font-size / line-height
}

div {
  width: calc(100% - 200px);
}




재활용(@mixin)

재활용 될 수 있는 구조를 @mixin을 통해 정의하여 코드를 재활용할 수 있다.

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

.container {
  @include center;
}

@mixin box($size: 100px, $color: tomato) {
  width: $size;
  height: $size;
  background-color: $color;
}

.container {
  @include box(200px, red);

  .item {
    @include box($color: green); // 키워드 인수
  }
}




반복문

@for을 통해 반복문으로 스타일링 설정이 가능하다.

@for $i from 1 through 10 {
  .box:nth-child(#{$i}) {
    width: 100px * $i;
  }
}




함수

@function를 통해 원하는 값을 인자를 활용하고 처리하여 반환할 수 있다.

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

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




색상 내장 함수




가져오기

@import './sub.scss', './sub2.scss';

@each

list, map 형태의 데이터를 @each를 통해 순회해서 값을 설정할 수 있다

$map: (
  o: orange,
  r: royalblue,
  y: yellow,
);

@each $k, $v in $map {
  .box-#{$k} {
    color: $v;
  }
}




@content

@mixin으로 정의된 내용에서 @content를 통해 내용을 추가할 수 있다.

@mixin left-top {
  position: absolute;
  top: 0;
  left: 0;
  @content;
}

.box {
  width: 200px;
  height: 300px;

  @include left-top {
    bottom: 0;
    right: 0;
    margin: auto;
  }
}




소감

이번 주차는 무심코 지나칠 수 있는 자바스크립트 개념을 되짚어보고, SCSS의 사용법을 자세히 익힐 수 있었다.

자바스크립트에서 변수와 함수를 선언할 때 발생하는 호이스팅, 그리고 원시 데이터와 참조 데이터의 불변성으로 인한 복사에 대한 개념을 다시 한 번 상기할 수 있었다.

또한 SCSS를 배우면서, 기존의 표준 CSS에서 반복되는 선택자와 설정들을 재활용하고, 내장 함수를 통해 표준 CSS보다 간결하고 편리하게 스타일을 작성할 수 있다는 것을 알게 되었다.