Zeno ZENO

Part 3:CSS 네스팅(Nesting)과 & 선택자

2026년 현재 모든 브라우저에서 지원되는 CSS 네스팅 문법과 & 선택자를 자세히 알아봅니다. Sass 네스팅과의 차이점과 실전 활용법까지 포함합니다.

Part 3: CSS 네스팅(Nesting)과 & 선택자

2023년 말부터 본격적으로 지원되기 시작한 CSS 네스팅(Nesting)은 많은 개발자들이 “이제 Sass 없이도 충분하다”고 느끼게 만든 가장 큰 이유 중 하나입니다. 2026년 현재는 Chrome, Firefox, Safari, Edge 모두에서 완전히 지원되고 있으며, 실무에서도 충분히 안전하게 사용할 수 있는 수준에 도달했습니다.

이번 파트에서는 CSS 네스팅의 기본 문법부터 & 선택자의 정확한 사용법, Sass 네스팅과의 차이점, 그리고 실전에서 어떻게 활용하는지까지 자세히 알아보겠습니다.

1. CSS 네스팅이란?

CSS 네스팅은 HTML 구조처럼 CSS를 중첩해서 작성할 수 있게 해주는 기능입니다. 기존에는 부모 요소와 자식 요소의 스타일을 각각 따로 작성해야 했지만, 이제는 부모 선택자 안에 자식 스타일을 직접 넣을 수 있습니다.

.card {
  padding: 24px;
  background: white;
  border-radius: 16px;
  box-shadow: 0 10px 15px rgb(0 0 0 / 0.1);

  /* 자식 요소 스타일 */
  .title {
    font-size: 1.25rem;
    font-weight: 700;
    margin-bottom: 8px;
    color: #111827;
  }

  .description {
    color: #64748b;
    line-height: 1.6;
  }
}

위 코드는 실제로 브라우저에서 아래와 같이 해석됩니다.

.card { ... }
.card .title { ... }
.card .description { ... }

이렇게 작성하면 HTML 구조와 CSS 구조가 비슷해져서 가독성이 크게 향상됩니다.

2. & 선택자의 역할과 사용법

&는 현재 부모 선택자를 가리키는 특수한 기호입니다. 특히 가상 클래스(:hover, :focus, :active)나 수정자 클래스(.active, .disabled)를 사용할 때 필수적으로 사용됩니다.

.card {
  /* 호버 효과 */
  &:hover {
    transform: translateY(-4px);
    box-shadow: 0 20px 25px rgb(0 0 0 / 0.15);
  }

  /* 활성 상태 */
  &.active {
    border: 2px solid #0a66c2;
  }

  /* 비활성 상태 */
  &.disabled {
    opacity: 0.6;
    pointer-events: none;
  }

  /* 가상 요소 */
  &::before {
    content: '';
    position: absolute;
    top: -1px;
    left: -1px;
  }
}

최신 브라우저에서는 단순한 자식 선택자의 경우 &를 생략해도 동작하지만, 가상 클래스나 수정자 클래스를 사용할 때는 &를 명시하는 것이 더 안전하고 가독성도 좋습니다.

3. Sass 네스팅과 CSS 네스팅의 중요한 차이점

두 기술은 비슷해 보이지만, 내부적으로 처리되는 방식에 차이가 있습니다.

  • Sass 네스팅: 선택자를 문자 그대로 붙여서 컴파일합니다. 특정도가 그대로 유지됩니다.
  • CSS 네스팅: 부모 선택자를 내부적으로 :is()로 감싸서 처리합니다. 이 때문에 특정도가 달라질 수 있습니다.

대부분의 일반적인 사용(.card .title, &:hover)에서는 큰 문제가 없지만, 복잡한 선택자 조합을 할 때는 이 차이를 이해하고 있어야 합니다.

4. 실전 컴포넌트 예제

.product-card {
  display: flex;
  flex-direction: column;
  border-radius: 16px;
  overflow: hidden;
  background: white;
  transition: all 0.2s ease;

  &:hover {
    box-shadow: 0 20px 25px rgb(0 0 0 / 0.15);
    transform: translateY(-4px);
  }

  .image {
    width: 100%;
    aspect-ratio: 16 / 9;
    object-fit: cover;
  }

  .content {
    padding: 20px;

    .title {
      font-size: 1.1rem;
      font-weight: 600;
      margin-bottom: 8px;
      color: #111827;
    }

    .price {
      font-size: 1.25rem;
      font-weight: 700;
      color: #0a66c2;
    }

    .description {
      color: #64748b;
      font-size: 0.95rem;
      line-height: 1.5;
    }
  }
}

5. 정리

이번 파트에서 배운 내용을 정리하면:

  • CSS 네스팅은 HTML 구조처럼 CSS를 중첩해서 작성할 수 있게 해준다.
  • &는 현재 부모를 가리키며, 가상 클래스와 수정자 클래스에서 주로 사용한다.
  • 2026년 기준 모든 주요 브라우저에서 안전하게 사용할 수 있다.
  • Sass 네스팅과는 특정도 처리 방식에서 차이가 있다.

다음 파트에서는 :has(), :is(), :where() 등 최신 강력 선택자들을 배워보겠습니다.

AD

제휴 광고

일부 링크는 제휴 링크이며, 구매 또는 가입 시 일정 수수료를 받을 수 있습니다.

AD

'2026 모던 CSS' 카테고리의 다른 글

전체보기