프론트엔드/CSS

선택자(selector)

짱뚱짱 2025. 6. 16. 15:25

선택자(selector)란? 

👉🏻요소를 선택하게 하는 이름

선택자 {
속성: 값;
속성: 값;
}

 

💎 기본 선택자

  • 태그 선택자(태그명) 👉🏻 같은 태그명을 모두 선택
  • 클래스 선택자(.클래스명) 👉🏻 같은 클래스를 가지는 모든 태그
  • id 선택자(#id명) 👉🏻 한 문서 내에서 무조건 한 개만 사용(고유)

💎 가상 선택자

  • 선택자:가상클래스명
  • 어떤 조건이나 상황에서 스타일을 적용하도록 만든 선택자
  • 앞에 다른 선택자가 오고, 뒤에 가상클래스 선택자가 추가로 나옴
  • :hover 👉🏻 요소에 마우스를 올렸을 때
  • :focus 👉🏻 요소가 포커스를 받고 있을 때
  • :nth-child(a) 👉🏻 a번째 자식 요소 / :nth-of-type(a) 👉🏻 같은 타입 중 a번째 
    • a번째에 해당하는 요소
    • 1 : 첫번째 요소
    • even : 짝수 요소
    • odd : 홀수 요소
    • 2n, 3n, 5n : 배수 요소
    • 연산도 가능(2n-1)
  • :first-child 👉🏻 첫번째 요소
  • :last-child 👉🏻 마지막 요소
  • :after 👉🏻 요소 뒤에 가상요소를 삽입
  • :before 👉🏻요소 앞에 가상요소를 삽입

💎 선택자 조합

  • 여러 선택자를 이용하여 요소를 선택
  • 자식관계 (>)
    • 선택자1 > 선택자2 > 선택자3 (table>thead>tr>td)
  • 조상관계 (공백)
    • 선택자1 선택자2 (table td)
    • 선택자1은 선택자2의 바로 위 조상일 수도 있고, 한참 위 조상일 수도 있음.
  • 본인 : 선택자를 붙여서 사용
    • 선택자1.선택자2
    • 선택자1과 선택자2를 모두 만족하는 요소(and)
      • (div.a) (.a.b) (div#c)
    • 불가능한 조합
      • divinput ❌ , .ainput ❌ : 띄어쓰기를 안하면 구분이 안되는 조합
      • #a#b ❌ : 말이 안되는 조합
    • 선택자1, 선택자2 : 선택자1과 선택자2 모든 태그(or)

💎 선택자 우선순위 

아이디 선택자 > 클래스 선택자 > 태그 선택자

💡우선순위가 같다면 아래쪽 스타일이 우선 적용

📝 예제

<style>
    section {
        color: navy;
    }
    article {
        color: brown;
    }
    .a {
        font-weight: 700;
    }
    article.a {
        font-style: italic;
    }
    article, .a {
        background-color: skyblue;
    }
    section:hover {
        color: blanchedalmond;
    }
    #red {
        color: crimson;
    }
</style>
<body>
    <section class="a">Hello Hong Gil Dong</section>
    <section id="red">안녕하세요. 홍길동입니다</section>
    <section>안녕하세요. 순이입니다.</section>
    <article class="a">Hello</article>
    <article>Hi</article>
</body>

📝 결과

Hello Hong Gil Dong
안녕하세요. 홍길동입니다
안녕하세요. 순이입니다.
Hello
Hi

 

📝 가상 선택자 예제 

<style>
    li.links a::after {
        content: " /";
    }
    ul a.last::after {
        content: "";
    }
    .links {
        text-decoration: dashed;
    }
</style>

<ul>
    <li class="links">
        <a href="#">naver1</a>
        <a href="#">naver2</a>
        <a href="#">naver3</a>
        <a href="#">naver4</a>
        <a href="#" class="last">naver5</a>
    </li>
</ul>

📝 결과

    💡::after는 시각적으로만 추가되고, 실제 DOM에 존재하지 않음.

 

📝 :first-child, :nth-child(), :nth-of-type() 비교 

<style>
    /* ol 안에서 첫 번째 li만 빨간색 */
    ol > li:first-child {
        color: red;
    }

    /* ol 안에서 짝수 번째 li는 파란색 */
    ol > li:nth-child(even) {
        color: blue;
    }

    /* ol 안에서 li 중 3의 배수 번째 li는 주황색 */
    ol > li:nth-of-type(3n) {
        color: coral;
    }

    /* div 안에서 p 중 두 번째 p만 빨간색 */
    div > p:nth-of-type(2) {
        color: red;
    }

    /* div 안에서 두 번째 자식 요소가 p면 빨간색 (이 구조에선 적용 안 됨) */
    /* div > p:nth-child(2) {
        color: green;
    } */
</style>

<!-- 리스트 요소 테스트 -->
<ol>
    <li>1번</li>
    <li>2번</li>
    <li>3번</li>
    <li>4번</li>
    <li>5번</li>
    <li>6번</li>
    <li>7번</li>
    <li>8번</li>
    <li>9번</li>
    <li>10번</li>
</ol>

<!-- 요소 순서와 타입 비교 -->
<div>
    <h1>제목</h1>
    <p>요소 1</p>
    <p>요소 2</p>
    <p>요소 3</p>
</div>

📝 결과

  1. 1번
  2. 2번
  3. 3번
  4. 4번
  5. 5번
  6. 6번
  7. 7번
  8. 8번
  9. 9번
  10. 10번

제목

요소 1

요소 2

요소 3

 

💎 속성 선택자

  • 태그가 가지고 있는 속성을 선택하는 문법
  • input, button 등의 form요소에서 주로 사용
선택자[속성=값] {
스타일;
}

 

📝 예제

 
    <style>
        input[type=password]{
            background-color: aqua;
        }
        button[type=submit]:hover{
            background-color: brown;
        }
        button.btn:hover{
            background-color: salmon;
        }


    </style>
    <form action="">
        <div>
            <label for="id">User ID: </label>
            <input type="text" name="id" id="id" placeholder="8자 이상" required>
        </div>
        <div>
            <label for="pw">User PW:</label>
            <input type="password" id="pw" name="pw" required>
        </div>
        <div>
            <label for="pin">User pin: </label>
            <input type="password" id="pin" name="pin" required>
        </div>
        <button class="btn" type="submit">login</button>
    </form>
    <button type="button">button</button>
    <button type="submit">submit</button>

📝 결과

 

 

'프론트엔드 > CSS' 카테고리의 다른 글

css  (0) 2025.05.14