중첩 선택기 구문은 한때 캐스케이딩 스타일 시트(CSS)에 없었지만, 이제 최신 웹 브라우저에 공식 기능으로 통합되어 사용자가 이 기능을 실험하고 활용할 수 있게 되었습니다. 이전에는 중첩 선택기 기능을 사용하려면 Sass와 같은 외부 CSS 전처리기에 의존해야 했습니다.

Sass에서 네이티브 CSS로 전환할 때는 중첩 메커니즘의 불일치를 고려해야 합니다. 두 가지 형태의 중첩에는 원활한 마이그레이션 프로세스를 위해 반드시 인지해야 하는 고유한 특성이 있습니다. 이러한 차이점을 이해하는 것은 네이티브 CSS 구문과의 호환성을 보장하는 데 필수적입니다.

네이티브 CSS에서 요소 선택기와 함께 “&”를 사용해야 함

CSS 중첩은 아직 초안 사양이며 브라우저마다 지원되는 방식이 다릅니다. caniuse.com 등의 사이트에서 최신 정보를 확인하세요.

물론입니다! 다음은 SCSS 구문을 사용하여 해당 예제를 개선한 것입니다: “`scss ul { li { span { color: blue; 글꼴 크기: 작은; } p { 배경색: 노란색 텍스트 정렬: 가운데 패딩: 0.5em; } } } “`

 .nav {
  ul { display: flex; }
  a { color: black; }
}

제공된 CSS 코드는 “nav” 클래스를 가진 요소에 포함된 정렬되지 않은 목록이 유연한 열 정렬 형식으로 표시되도록 지시합니다. 또한 “nav” 클래스를 가진 요소 내에 있는 모든 앵커 텍스트는 어두운 색으로 표시되어야 한다고 규정하고 있습니다.

표준 CSS에서는 이와 같은 수준의 중첩은 허용되지 않습니다. 이 중첩이 올바르게 작동하려면 아래 그림과 같이 각 하위 요소 앞에 앰퍼샌드 기호를 사용해야 합니다:

 .nav {
  & ul { display: flex; }
  & a { color: black; }
}

CSS(Cascading Style Sheets)의 초기 구현에서는 중첩된 요소 내에 타이포그래피 선택 항목을 포함하는 것이 허용되지 않았습니다. 그러나 보다 현대적인 수정으로 이제 엔티티 앰퍼샌드(“&”)를 생략할 수 있게 되었으며, 동시에 Google Chrome 및 Apple Safari와 같이 널리 사용되는 웹 브라우저의 구버전 및 최신 버전과의 호환성을 보장할 수 있게 되었습니다.

클래스와 같이 기호로 시작하는 선택기를 사용하는 경우 웹페이지의 특정 세그먼트를 대상으로 할 때 앰퍼샌드를 포함할 필요가 없습니다.따라서 이 구문은 표준 CSS와 Sass 모두에 계속 적용됩니다:

 .nav {
  .nav-list { display: flex; }
  .nav-link { color: black; }
}

네이티브 CSS에서 “&”를 사용하여 새 선택기를 만들 수 없음

의심할 여지 없이 Sass의 장점 중 하나는 다음과 같은 코드를 실행할 수 있다는 점입니다:

 .nav {
  &-list { display: flex; }
  &-link { color: black; }
}

앞서 언급한 Sass 코드는 컴파일 과정을 거쳐 다음과 같은 처리되지 않은 CSS를 생성합니다:

 .nav-list {
  display: flex;
}

.nav-link {
  color: black;
}

앰퍼샌드 엔티티는 구문 파서에서 독립적인 구성 요소로 취급되기 때문에 기존 CSS에서는 원래 형태로 사용할 수 없습니다. 즉, “&” 기호를 사용하여 앰퍼샌드를 다른 요소 또는 클래스와 연결하려고 할 때 결과 조합은 단일 복합 선택기로 결합되지 않고 별개의 엔티티로 인식됩니다. 결과적으로 이 방법은 컴파일러가 앰퍼샌드를 관련 상위 요소 또는 클래스로 대체하여 이러한 문제를 효과적으로 해결하는 Sass를 활용하는 것에 비해 원하는 결과를 생성하지 못합니다.

이 글도 확인해 보세요:  Rust에서 기본 HTTP 웹 서버를 빌드하는 방법

