본문 바로가기

HTML, CSS

CSS Selector와 예제


1. CSS Selector란?

CSS Selector는 HTML 문서에서 스타일을 적용할 대상 요소를 지정하는 규칙입니다.
적절한 셀렉터를 사용하면 유지보수성이 좋아지고, 코드 중복을 줄이며, 원하는 요소만 깔끔하게 꾸밀 수 있습니다.


2. 주요 Selector 종류

  1. Universal Selector (*)
    모든 요소를 한 번에 선택합니다.
  2. Element Selector
    특정 태그를 선택합니다.
  3. Class Selector (.class-name)
    같은 스타일을 여러 요소에 적용할 때 씁니다.
  4. ID Selector (#id-name)
    문서 내에 고유하게 한 번만 사용되는 식별자입니다.
  5. Attribute Selector ([속성="값"])
    속성과 값 조합으로 요소를 세밀하게 선택합니다.
  6. Child & Descendant Selector
    • A > B: A의 직계 자식 B만
    • A B : A 내부의 모든 B (중첩 포함)

3. Selector 우선순위

  1. ID Selector (#id-name)
  2. Class/Attribute/Pseudo-class Selector (.class, [attr], :hover 등)
  3. Element Selector (h1, p, ul 등)
  4. Universal Selector (*)

우선순위가 높은 규칙이 낮은 규칙보다 나중에 적용됩니다.


4. 실전 예제 코드

다음 예제는 “애국가 2절” 가사 및 버튼을 꾸미고, 서로 다른 셀렉터가 어떻게 동작하는지 보여줍니다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>CSS Selector 예제</title>

  <style>
    /* 1. Universal Selector: 모든 요소에 초기값(리셋)과 공통 너비/정렬 적용 */
    * {
      margin: 0;
      padding: 0;
      width: 800px;
      text-align: center;
      box-sizing: border-box;
    }

    /* 2. Element Selector: 모든 <p> 태그에 테두리, 여백 적용 */
    p {
      border: 1px solid olive;
      margin: 10px auto;
      padding: 5px;
    }

    /* 3. Class Selector: .last-song 클래스가 붙은 <p>에 적용 */
    .last-song {
      color: blueviolet;
      text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
      border-color: blueviolet;
    }

    /* 4. ID Selector: #phrase-1, #phrase-2 고유 스타일 */
    #phrase-1 {
      color: chartreuse;
      text-shadow: 1px 1px 2px black;
    }
    #phrase-2 {
      color: white;
      background-color: darkslategray;
      text-shadow: 1px 1px 2px black;
    }

    /* 5. Attribute Selector: type="button"인 input 전체에 적용 */
    input[type="button"] {
      width: 150px;
      margin: 10px auto;
      display: block;
      color: blue;
      cursor: pointer;
    }

    /* 6. 더 구체적인 Attribute Selector: value가 '오전 수업 끝'인 버튼만 */
    input[value="오전 수업 끝"] {
      color: red;
    }
  </style>
</head>

<body>
  <h1>애국가 2절</h1>

  <p id="phrase-1">
    남산 위에 저 소나무 철갑을 두른 듯
  </p>

  <p id="phrase-2">
    바람 소리 불변함은 우리 기상일세
  </p>

  <p class="last-song">
    무궁화 삼천리 화려강산
  </p>

  <p class="last-song">
    대한사람 대한으로 길이 보전하세
  </p>

  <!-- 입력란 -->
  <input type="text" id="msg" placeholder="메시지를 입력하세요">

  <!-- 일반 버튼 -->
  <input type="button" value="점심 맛있게 드세요">

  <!-- value가 '오전 수업 끝'인 버튼 -->
  <input type="button" id="reded"
         value="오전 수업 끝"
         onclick="self.close();">
</body>
</html>

5. 이 예제에서 눈여겨볼 포인트

  • Universal Selector로 전체 리셋과 공통 레이아웃 지정
  • <p> 태그의 기본 테두리와 여백을 Element Selector로 일괄 설정
  • Class vs ID: 클래스는 재사용, ID는 고유 스타일용
  • Attribute Selector로 버튼의 type과 value별 차별적 스타일링
  • 셀렉터 우선순위 때문에 더 구체적인 규칙이 최종 적용됨