HTML/CSS를 처음 접할 때 가장 헷갈리는 것이 바로 ID(#)Class(.)의 차이다.
color: red;를 주면 둘 다 빨간색으로 변하고, 겉보기엔 똑같이 작동하는 것처럼 보인다.

하지만 이 둘은 태생부터 “성격”“권력(우선순위)”이 완전히 다르다. 이 차이를 모르면 나중에 유지보수 지옥에 빠지게 된다.

  1. 한눈에 보는 비유: 주민번호 vs 유니폼
    가장 쉬운 비유로 정의하자면 다음과 같다.

💡 핵심 비유

ID (#): 주민등록번호. 전 국민(페이지) 중 딱 한 명만 가질 수 있는 고유한 식별자다.

Class (.): 유니폼(교복). 여러 명이 똑같은 옷을 입을 수 있다.

구분 ID (#) Class (.)
비유 주민등록번호 (고유함) 유니폼 / 교복 (공유 가능)
개수 한 페이지에 딱 1개만 존재 한 페이지에 여러 개 사용 가능
힘(우선순위) 매우 셈 (대장, 100점) 약함 (일반 병사, 10점)
주 용도 자바스크립트 제어, 링크 이동 스타일링(CSS), 디자인 재사용

  1. 결정적인 차이 3가지
    ① “개수”의 차이 (Uniqueness)

ID는 유일해야 하고, Class는 반복해도 된다.

ID (#header): 문서 전체에서 단 하나만 존재해야 한다. 만약 <div id="header">를 두 번 쓴다면? 작동은 할지 몰라도 웹 표준 위반이며, 자바스크립트가 요소를 찾을 때 첫 번째만 찾고 에러를 뿜을 것이다.

Class (.btn): 재사용이 핵심이다. ‘제출 버튼’, ‘취소 버튼’, ‘로그인 버튼’ 등 여러 곳에 똑같은 디자인을 입힐 수 있다.

② “힘”의 차이 (Specificity)

CSS 전쟁에서 ID는 깡패다.

똑같은 요소에 서로 다른 색상을 지정했을 때, 누가 이길까?

HTML

나는 무슨 색일까?

CSS
/* CSS /
#box { color: red; } /
ID: 빨강 (힘 100점) /
.box { color: blue; } /
Class: 파랑 (힘 10점) */
👉 결과: 빨간색 (Red)
ID의 우선순위가 압도적으로 높아서 Class의 스타일을 무시해버린다. 나중에 스타일을 수정하려고 해도, ID로 작성된 코드는 덮어쓰기가 매우 힘들다. 결국 !important 같은 나쁜 코드를 남발하게 된다.

③ “기능”의 차이 (Anchor)

ID에는 ‘책갈피’ 기능이 있다.

ID는 URL을 통해 특정 위치로 점프하는 기능을 기본적으로 제공한다.

를 만들어두면, 주소창에 www.blog.com/#contact를 입력했을 때 자동으로 그 위치로 스크롤 된다. Class에는 없는 기능이다. 3. 결론: 그래서 뭘 써야 할까? Q. post-container를 만들 때 ID와 Class 중 무엇을 써야 할까요? A. 무조건 Class를 추천한다. (.post-container) 이유는 명확하다. 재사용성 (Reusability): 나중에 about.html이나 projects.html에서도 똑같은 레이아웃 박스가 필요할 수 있다. 그때 .post-container 클래스만 붙이면 끝난다. 유지보수 (Maintenance): ID로 스타일을 짜면 나중에 수정이 어렵다. 스타일링의 영역은 '유니폼(Class)'에게 맡기고, ID는 정말 특별한 경우(JS 제어, 앵커)에만 아껴 써야 한다. 역할 분담: 스타일(CSS) 입힐 때 👉 Class (.) JS로 특정 요소를 제어하거나, 스크롤 위치를 잡을 때 👉 ID (#) 이 원칙만 지켜도 CSS 파일이 훨씬 깨끗해지고, 나중에 코드를 수정할 때 스트레스를 받지 않는다.