C
HTML/CSS/CSS기초/Lesson 05

CSS 선택자 — *어디에* 스타일을 줄까

1시간·theory
이 챕터
1/3

CSS 선택자 — *어디에* 스타일을 줄까

🎯 이 lesson 을 읽고 나면

이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.

  • ✅ 선택자 5종 (요소·클래스·ID·속성·가상) + 우선순위
  • ✅ specificity 계산 공식 + !important 의 위험
  • ✅ :hover / :focus / :nth-child 활용

학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.

선택자가 뭐냐

핵심 한 줄

CSS 선택자 = "HTML 의 어느 요소 에 스타일을 적용할지" 지정하는 패턴. 정확히 선택하는 게 유지보수 가능한 CSS 의 시작.

5가지 기본 선택자

css
/* 1. 태그 선택자 — 모든 <p> */
p { color: gray; }

/* 2. 클래스 선택자 — class="highlight" 인 모두 */
.highlight { background: yellow; }

/* 3. ID 선택자 — id="main" 인 것 (페이지에 1개만) */
#main { padding: 20px; }

/* 4. 속성 선택자 — type="submit" 인 input */
input[type="submit"] { background: blue; }

/* 5. 가상 클래스 — 호버 상태 */
button:hover { background: green; }

결합자 — 관계로 선택

css
/* 자식 선택자 (직계) */
nav > a { color: red; }     /* nav 의 직접 자식 a */

/* 후손 선택자 (모든 깊이) */
nav a { color: blue; }       /* nav 안의 모든 a */

/* 형제 선택자 */
h2 + p { margin-top: 0; }    /* h2 *바로 다음* p */
h2 ~ p { color: gray; }      /* h2 *이후 모든* p */

자주 쓰는 가상 클래스

css
a:hover    { color: red; }       /* 마우스 올렸을 때 */
a:active   { color: orange; }    /* 클릭하는 순간 */
a:visited  { color: purple; }    /* 방문한 링크 */
input:focus { border: 2px solid blue; }   /* 포커스 받았을 때 */
input:disabled { opacity: 0.5; }
li:first-child { font-weight: bold; }     /* 첫 자식 */
li:last-child  { border: 0; }
li:nth-child(2n) { background: #eee; }    /* 짝수 (얼룩말 무늬) */

클래스 vs ID — 언제 무엇을

  • 클래스 (.) = 여러 곳에 재사용. 90% 의 경우 이거.
  • ID (#) = 페이지에 단 하나만. JS 에서 잡거나·앵커링 (#section1)·접근성.

> 💡 현장 합의: 스타일은 항상 클래스. ID 는 JS 후크 또는 anchor 용도로만.

너무 구체적인 선택자 — 유지보수 지옥

css
/* ❌ 매우 나쁨 */
body > main > article > div.container > ul > li > a.btn { ... }

/* ✅ 좋음 */
.btn-primary { ... }

선택자가 길수록 HTML 구조에 결합 됩니다. HTML 한 줄 바꾸면 CSS 전부 깨짐. 클래스 이름 1개 가 가장 안전.

BEM 명명법 — 산업 표준

css
/* Block__Element--Modifier */
.card { ... }                  /* Block */
.card__title { ... }           /* Element */
.card__title--large { ... }    /* Modifier */

복잡한 컴포넌트에서 충돌 방지·의도 명확. Tailwind·CSS-in-JS 가 등장한 지금은 옛 방식이지만, 전통 CSS 환경에선 여전히 표준.

한 번 정리

기본 5가지 (태그·클래스·ID·속성·가상) 와 결합자 (자식·후손·형제) 만 알면 80% 끝. 깊이 들어가지 말고 클래스 위주 로 단순하게.

🤖 AI 에게 이렇게 요청해보세요

이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.

  • "이 CSS 의 specificity 충돌을 해결하고 !important 없이 우선순위 맞춰줘"
  • "이 클래스명을 BEM 컨벤션으로 리네이밍해줘"
  • "이 nested selector 를 더 평탄하게 (depth 2 이하) 리팩토링해줘"

왜 이게 토큰을 줄이나

개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.

먼저 읽으면 좋은 개념: 폼 태그
다음 추천: 선택자 우선순위
CSS 선택자 - HTML/CSS