GiantStepDEV
article thumbnail

CSS μ„ νƒμž

  • CSS 문법은 크게 μ„ νƒμžμ™€ μ„ μ–ΈλΆ€λ‘œ λ‚˜λ‰©λ‹ˆλ‹€.
  • μ„ νƒμžλŠ” CSSλ₯Ό μ μš©ν•  νƒœκ·Έ(μš”μ†Œ)λ₯Ό μ§€μ •ν•˜λŠ” 문법적인 μ˜μ—­μ΄λ©°, CSSλŠ” μ„ νƒμžλ₯Ό μ§€μ •ν•˜λŠ” λ‹€μ–‘ν•œ 방법이 μžˆμŠ΅λ‹ˆλ‹€.

전체 μ„ νƒμž

  • HTMLμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λͺ¨λ“  μš”μ†Œλ₯Ό ν•œ λ²ˆμ— μ„ νƒμžλ‘œ μ§€μ •ν•˜λŠ” λ°©λ²•μœΌλ‘œ * 기호λ₯Ό μ‚¬μš© ν•©λ‹ˆλ‹€.
* {
    margin: 0; /* margin μ΄ˆκΈ°ν™” */
    padding: 0; /* padding μ΄ˆκΈ°ν™” */
    box-sizing: border-box; /* μ€‘μš”! */
}

νƒœκ·Έ μ„ νƒμž

  • HTML νƒœκ·Έλͺ…μœΌλ‘œ μ„ νƒμž μ§€μ •
  • νƒœκ·Έ μ„ νƒμžλŠ” μ„ νƒμžμ— μ§€μ •λœ νƒœκ·Έλͺ…κ³Ό μΌμΉ˜ν•˜λŠ” λͺ¨λ“  μš”μ†Œλ₯Ό ν•œλ²ˆμ— 선택 ν•©λ‹ˆλ‹€.
div {
  width : 200px;
  height: 200px;
  background-color: royalblue;
  color: white;
}

νŠΉμ • 뢀뢄에 μŠ€νƒ€μΌ μ μš©ν•˜λŠ” 클래슀 μ„ νƒμž

  • 같은 νƒœκ·ΈλΌλ„ μΌλΆ€λŠ” λ‹€λ₯Έ μŠ€νƒ€μΌμ„ μ‚¬μš©ν•˜κ³  싢을 λ•Œ 클래슀 μ„ νƒμžλ₯Ό μ‚¬μš© ν•©λ‹ˆλ‹€.

πŸ‘‰ .클래슀λͺ…

.accent {
	border: 1px solid black;
    	padding: 5px;
}
...
<h1 class="accent"> ... </h1>
...

아이디 μ„ νƒμž

  • HTML νƒœκ·Έμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” id 속성값을 μ΄μš©ν•΄ μ„ νƒμžλ₯Ό μ§€μ •ν•˜λŠ” 방법
  • 클래슀 μ„ νƒμžκ°€ λ¬Έμ„œμ—μ„œ μ—¬λŸ¬λ²ˆ μ μš©ν•  수 μžˆλŠ” 반면, idμ„ νƒμžλŠ” λ¬Έμ„œμ—μ„œ ν•œ 번만 μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 즉, HTMLμ—μ„œ id 속성값을 ν•˜λ‚˜μ˜ HTML λ¬Έμ„œ μ•ˆμ—μ„œ κ³ μœ ν•œ 값이어야 ν•©λ‹ˆλ‹€.

πŸ‘‰ #아이디λͺ…

#accent {
	border: 1px solid black;
    	padding: 5px;
}
...
<h1 id="accent"> ... </h1>
...

κΈ°λ³Έ 속성 μ„ νƒμž

  • 속성과 값을 μ‚¬μš©ν•΄ μ„ νƒμžλ₯Ό μ§€μ •ν•˜λŠ” 방법
a[href] {
    color: red;
}
a[target="_blank"] {
    color: green;
    font-weight: bold;
}
#google[href] {
    color: blue;
    font-style: oblique; /* κΈ°μšΈμž„μ²΄ */
}


