- Published on
CSS :has() 가상 클래스, 부모 선택의 혁신
- Authors
- Name
- Shortie
- CSS :has() 가상 클래스로 부모 요소 선택의 혁신적 변화
- 자식 요소의 상태에 따른 동적 스타일링 구현 가능
- 2023년 가장 많이 채택된 CSS 기능으로 선정된 획기적 선택자
CSS 개발자들에게 오랫동안 골치 아픈 문제였던 부모 요소 선택이 드디어 해결되었습니다. :has() 가상 클래스의 등장으로 더 이상 자바스크립트의 도움 없이도 부모나 조상 요소를 선택할 수 있게 되었죠. 이 혁신적인 기능이 얼마나 기다려졌던 것인지, 2023년 State of JS 설문조사에서 가장 많이 채택된 기능으로 선정되기도 했습니다.
:has() 가상 클래스의 기본 문법은 매우 직관적입니다. 'selector1:has(selector2)'와 같은 형태로 사용하며, selector1으로 선택된 요소 내부에 selector2에 해당하는 요소가 있을 경우 스타일이 적용됩니다. 특히 주목할 점은 스타일이 두 번째 선택자가 아닌 첫 번째 선택자에 적용된다는 것입니다.
실제 활용 예시를 살펴보면 그 유용성이 더욱 돋보입니다. 예를 들어 'p:has(a)'는 내부에 링크가 포함된 문단을 선택하고, 'form:has(input:disabled)'는 비활성화된 입력 필드가 있는 폼을 선택합니다. 더 나아가 >, +, ~ 등의 결합자를 활용하면 직계 부모나 이전 형제 요소까지 선택할 수 있어 활용도가 무궁무진합니다.
가장 흥미로운 활용 사례는 자식 요소의 상태에 따른 부모 요소 스타일링입니다. 예를 들어 버튼이 눌린 상태(:active)에 따라 상위 컨테이너의 배경색을 동적으로 변경할 수 있습니다. 이전에는 자바스크립트로 처리해야 했던 이러한 인터랙션을 이제는 순수 CSS만으로 구현할 수 있게 된 것이죠.
div:has(.red:active) { background: red; }
div:has(.green:active) { background: green; }
div:has(.blue:active) { background: blue; }
이처럼 :has() 가상 클래스는 CSS의 표현력을 한층 더 끌어올렸습니다. 특히 조상 요소 선택, 이전 요소 선택, 자식 상태에 따른 부모 스타일링 등 기존에 불가능했던 작업들을 가능하게 만들었습니다. 이는 웹 개발자들에게 더 많은 창의적 자유를 제공하며, 자바스크립트 의존도를 줄여 성능 향상에도 기여할 수 있습니다.
현재 대부분의 모던 브라우저에서 지원되는 이 기능은 이미 실무에서도 안전하게 사용할 수 있는 단계에 이르렀습니다. CSS를 사용하는 모든 개발자들이 이 강력한 도구를 활용하여 더욱 효율적이고 우아한 코드를 작성할 수 있게 되었다는 점에서, :has() 가상 클래스의 등장은 프론트엔드 개발의 새로운 장을 열었다고 해도 과언이 아닐 것입니다.