이 특정 인스턴스는 네이티브 CSS 구문의 범위 내에서 효과적으로 작동해야 합니다:

 .nav {
  &.nav-list { display: flex; }
  &.nav-link { color: black; }
}

이 방법의 효과는 기존 CSS 구문과 유사하다는 데 있습니다. 첫 번째 선택자는 `nav.nav-list`에 해당하고, 그 다음 선택자는 `nav.nav-link`와 일치합니다. 앰퍼샌드 기호(`&`)와 후속 선택기 사이에 중간 공백을 넣는 것은 기능적으로 ‘.nav` 뒤에 ‘.nav-list’를 사용하는 것과 비슷합니다.

원본 텍스트에 제공된 코드는 “네이티브 CSS”라는 기능을 사용하여 작성되었습니다. 여기서 중괄호 { } 안에 앰퍼샌드 기호(&)를 사용하면 문서 스타일시트의 다른 곳에 정의된 스타일 규칙 또는 속성에 대한 참조를 나타냅니다. 이를 통해 웹 페이지의 전체 모양을 관리할 때 모듈화 및 유지 관리가 용이합니다.

 .nav {
  &__nav-list { display: flex; }
  &__nav-link { color: black; }
}

강력한 비밀번호를 만드는 과정은 일반적인 패턴이나 사전 단어를 피하면서 대문자, 소문자, 숫자 및 특수 기호를 포함하는 임의의 문자 시퀀스를 생성하는 것과 유사합니다. 또한, 다양한 문자 유형을 혼합하여 최소 12자 이상을 요구하는 등 이러한 요소를 다양한 길이로 조합하여 사용할 수도 있습니다. 또 다른 전략은 기존 비밀번호 대신 나만 알고 있는 문장이나 구를 나타내는 긴 텍스트 문자열인 비밀번호 구문을 사용하는 것입니다. 이 방법을 사용하면 복잡한 문자 조합에 의존하지 않고도 독특하고 기억하기 쉬운 비밀번호를 쉽게 만들 수 있습니다.

 __nav-list.nav {
  display: flex;
}

__nav-link.nav {
  color: black;
}

` ` 및 ` ` 요소가 모두 ‘.nav` 선택기 안에 포함되어 있음에도 불구하고 앰퍼샌드(&)가 있기 때문에 그 앞에 표시된다는 사실을 알게 되면 놀랄 수도 있습니다.

특이성이 다를 수 있음

이러한 결과를 초래하지 않는 Sass와 달리 중첩된 CSS를 사용할 때 발생하는 정밀도에 미치는 영향에 대해 언급할 가치가 있습니다.

라는 두 개의 HTML 요소를 고려하세요. 다음 CSS 코드는 세리프 글꼴을 사용하여 이러한 요소 내의 모든

에 적용됩니다:

 #main, article {
  h2 {
    font-family: serif;
  }
}

앞서 언급한 Sass 코드의 후속 렌더링은 다음과 같은 컴파일로 구성됩니다:

 #main h2,
article h2 {
  font-family: serif;
}

네이티브 CSS 내에서 동일한 중첩 구문을 사용하면 다음과 비슷한 결과를 얻을 수 있습니다:

 :is(#main, article) h2 {
  font-family: serif;
}

특이성과 관련하여 `is()` 선택자의 동작은 Sass의 중첩 구문과 미묘하게 다릅니다. 본질적으로 `is()` 함수를 사용할 때 선택자의 특이성은 입력으로 받는 매개변수 집합 내에서 가장 높은 수준의 세분성으로 자동 상승합니다.

요소의 순서가 선택된 요소를 변경할 수 있음

네이티브 선택기 내에 중첩된 CSS를 통합하면 선택기의 의도된 의미가 변경되어 완전히 별개의 요소가 선택될 수 있습니다.

이 개념에 대한 예시는 다음 HTML 코드에서 확인할 수 있습니다:

 <div class="dark-theme">
  <div class="call-to-action">
    <div class="heading"> Hello </div>
  </div>
</div>