μ˜ˆμ‹œ)
a[href]{} : a νƒœκ·Έμ— href 속성이 μžˆλŠ” μš”μ†Œ 선택
#title[href]{} : id 속성값이 titleμ΄λ©΄μ„œ href 속성이 μžˆλŠ” μš”μ†Œ 선택
.title[href]{} : class 속성값이 titleμ΄λ©΄μ„œ href 속성이 μžˆλŠ” μš”μ†Œ 선택

νŠΉμ • 접미사

좜처 : https://dasima.xyz/css-attribute-selector/

μ‘°ν•© μ„ νƒμž

  • μ‘°ν•© μ„ νƒμžλŠ” κΈ°λ³Έ μ„ νƒμžμ™€ ν•¨κ»˜ μ‚¬μš©ν–ˆμ„ λ•Œ μ„ νƒμžμ˜ 의미λ₯Ό λ”μš± ν’λΆ€ν•˜κ²Œ ν•΄μ£ΌλŠ” μ„ νƒμž 방법

κ·Έλ£Ή μ„ νƒμž

  • μ—¬λŸ¬ μ„ νƒμžλ₯Ό ν•˜λ‚˜λ‘œ κ·Έλ£Ή 지을 λ•Œ μ‚¬μš© ν•©λ‹ˆλ‹€.
  • μ„ νƒμžμ™€ μ„ νƒμžλŠ” , 기호둜 ꡬ뢄 ν•©λ‹ˆλ‹€.

πŸ‘‰ μ„ νƒμž1, μ„ νƒμž2, ... μ„ νƒμžn {}

p, #title, .red {
            color : #f3a;
}

μžμ‹ μ„ νƒμž

  • λΆ€λͺ¨ μš”μ†Œμ˜ ν•˜μœ„μ— μžˆλŠ” μžμ‹ μš”μ†Œμ— μŠ€νƒ€μΌμ„ μ μš©ν•  λ•Œ μ‚¬μš©
  • 2개 μ΄μƒμ˜ μ„ νƒμžκ°€ μ‚¬μš©λ˜λ©°, μ„ νƒμžμ™€ μ„ νƒμžλŠ” > 기호둜 ꡬ뢄 ν•©λ‹ˆλ‹€.

πŸ‘‰ λΆ€λͺ¨ μ„ νƒμž > μžμ‹ μ„ νƒμž {}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<style>
    .box > p {
        color: red;
    }
</style>
<body>
    <div class="box">
        <p>1번 ν•­λͺ© μž…λ‹ˆλ‹€.</p>
        <div>
            <p>2번 ν•­λͺ© μž…λ‹ˆλ‹€.</p>
        </div>
        <p>3번 ν•­λͺ© μž…λ‹ˆλ‹€.</p>
    </div>
</body>
</html>

μžμ‹ ν•­λͺ©λ§Œ 적용되기 λ•Œλ¬Έμ— 쀑간에 div둜 감싼 p νƒœκ·ΈλŠ” styleμ—μ„œ μ œμ™Έ λœλ‹€.

인접 ν˜•μ œ μ„ νƒμž

  • + 기호λ₯Ό μ‚¬μš©ν•˜μ—¬ μΈμ ‘ν•œ ν˜•μ œ μš”μ†Œλ₯Ό μ„ νƒν•˜λŠ” 방법
  • μ§€μ •λœ μš”μ†Œμ˜ λ°”λ‘œ λ‹€μŒ ν˜•μ œ μš”μ†Œλ§Œ 선택할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, p + span은 <p> μš”μ†Œ λ°”λ‘œ λ‹€μŒμ— μ˜€λŠ” <span> μš”μ†Œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
    즉, μ§€μ •λœ μš”μ†Œμ˜ λ°”λ‘œ λ‹€μŒ ν˜•μ œ μš”μ†Œ'만' 선택!!!

πŸ‘‰ 이전 μ„ νƒμž + λŒ€μƒ μ„ νƒμž {}

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>μƒν’ˆ μ†Œκ°œ νŽ˜μ΄μ§€</title>
  <style>
   h1 + h2 {
    color:red;
   }
  </style>
