4 λΆ„ μ†Œμš”

πŸ“š CSS


πŸ“š Selector

CSS μ„ νƒμž ( Selector )λž€ 무엇인가 ?

μ„ νƒμžλŠ” κ·œμΉ™μ΄ μ μš©λ˜λŠ” μ—˜λ¦¬λ¨ΌνŠΈμ΄λ‹€.
HTML λ¬Έμ„œμ—μ„œ CSS κ·œμΉ™ 적용 νƒ€κ²Ÿμ΄ λ˜λŠ” λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ CSS μ„ νƒμžκ°€ μ‘΄μž¬ν•œλ‹€.

일반 μ„ νƒμž

μš°μ„ μˆœμœ„λŠ” 전체 μ„ νƒμž < νƒ€μž… μ„ νƒμž < 클래슀 μ„ νƒμž < ID μ„ νƒμž 이닀.

전체 μ„ νƒμž ( Universal Selector )

μ‚¬μš©λ²•μ€ β€œ* {}” 이닀.
HTML λ¬Έμ„œ λ‚΄ λͺ¨λ“  Elementλ₯Ό μ„ νƒν•œλ‹€.


<head>
  <style type="text/css">
    * {
      background: skyblue;
      color: white;
      font-weight: bold;
    }
  </style>
</head>
<body>
  <h2>h2 전체 μ„ νƒμž</h2>
  <div>div 전체 μ„ νƒμž</div>
  <p>p 전체 μ„ νƒμž</p>
</body>


νƒ€μž… μ„ νƒμž ( Type Selector )

μ‚¬μš©λ²•μ€ β€œ elementName {} β€œ 이닀.
νƒœκ·Έλͺ…을 μ΄μš©ν•΄μ„œ μŠ€νƒ€μΌμ„ μ μš©ν•  νƒœκ·Έλ₯Ό μ„ νƒν•œλ‹€.
1개 μ΄μƒμ˜ HTML μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.
μ—¬λŸ¬ μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό 선택할 λ•ŒλŠ” 컴마둜(,) κ΅¬λΆ„ν•œλ‹€.


<head>
  <style type="text/css">
    div,
    p {
      padding: 10px;
      margin: 10px;
      font-weight: bold;
    }

    div {
      background: skyblue;
      color: white;
    }

    p {
      background: lightgrey;
      color: black;
    }
  </style>
</head>
<body>
  <h2>h2 νƒ€μž… μ„ νƒμž</h2>
  <div>div νƒ€μž… μ„ νƒμž</div>
  <p>p νƒ€μž… μ„ νƒμž</p>
</body>


클래슀 μ„ νƒμž ( Class Selector )

μ‚¬μš©λ²•μ€ β€œ .className {} β€œ 이닀.
클래슀 λͺ…은 곡백 없이 λŒ€μ†Œλ¬Έμž λ˜λŠ” (-), (_) 둜 μ‹œμž‘ν•œλ‹€.
HTML λ¬Έμ„œμ—μ„œ λ™μΌν•œ 클래슀 λͺ…을 μ€‘λ³΅ν•΄μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. ( 곡톡 속성 적용 κ°€λŠ₯ )
class 속성 값에 ν•˜λ‚˜ μ΄μƒμ˜ 클래슀λ₯Ό 적용 κ°€λŠ₯ν•˜λ‹€.


<head>
  <style type="text/css">
    .target1 {
      background: skyblue;
      color: white;
    }

    .target2 {
      background: lightgrey;
      color: black;
    }
    p.target1 {
      font-weight: bold;
      font-size: 20px;
    }
  </style>
</head>
<body>
  <h2>h2 클래슀 μ„ νƒμž</h2>
  <div class="target1">div 클래슀 μ„ νƒμž</div>
  <p class="target2">p 클래슀 μ„ νƒμž</p>
  <p class="target1">p 클래슀 μ„ νƒμž</p>
</body>


ID μ„ νƒμž ( ID Selector )

μ‚¬μš©λ²•μ€ β€œ #IDName {} β€œ 이닀.
HTML λ¬Έμ„œμ—μ„œ λ™μΌν•œ IDλ₯Ό 쀑볡 μ‚¬μš©ν•  수 μ—†λ‹€. ( class와 달리 IDλŠ” μœ μΌν•΄μ•Ό ν•œλ‹€. )
ID 속성 κ°’μ—” 1개의 ID만 μ‚¬μš© κ°€λŠ₯
일반 μ„ νƒμž 쀑에 κ°€μž₯ μš°μ„ μˆœμœ„κ°€ λ†’λ‹€.


<head>
  <style type="text/css">
    #target1 {
      background: skyblue;
      color: white;
    }

    #target2 {
      background: lightgrey;
      color: black;
    }
  </style>
</head>
<body>
  <h2>h2 ID μ„ νƒμž</h2>
  <div>div ID μ„ νƒμž</div>
  <p id="target1">p ID μ„ νƒμž</p>
  <p id="target2">p ID μ„ νƒμž</p>
</body>


볡합 μ„ νƒμž