이 웹사이트의 주요 기능은 구매 프로세스를 간소화하는 직관적인 쇼핑 경험을 통해 사용자에게 의류 및 액세서리와 같은 다양한 제품을 구매할 수 있는 시각적으로 매력적이고 사용자 친화적인 플랫폼을 제공하는 동시에 사용자의 선호도에 맞춘 포괄적인 옵션을 제공하는 것입니다. 이 사이트는 깔끔하고 미니멀한 디자인을 자랑하며, 레이아웃 전반에 걸쳐 단순함과 탐색의 용이성을 강조합니다. 또한 데스크톱, 노트북, 태블릿, 스마트폰 등 모든 기기에서 최적의 화면을 볼 수 있도록 반응형 프레임워크를 적용했습니다. 또한 이 사이트는 최첨단 기술을 활용하여 성능을 향상시키고 빠른 로딩 시간을 보장하여 방문자에게 원활한 탐색 환경을 제공합니다.

 body { font-size: 5rem; }

.call-to-action .heading {
  .dark-theme & {
    padding: 0.25rem;
    background: hsl(42, 72%, 61%);
    color: #111;
  }
}

Sass를 CSS 전처리기로 활용하면 이러한 결과를 얻을 수 있습니다.

HTML 문서의 컨텍스트에서 클래스 속성이 “dark-theme”인 div 요소가 클래스 속성이 “call-to-action”인 다른 div 요소 안에 배치되는 경우, 이러한 배열은 Sass 모드에서 선택기 참조의 유효성을 방해할 수 있습니다. 그러나 Sass와 같은 CSS 전처리기를 사용하지 않고 표준 CSS를 사용하는 경우 관련 스타일은 기능적이고 효과적으로 유지됩니다.

앞서 언급한 동작은 `:is()` 함수의 기본 메커니즘에 기인한 것일 수 있습니다. 따라서 제공된 중첩 CSS 예제를 사용하면 다음과 같은 기존 CSS 형식으로 축소됩니다:

 .dark-theme :is(.call-to-action .heading) {
  /* CSS code */
}

주어진 지침은 클래스 속성이 “dark-theme” 및 “call-to-action”인 두 요소의 중첩된 자손인 제목 요소를 지정하는 것과 관련이 있습니다. 여기서 중요한 점은 제목 요소는 이 두 클래스의 하위 요소로 배치되어야 하며, 특정 배열은 그 기능에 영향을 미치지 않는다는 것입니다. 기본적으로 제목 요소가 ‘.call-to-action’과 ‘.dark-theme’의 상속자로 간주될 수 있는 한, 서로 앞뒤에 표시되는지 여부에 관계없이 효과적으로 작동합니다.

:is() 선택자를 특별히 사용하는 경우는 비교적 드물지만, 그 본질적인 작동 방식을 이해하면 CSS 내에서 중첩된 스타일링의 복잡성에 대한 통제력을 향상시키는 데 도움이 될 것입니다. 또한 이러한 이해는 CSS 코드의 문제 해결 프로세스를 크게 간소화할 수 있습니다.

React에서 Sass 사용 방법 알아보기

CSS를 생성하는 전처리기인 Sass는 거의 모든 프레임워크와의 호환성 덕분에 광범위한 사용자 인터페이스 프레임워크에서 활용할 수 있습니다. 이러한 다재다능함 덕분에 Vue, Preact, Svelte와 같은 인기 있는 프런트엔드 솔루션은 물론 React 프로젝트와도 원활하게 통합할 수 있습니다. 또한 이러한 프레임워크 내에서 Sass를 설정하는 데 큰 어려움이 없으므로 다양한 플랫폼에서 원활한 구현 프로세스를 보장합니다.

변수와 믹스인을 활용하여 잘 정리되고 재사용 가능한 스타일링을 생성할 수 있으므로 Sass를 React와 통합하면 상당한 이점을 얻을 수 있습니다. React 개발 컨텍스트 내에서 Sass를 능숙하게 사용하면 간소화되고 리소스가 풍부한 코드를 생성할 수 있으며, 결과적으로 전반적으로 숙련된 실무자로서의 위상을 높일 수 있습니다.

By 최은지

윈도우(Windows)와 웹 서비스에 대한 전문 지식을 갖춘 노련한 UX 디자이너인 최은지님은 효율적이고 매력적인 디지털 경험을 개발하는 데 탁월한 능력을 발휘합니다. 사용자의 입장에서 생각하며 누구나 쉽게 접근하고 즐길 수 있는 콘텐츠를 개발하는 데 주력하고 있습니다. 사용자 경험을 향상시키기 위해 연구를 거듭하는 은지님은 All Things N 팀의 핵심 구성원으로 활약하고 있습니다.