</head>
<body>
  <h1>Test1</h1>
  <h2>Test2</h2>
  <h3>Test3</h3>
</body>
</html>

일반 ν˜•μ œ μ„ νƒμž

  • 이전 μ„ νƒμž 뒀에 μ˜€λŠ” ν˜•μ œ 관계 μš”μ†Œλ₯Ό λͺ¨λ‘ μ„ νƒμžλ‘œ μ§€μ •
  • 2개 μ΄μƒμ˜ μ„ νƒμžλ₯Ό μ‚¬μš©ν•˜λ©°, μ„ νƒμžμ™€ μ„ νƒμžλŠ” ~ 기호둜 ꡬ뢄 ν•©λ‹ˆλ‹€.
  • νŠΉμ • μš”μ†Œ 이후에 μ˜€λŠ” λͺ¨λ“  ν˜•μ œ μš”μ†Œμ— μŠ€νƒ€μΌμ„ μ‰½κ²Œ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν™œμš©ν•˜λ©΄ νŠΉμ • μš”μ†Œλ₯Ό κΈ°μ€€μœΌλ‘œ μŠ€νƒ€μΌμ„ μ μš©ν•˜λŠ” 것이 κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

πŸ‘‰ 이전 μ„ νƒμž ~ λŒ€μƒ μ„ νƒμž {}

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>μƒν’ˆ μ†Œκ°œ νŽ˜μ΄μ§€</title>
  <style>
   h1 ~ h2 {
    color:red;
   }
  </style>
</head>
<body>
  <h1>Test1</h1>
  <h2>Test2</h2>
  <h2>Test2-1</h2>
  <h3>Test3</h3>
</body>
</html>

가상 μš”μ†Œ μ„ νƒμž

  • μš”μ†Œμ˜ μƒνƒœλ₯Ό μ΄μš©ν•΄ μ„ νƒμžλ₯Ό μ§€μ •ν•˜λŠ” 방법

πŸ‘‰ κΈ°μ€€μš”μ†Œ:가상 클래슀 μ„ νƒμž {}

링크 가상 클래슀 μ„ νƒμž

  • a νƒœκ·Έμ—μ„œ λ°œμƒν•  수 μžˆλŠ” 링크 μƒνƒœλ₯Ό μ΄μš©ν•΄ μ„ νƒν•˜λŠ” 방법

πŸ‘‰ :link : ν•œλ²ˆλ„ λ°©λ¬Έν•˜μ§€ μ•Šμ€ 링크일 λ•Œ 선택

πŸ‘‰ :visited : ν•œλ²ˆμ΄λΌλ„ λ°©λ¬Έν•œ 적이 μžˆλŠ” 링크

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8">
    <title>링크 가상 클래슀</title>
    <style>
      a:link {
        color:orange;
      }
      a:visited {
        color:green;
      }
    </style>
  </head>
  <body>
    <a href="https://www.naver.com">넀이버</a>
    <a href="https://www.google.com">ꡬ글</a>
  </body>
</html>

동적 가상 클래슀 μ„ νƒμž

  • μ‚¬μš©μžμ˜ μ–΄λ–€ 행동에 따라 λ™μ μœΌλ‘œ λ³€ν•˜λŠ” μƒνƒœλ₯Ό μ΄μš©ν•΄ μ„ νƒμžλ₯Ό μ§€μ •ν•˜λŠ” 방법

πŸ‘‰ :hover : μš”μ†Œμ— 마우슀λ₯Ό 올리면 μŠ€νƒ€μΌ 적용

πŸ‘‰ :active : μš”μ†Œλ₯Ό 마우슀둜 ν΄λ¦­ν•˜κ³  μžˆλŠ” λ™μ•ˆ μŠ€νƒ€μΌ 적용

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>:active</title>
  <style>
    button:active{
      color:red;
    }
    button:hover{
      color:green;
    }

  </style>
</head>
<body>
  <button>active</button>
</body>
</html>

μž…λ ₯ μš”μ†Œ 가상 클래슀 μ„ νƒμž

  • μž…λ ₯ μš”μ†Œμ˜ νŠΉμ • μƒνƒœλ₯Ό μ΄μš©ν•΄ μ„ νƒμžλ‘œ μ§€μ •ν•˜λŠ” 방법