ν•˜μœ„ μ„ νƒμž ( Descendant Selector ) & μžμ‹ μ„ νƒμž ( Child Selector )

  • ν•˜μœ„ μ„ νƒμž
    • μ‚¬μš©λ²•μ€ β€œ element element {} β€œ 이닀.
    • 1단계 ν•˜μœ„ μš”μ†Œ 와 2단계 이상 ν•˜μœ„ μš”μ†Œμ— λͺ¨λ‘ μ μš©ν•œλ‹€.
  • μžμ‹ μ„ νƒμž
    • μ‚¬μš©λ²•μ€ β€œ element > element {} β€œ 이닀.
    • 1단계 ν•˜μœ„ μš”μ†Œμ—λ§Œ μ μš©ν•œλ‹€.

<head>
  <style type="text/css">
    div div {
      background-color: black;
      color: green;
    }
    div p {
      background-color: yellow;
      color: orange;
    }
    div > div {
      background-color: blue;
      color: red;
    }
    div > p {
      background-color: grey;
      color: white;
    }
  </style>
</head>
<body>
  <div>
    div ν•˜μœ„ μ„ νƒμž
    <p>div > p ν•˜μœ„ μ„ νƒμž</p>
    <div>
      div div ν•˜μœ„ μ„ νƒμž
      <span
        ><div>
          <ul>
            <li><p>div p ν•˜μœ„ μ„ νƒμž</p></li>
          </ul>
        </div></span
      >
    </div>
  </div>
</body>


인접 ν˜•μ œ μ„ νƒμž ( Adjacent Sibling Selector ) & 일반 ν˜•μ œ μ„ νƒμž ( General Sibling Selector )

  • 인접 ν˜•μ œ μ„ νƒμž
    • μ‚¬μš©λ²•μ€ β€œ element + element {} β€œ 이닀.
    • ν˜•μ œ 관계인 μ—˜λ¦¬λ¨ΌνŠΈκ°€ μ—¬λŸ¬κ°œ μ‘΄μž¬ν•  λ•Œ 첫번째 μ—˜λ¦¬λ¨ΌνŠΈλ§Œ 선택
  • 일반 ν˜•μ œ μ„ νƒμž
    • μ‚¬μš©λ²•μ€ β€œ element ~ element {} β€œ 이닀.
    • ν˜•μ œ 관계인 μ—˜λ¦¬λ¨ΌνŠΈκ°€ μ—¬λŸ¬κ°œ μ‘΄μž¬ν•  경우 λͺ¨λ“  μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό 선택

<head>
  <style type="text/css">
    div + p {
      background-color: grey;
      color: red;
    }
    div.target ~ p {
      background-color: yellow;
      color: black;
    }
  </style>
</head>
<body>
  <div>인접 ν˜•μ œ μ„ νƒμž</div>
  <p>div + p 인접 ν˜•μ œ μ„ νƒμž</p>
  <p>div + p 인접 ν˜•μ œ μ„ νƒμž2</p>
  <div class="target">div 일반 ν˜•μ œ μ„ νƒμž</div>
  <p>target ~ p 일반 ν˜•μ œ μ„ νƒμž</p>
  <p>target ~ p 일반 ν˜•μ œ μ„ νƒμž2</p>
</body>


가상 클래슀 μ„ νƒμž ( Pseudo-Classes Selector )

μ‚¬μš©λ²•μ€ β€œ 가상 클래슀 {} β€œ 이닀.
가상 클래슀 μ„ νƒμžλŠ” User Agent κ°€ μ œκ³΅ν•˜λŠ” 가상 클래슀λ₯Ό μ§€μ •ν•œλ‹€.

μ„ νƒμž 의미
:link λ°©λ¬Έν•˜μ§€ μ•Šμ€ 링크λ₯Ό 선택
:visited λ°©λ¬Έν•œ 링크λ₯Ό 선택
:hover μ§€μ •λœ μš”μ†Œμ— λ§ˆμš°μŠ€κ°€ μ˜¬λΌκ°„ 경우 선택
:active μ§€μ •λœ μš”μ†Œκ°€ ν™œμ„±ν™” 된 경우 선택
:focus μ§€μ •λœ μš”μ†Œκ°€ 포컀슀λ₯Ό κ°€μ§ˆ 경우 선택
:first-child μ§€μ •λœ μš”μ†Œ 쀑 λΆ€λͺ¨μ˜ 첫 번째 μžμ‹ 선택
:last-child μ§€μ •λœ μš”μ†Œ 쀑 λΆ€λͺ¨μ˜ λ§ˆμ§€λ§‰ μžμ‹ 선택
:nth-child(n) μ§€μ •λœ μš”μ†Œ 쀑 n번째 μžμ‹ 선택
:enabled μ§€μ •λœ μš”μ†Œ μš”μ†Œκ°€ enabled인 경우 선택
:disabled μ§€μ •λœ μš”μ†Œ μš”μ†Œκ°€ disabled인 경우 선택
:checked μ§€μ •λœ μš”μ†Œ μš”μ†Œκ°€ checked인 경우 선택

