Skip to content
On this page

Sass nesting

Title
Sass nesting
Category
CSS
Tags
Aliases
Sass nesting
Created
4 years ago
Updated
last year

Sass(SCSS) Syntax - 2. 중첩

❗️ 해당 글은 패스트캠퍼스 - 프론트엔드 개발 강의에서 HTML & CSS, SASS(SCSS) Part의 박영웅 강사님의 강의자료(Sass(SCSS) 완전 정복!)를 보며 정리한 것입니다.

중첩(Nesting)

Sass(SCSS)는 중첩 기능을 제공해주어 상위 선택자의 반복을 피하고 편리하고 직관적으로 복잡한 구조의 CSS를 작성할 수 있다.

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

컴파일하면

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

상위 선택자 참조 & (Ampersand)

중첩 안에서 & 키워드는 상위(부모) 선택자를 참조하여 치환한다.

☝️ & == ‘상위(부모) 선택자’

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

.list {
  li {
    &:last-child {
      margin-right: 0;
    }
  }
}
.btn {
  position: absolute;
  &.active {
    color: red;
  }
}

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

컴파일하면

.btn {position: absolute;}.btn.active {color: red;}.list li:last-child {margin-right: 0;}
.btn {position: absolute;}.btn.active {color: red;}.list li:last-child {margin-right: 0;}

& 키워드가 상위(부모) 선택자로 치환하는 개념이기 때문에 다음과 같이 응용하는것도 가능하다.

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

컴파일하면

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

중첩 벗어나기 @at-root

@at-root 는 중첩에서 벗어나고 싶을 때 사용하는 키워드이다.

중첩에서 벗어나야 하는 경우의 한 가지 예를 살펴보면,

.section {
  $width: 100px;
  $height: 200px;
  width: $width;
  height: $height;
  .item {
    width: $width;
    height: $height;
  }
}
.section {
  $width: 100px;
  $height: 200px;
  width: $width;
  height: $height;
  .item {
    width: $width;
    height: $height;
  }
}

$width , $height 와 같이 이름 앞에 $ 가 붙은 값은 변수로 사용할 수 있다.

🔗 Sass(SCSS) Syntax - 3. 변수 참조

그런데 이 변수는 유효범위가 있어서 변수가 선언된 .section 의 블록 ( {} ) 내부에서만 사용할 수 있고, 그 밖에서 사용하면 컴파일되지 않는다.

그래서 .section 의 하위 요소는 아니지만, 변수를 사용하기 위해 @at-root 키워드를 사용하면 유용하다.

.section {
  $width: 100px;
  $height: 200px;
  width: $width;
  height: $height;
  .item {
    width: $width;
    height: $height;
  }
  @at-root .box {
    width: $width;
    height: $height;
  }
}
.section {
  $width: 100px;
  $height: 200px;
  width: $width;
  height: $height;
  .item {
    width: $width;
    height: $height;
  }
  @at-root .box {
    width: $width;
    height: $height;
  }
}

컴파일하면

.section {width: 100px;height: 200px;}.section .item {width: 100px;height: 200px;}.box {width: 100px;height: 200px;}
.section {width: 100px;height: 200px;}.section .item {width: 100px;height: 200px;}.box {width: 100px;height: 200px;}

중첩된 속성

font- , margin- 등 동일한 네임 스페이스를 가지는 속성들(같은 단축 속성 아래에 있는 개별 속성들)을 사용할 때 중복을 줄이기 위해 사용하는 방법

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

☝️ (속성의 접두사): {}

컴파일하면

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

Reference

패스트캠퍼스 - 프론트엔드 개발 강의 - HTML & CSS, SASS(SCSS) Part by ParkYoungWoong

Sass(SCSS) 완전 정복!

Released under the MIT License.