πŸ‘‰ input:focus : μž…λ ₯ μš”μ†Œμ— μ»€μ„œκ°€ ν™œμ„±ν™”λ˜λ©΄ μ„ νƒμžλ‘œ μ§€μ •

πŸ‘‰ input:checked : 체크 λ°•μŠ€κ°€ ν‘œμ‹œλ˜μ–΄ 있으면 μΈμ ‘ν•œ ν˜•μ œ μš”μ†ŒμΈ label νƒœκ·Έμ˜ ν…μŠ€νŠΈμ— μŠ€νƒ€μΌ 적용

πŸ‘‰ input:disabled : μƒν˜Έμž‘μš© μš”μ†Œκ°€ λΉ„ν™œμ„±ν™”λ˜μ–΄ 있으면 μŠ€νƒ€μΌ 적용

πŸ‘‰ input:enabled : μš”μ†Œκ°€ ν™œμ„±ν™”λ˜μ–΄ 있으면 μŠ€νƒ€μΌ 적용

input:focus {
            color: red;
        }
    
        input:checked + label {
            color: red;
        }
        input:disabled {
            background-color: #ccc;
        }
        input:enabled {
            background-color: gray;
        }

ꡬ쑰적 가상 클래슀 μ„ νƒμž

  • μš”μ†Œμ˜ ꡬ쑰와 μœ„μΉ˜μ— 따라 μŠ€νƒ€μΌμ„ μ μš©ν•˜λŠ” 방법
  • μš”μ†Œμ˜ λΆ€λͺ¨, μžμ‹, ν˜•μ œ, 인접 μš”μ†Œ 등을 κΈ°μ€€μœΌλ‘œ μŠ€νƒ€μΌ 적용

:first-child : λΆ€λͺ¨ μš”μ†Œμ˜ 첫 번째 μžμ‹ μš”μ†Œμ— μŠ€νƒ€μΌμ„ 적용

:last-child : λΆ€λͺ¨ μš”μ†Œμ˜ λ§ˆμ§€λ§‰ μžμ‹ μš”μ†Œμ— μŠ€νƒ€μΌμ„ 적용

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <style>
	 li:first-child{
      color:red;
    }
    li:last-child{
      color:violet;
    }
  </style>
</head>
<body>
	<ul>
		<li>test 1</li>
		<li>test 2</li>
		<li>test 3</li>
		<li>test 4</li>
	  </ul>
</body>
</html>

:nth-child(n) : λΆ€λͺ¨ μš”μ†Œμ˜ n번째 μžμ‹ μš”μ†Œμ— μŠ€νƒ€μΌμ„ 적용

:nth-last-child(n) : λΆ€λͺ¨ μš”μ†Œμ˜ λ’€μ—μ„œλΆ€ν„° n번째 μžμ‹ μš”μ†Œμ— μŠ€νƒ€μΌμ„ 적용

:only-child : λΆ€λͺ¨ μš”μ†Œμ˜ μœ μΌν•œ μžμ‹ μš”μ†Œμ— μŠ€νƒ€μΌμ„ 적용

 

:first-of-type : λ™μΌν•œ νƒœκ·Έλͺ…을 κ°€μ§„ ν˜•μ œ μš”μ†Œ μ€‘μ—μ„œ 첫 번째 μš”μ†Œμ— μŠ€νƒ€μΌμ„ 적용

:last-of-type : λ™μΌν•œ νƒœκ·Έλͺ…을 κ°€μ§„ ν˜•μ œ μš”μ†Œ μ€‘μ—μ„œ λ§ˆμ§€λ§‰ μš”μ†Œμ— μŠ€νƒ€μΌμ„ 적용

<!DOCTYPE html>
<html lang="ko">
<head>
  <style>
    p:first-of-type{
      color:red;
    }
  </style>
</head>
<body>
  <p>lorem 0</p>
  <div>
    <p>lorem 1</p>
    <p>lorem 2</p>
  </div>
  <div>
    <p>lorem 3</p>
    <p>lorem 4</p>
  </div>
