프론트엔드 개발 · 중급
CSS에서 선택자의 명시도(Specificity)는 어떻게 계산되며, 이를 효과적으로 관리하여 스타일 충돌을 피하고 원하는 스타일을 적용하는 방법은 무엇인가요? `!important`의 사용은 언제 권장되며, 어떤 부작용이 있을 수 있나요?
힌트 · 선택자 유형(인라인, ID, 클래스/속성/가상클래스, 태그/가상요소)에 따른 점수 계산 방식을 설명하고, `!important`가 가진 강제성과 남용 시 유지보수 어려움을 언급하세요.
명시도가중치인라인 스타일ID 선택자!important
모범답안
CSS에서 선택자 명시도는 스타일 규칙이 얼마나 구체적인지를 나타내는 척도입니다. 브라우저는 명시도가 높은 규칙을 우선 적용하여 스타일 충돌을 해결합니다.
명시도는 다음과 같이 계산됩니다. 인라인 스타일 > ID 선택자 > 클래스/속성/가상 클래스 선택자 > 태그/가상 요소 선택자 순으로 가중치가 높습니다. 같은 유형의 선택자가 많을수록 명시도는 높아집니다.
스타일 충돌을 피하려면 선택자를 최대한 간결하게 유지하고, 불필요한 중첩을 피하는 것이 좋습니다. CSS 변수나 클래스 명명 규칙을 활용하여 일관성을 유지하는 것도 중요합니다.
!important는 특정 스타일 규칙을 강제로 적용하는 데 사용되지만, 남용하면 스타일 관리가 매우 어려워집니다. 정말 필요한 경우 (예: 외부 라이브러리 스타일 오버라이드)에만 제한적으로 사용하는 것이 좋습니다. !important를 과도하게 사용하면 스타일 규칙의 우선순위를 예측하기 어려워져 유지보수성이 떨어지는 코드가 될 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 HTML / CSS 면접 질문
- CSS를 HTML 문서에 적용하는 세 가지 방법(인라인, 내부, 외부 스타일 시트)을 설명하고 각각의 장단점을 비교해주세요.
- CSS 선택자(Selector) 중 클래스(Class) 선택자와 ID 선택자의 차이점을 설명하고, 언제 어떤 선택자를 사용하는 것이 적절한지 예시를 들어주세요.
- CSS에서 'display' 속성의 주요 값들(block, inline, inline-block, none)에 대해 설명하고, 각각의 특징을 비교해주세요.
- CSS 박스 모델(Box Model)에서 `content-box`와 `border-box`의 차이점을 설명하고, 실제 웹 개발에서 `box-sizing` 속성을 어떻게 활용하여 레이아웃 문제를 해결할 수 있는지 구체적인 예를 들어 설명해주세요.
- Flexbox와 CSS Grid는 모두 레이아웃을 구성하는 강력한 도구입니다. 두 기술의 주요 차이점은 무엇이며, 각각 어떤 상황에서 더 적합하게 사용될 수 있는지 구체적인 사용 사례를 들어 설명해주세요.
- CSS `position` 속성 중 `static`이 아닌 다른 값을 가질 때 형성되는 포지셔닝 컨텍스트(Positioning Context)에 대해 설명하고, `z-index` 속성이 이 컨텍스트 내에서 어떻게 동작하는지 구체적인 예시와 함께 설명해주세요.