Web-Frontend/CSS

[CSS] Sass와 SCSS

서노리 2023. 11. 7. 17:46
반응형

순수 CSS는 프로젝트의 규모가 커질수록 요수보수가 어려워진다는 한계때문에 CSS-In-JS나 SCSS와 같은 기술의 사용이 대세가 되었다. 이 글을 통해 기존 CSS의 문제점을 개선한 SAAS와 SCSS에 대해서 알아보고 그중 더 많이 사용하는 SCSS에 대해 더 자세히 정리해볼 것이다.

 

Sass

Sass란 CSS 전처리기로써, 변수, 상속, 중첩 등의 다양한 기능을 제공한다. Sass로 작성한 코드는 CSS로 컴파일을 거친 뒤 실행된다. 

 

SCSS

SCSS란 Sass의 일종으로 Sass의 모든 기능을 지원하며, 기존 CSS와 비슷한 문법을 사용한다는 점이 특징이다. 이러한 특징때문에 Sass보다 SCSS를 더 많이 선호하는 추세이다.

 

※ Sass와 SCSS 문법 비교

  • Sass: 중괄호가 아닌 들여쓰기 사용
  • SCSS: CSS처럼 중괄호와 세미콜론 사용
/* Sass */
$font-stack: Helvetica
$primary-color: #333

body
  font: $font-stack
  color: $primary-color
    
    
/* SCSS */
$font-stack: Helvetica;
$primary-color: #333;

body {
  font: $font-stack;
  color: $primary-color;
}

SCSS의 문법

1. 변수

SCSS는 다양한 데이터 타입을 정의하고 있어, 이를 변수처럼 활용할 수 있다. 따라서 자주 사용하는 색이나 폰트 등등을 변수로 지정하여 재사용하는 것이 가능하다. 다만 변수 이름 앞에는 항상 $를 붙여야한다.

/* SCSS */
$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body {
  font: 100% $font-stack;
  color: $primary-color;
}

 

2. 중첩

중첩을 통해 상위 선택자의 반복을 줄일 수 있다.

/* SCSS */

.section {
  width: 100%;
  
  .list {
    padding: 20px;
    
    li {
      float: left;
    }
  }
}


/* Compile to CSS */

.section {
  width: 100%;
}

.section .list {
  padding: 20px;
}

.section .list li {
  float: left;
}

 

※ & (상위 선택자 참조)

중첩 내부에서 &는 상위(부모) 선택자로 치환되어 다음과 같이 사용할 수도 있다.

/* SCSS */

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

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


/* Compile to CSS */

.btn {
  position: absolute;
}

.btn.active {
  color: red;
}

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

 

또한 치환의 원리이기 때문에 다음과 같이 응용할 수도 있다.

/* SCSS */

.fs {
  &-small {
    font-size: 12px;
  }
  
  &-medium {
    font-size: 14px;
  }
  
  &-large {
    font-size: 16px;
  }
}


/* Compile to CSS */

.fs-small {
  font-size: 12px;
}

.fs-medium {
  font-size: 14px;
}

.fs-large {
  font-size: 16px;
}

 

3. 모듈화

@use를 사용하여 파일을 분할하고 모듈화 할 수 있다.

/* _base.scss */
$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body {
  font: 100% $font-stack;
  color: $primary-color;
}


/* styles.scss */
@use 'base';

.inverse {
  background-color: base.$primary-color;
  color: white;
}

 

4. 믹스인(Mixin)

Mixin은 재사용할 CSS 스타일을 정의할 수 있는 기능이다.

@mixin을 통해 스타일을 정의하고 @include를 통해 사용한다.

/* 선언 - @mixin */

@mixin large-text {
  font: {
    size: 22px;
    weight: bold;
    family: sans-serif;
  }
  color: orange;

  &::after {
    content: "!!";
  }

  span.icon {
    background: url("/images/icon.png");
  }
}


/* 사용 - @include */

h1 {
  @include large-text;
}

div {
  @include large-text;
}

 

5. 함수

함수를 정의하여 특정한 리턴값을 사용할 수 있다.

/* SCSS */

$max-width: 980px;

@function columns($number: 1, $columns: 12) {
  @return $max-width * ($number / $columns);
}

.box_group {
  width: $max-width;

  .box1 {
    width: columns(); // 1
  }
  
  .box2 {
    width: columns(8);
  }
  
  .box3 {
    width: columns(3);
  }
}

 

6. 조건

/* SCSS */
$width: 555px;

div {
  width: if($width > 300px, $width, null);
}

 

7. 반복

/* SCSS */
/* 1부터 3 직전까지 반복 (2번 반복) */

@for $i from 1 to 3 {
  .to:nth-child(#{$i}) {
    width: 20px * $i;
  }
}

 

반응형

'Web-Frontend > CSS' 카테고리의 다른 글

[CSS] position 속성의 display 속성값 변경  (0) 2024.01.13
[CSS] CSS 선택자 심화  (0) 2023.11.07