</body>
</html>

:nth-of-type(n) : λ™μΌν•œ νƒœκ·Έλͺ…을 κ°€μ§„ ν˜•μ œ μš”μ†Œ μ€‘μ—μ„œ n번째 μš”μ†Œμ— μŠ€νƒ€μΌμ„ 적용

:nth-last-of-type(n) :λ™μΌν•œ νƒœκ·Έλͺ…을 κ°€μ§„ ν˜•μ œ μš”μ†Œ μ€‘μ—μ„œ λ’€μ—μ„œλΆ€ν„° n번째 μš”μ†Œμ— μŠ€νƒ€μΌμ„ 적용

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>nth-of-type(n)</title>
  <style>
    p:nth-of-type(2){
      color:red;
    }
  </style>
</head>
<body>
  <p>lorem 0</p>
  <div>
    <p>lorem 1</p>
    <span>span 1</span>
    <p>lorem 2</p>
  </div>
  <div>
    <p>lorem 3</p>
    <span>span 2</span>
    <span>span 3</span>
    <p>lorem 4</p>
  </div>
</body>
</html>

:only-of-type : λ™μΌν•œ νƒœκ·Έλͺ…을 κ°€μ§„ ν˜•μ œ μš”μ†Œκ°€ μœ μΌν•œ κ²½μš°μ— μŠ€νƒ€μΌμ„ 적용

:root : λ¬Έμ„œμ˜ 루트 μš”μ†Œμ— μŠ€νƒ€μΌμ„ 적용

λ‹€μ–‘ν•œ μ„ νƒμž μ‘°ν•©

자주 μ‚¬μš©ν•˜λŠ” μ„ νƒμž μ‘°ν•©

div.box{}
=> class 속성값이 box인 div νƒœκ·Έ
section#main{}
=> id 속성값이 main인 section νƒœκ·Έ

가상 ν΄λž˜μŠ€μ™€ ν•˜μœ„ μ„ νƒμž, μžμ‹ μ„ νƒμž μ‘°ν•©

(1) div:hover button{} 은 div μš”μ†Œ 내뢀에 μžˆλŠ” λͺ¨λ“  button μš”μ†Œμ— λŒ€ν•΄ λ§ˆμš°μŠ€κ°€ div μš”μ†Œ μœ„μ— μžˆμ„ λ•Œ μŠ€νƒ€μΌμ„ μ μš©ν•˜λŠ” μ„ νƒμž μž…λ‹ˆλ‹€. 이 μ„ νƒμžλŠ” div μš”μ†Œ 내뢀에 μžˆλŠ” λͺ¨λ“  button μš”μ†Œμ— λŒ€ν•΄ μŠ€νƒ€μΌμ„ μ μš©ν•˜λ©°, div μš”μ†Œμ™€ button μš”μ†Œ 사이에 λ‹€λ₯Έ μš”μ†Œκ°€ μžˆμ–΄λ„ μŠ€νƒ€μΌμ΄ μ μš©λ©λ‹ˆλ‹€.

 

(2) div:hover > button{} 은 div μš”μ†Œμ˜ 직계 μžμ‹μΈ button μš”μ†Œμ— λŒ€ν•΄ λ§ˆμš°μŠ€κ°€ div μš”μ†Œ μœ„μ— μžˆμ„ λ•Œ μŠ€νƒ€μΌμ„ μ μš©ν•˜λŠ” μ„ νƒμž μž…λ‹ˆλ‹€. 이 μ„ νƒμžλŠ” div μš”μ†Œμ˜ 직계 μžμ‹μΈ button μš”μ†Œμ— λŒ€ν•΄μ„œλ§Œ μŠ€νƒ€μΌμ„ μ μš©ν•˜λ©°, λ‹€λ₯Έ μš”μ†Œκ°€ μžˆμ„ κ²½μš°μ—λŠ” μŠ€νƒ€μΌμ΄ μ μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.


Dinner κ²Œμž„

https://flukeout.github.io/

 

CSS Diner

A fun game to help you learn and practice CSS selectors.

flukeout.github.io

 

profile

GiantStepDEV

@kongmi

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!