가상 μ—˜λ¦¬λ¨ΌνŠΈ μ„ νƒμž ( Psudeo-Element Selector )

μ‚¬μš©λ²•μ€ β€œ ::가상 μ—˜λ¦¬λ¨ΌνŠΈ {} β€œ 이닀.
가상 μ—˜λ¦¬λ¨ΌνŠΈ μ„ νƒμžλŠ” 보이지 μ•ŠλŠ” κ°€μƒμ˜ μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό μ„ νƒν•œλ‹€.

μ„ νƒμž 의미
::after μ§€μ •λœ μš”μ†Œ 뒀에 content μΆ”κ°€
::before μ§€μ •λœ μš”μ†Œ μ•žμ— content μΆ”κ°€
::first-letter μ§€μ •λœ μš”μ†Œμ˜ 첫 번째 문자 선택
::first-line μ§€μ •λœ μš”μ†Œμ˜ 첫 번째 라인 선택
::selection μ‚¬μš©μžμ— μ˜ν•΄ μ„ νƒλœ μš”μ†Œμ˜ μœ„μΉ˜ 선택 ( λ“œλž˜κ·Έ )

속성 μ„ νƒμž

νŠΉμ •ν•œ 속성을 κ°€μ§€κ±°λ‚˜ 속성 값을 κ°–λŠ” μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό μ„ νƒν•œλ‹€.
속성 μ„ νƒμžλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” HTMLλ¬Έμ„œλ₯Ό μž‘μ„±ν•  λ•Œμ— name, title을 κ·œμΉ™μ μœΌλ‘œ μ •μ˜ν•΄μ•Όν•œλ‹€.
화면에 같은 λΆ„λ₯˜μ˜ λ§Žμ€ ν•­λͺ©λ“€μ„ μΌκ΄„μ μœΌλ‘œ 선택할 λ•Œ μœ μš©ν•˜λ‹€.

μ„ νƒμž 의미
[A] A 속성이 ν¬ν•¨λœ μ—˜λ¦¬λ¨ΌνŠΈ 선택
[A=V] A 속성 값이 V와 μ •ν™•νžˆ μΌμΉ˜ν•˜λŠ” μ—˜λ¦¬λ¨ΌνŠΈ 선택
[A~=V] A 속성 값이 Vλ₯Ό ν¬ν•¨ν•˜λŠ” μ—˜λ¦¬λ¨ΌνŠΈ 선택
[A^=V] A 속성 값이 V둜 μ‹œμž‘ν•˜λŠ” μ—˜λ¦¬λ¨ΌνŠΈ 선택
[A*=V] A 속성 값이 Vλ₯Ό ν¬ν•¨ν•˜λŠ” μ—˜λ¦¬λ¨ΌνŠΈ 선택
[A$=V] A 속성 값이 V둜 λλ‚˜λŠ” μ—˜λ¦¬λ¨ΌνŠΈ 선택

CSS κ·œμΉ™ 적용 μš°μ„ μˆœμœ„

  • 같은 μ—˜λ¦¬λ¨ΌνŠΈμ— 두 κ°œμ΄μƒμ˜ CSS κ·œμΉ™μ΄ 적용 된 경우 λ§ˆμ§€λ§‰ κ·œμΉ™, ꡬ체적인 κ·œμΉ™, !importantκ°€ μš°μ„  μ μš©λœλ‹€.
  • CSS κ·œμΉ™λ“€ 쀑 ν•˜λ‹¨μ— μž‘μ„±ν•œ κ·œμΉ™μ΄ λ§ˆμ§€λ§‰ κ·œμΉ™μ΄λ‹€.
  • 속성 κ°’ 뒀에 !importantλ₯Ό μž‘μ„±ν•˜λ©΄ 같은 μ—˜λ¦¬λ¨ΌνŠΈμ— λŒ€ν•΄ 보닀 μš°μ„ μ μœΌλ‘œ μŠ€νƒ€μΌμ„ μ μš©ν•œλ‹€.

CSS μ„ νƒμž 마무리

μ—¬λŸ¬ μ’…λ₯˜μ˜ μ„ νƒμžλ“€μ„ μ•Œμ•„λ³΄μ•˜λ‹€.
μ•žμœΌλ‘œ 많이 쓰일 κ²ƒλ“€μ΄λΌμ„œ ν™•μ‹€νžˆ μ™Έμš°μ§„ λͺ»ν–ˆμ§€λ§Œ μ–΄λŠμ •λ„ 뭐가 있고 뭐가 μ–Έμ œ μ“°μ΄λŠ”μ§€ νŒŒμ•…ν–ˆμœΌλ‹ˆ λ‚˜μ€‘μ— μ‚¬μš©ν•  λ•Œ λ‹€μ‹œ λ³΄λ©΄μ„œ 데이터λ₯Ό μŒ“μ•„κ°€μ•Όκ² λ‹€.
그리고 μš°μ„ μˆœμœ„λ₯Ό 잘 νŒŒμ•…ν•΄μ„œ μ‚¬μš©ν•΄μ•Όκ² λ‹€ !