Jieunny의 λΈ”λ‘œκ·Έ

Unit4. CSS 기초 본문

CodeStates/learning contents

Unit4. CSS 기초

Jieunny 2022. 12. 16. 17:27

πŸ“£ CSS

βœ”οΈ CSS λž€?

μ›Ή νŽ˜μ΄μ§€ μŠ€νƒ€μΌ 및 λ ˆμ΄μ•„μ›ƒμ„ μ •μ˜ν•˜λŠ” μŠ€νƒ€μΌμ‹œνŠΈ μ–Έμ–΄


βœ”οΈ UI & UX λž€?

UI (μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€) : 컴퓨터에 λ¬΄μ§€ν•œ 일반 μ‚¬μš©μžκ°€ μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€
UX (μ‚¬μš©μž κ²½ν—˜)
직관적이고 μ‰¬μš΄ UI μ—μ„œ 쒋은 UX λ‚˜μ˜¨λ‹€.


βœ”οΈ CSS 문법 ꡬ성

μ…€λ ‰ν„°, μ„ μ–Έ 블둝, μ„ μ–Έ, 속성λͺ…, 속성값, μ„ μ–Έ κ΅¬λΆ„μž
body {
	color: red;
	font-size: 30px;
}


βœ”οΈ CSS 파일 μΆ”κ°€

1. μ™ΈλΆ€ μŠ€νƒ€μΌ μ‹œνŠΈ
html 파일 μ•ˆμ— <link> νƒœκ·Έ μ•ˆμ—μ„œ href 속성을 톡해 html, css νŒŒμΌμ„ μ—°κ²°
rel : μ—°κ²°ν•˜κ³ μž ν•˜λŠ” 파일의 μ—­ν• μ΄λ‚˜ νŠΉμ§•
href : 파일의 html과의 μƒλŒ€μ μΈ μœ„μΉ˜ (μ ˆλŒ€ κ²½λ‘œλ„ κ°€λŠ₯)
<link rel="stylesheet" href="index.css" />
2. λ‚΄λΆ€ μŠ€νƒ€μΌ μ‹œνŠΈ
css λ‚΄μš©μ„ 별도 파일둜 κ΅¬λΆ„ν•˜μ§€ μ•Šκ³  <style> μš”μ†Œ 내에 μž‘μ„±

3. 인라일 μŠ€νƒ€μΌ
html μ½”λ“œμ™€ 같은 쀄에 μŠ€νƒ€μΌμ„ 적용
<nav style="background: #eee; color: blue"> ... </nav>


🚨 id 와 class 의 차이

id class
#으둜 선택 . 으둜 선택
ν•œ λ¬Έμ„œμ—
단 ν•˜λ‚˜μ˜ μš”μ†Œμ—λ§Œ 적용
λ™μΌν•œ 값을 κ°–λŠ” μš”μ†Œ κ°€λŠ₯
νŠΉμ • μš”μ†Œμ—
이름을 λΆ™μ΄λŠ” 데 μ‚¬μš©
μŠ€νƒ€μΌμ˜ λΆ„λ₯˜μ— μ‚¬μš©
ex) checked, unchecked

 

 

πŸ“£ CSS 속성

βœ”οΈ 색상

κΈ€μž 색상 : color
λ°°κ²½ 색상 : background-color
λ°•μŠ€ ν…Œλ‘λ¦¬ 색상 : border-color


βœ”οΈ κΈ€κΌ΄

font-family : κΈ€κΌ΄ μ„€μ •
fallback κΈ€κΌ΄ : μ•žμ— μžˆλŠ” 글꼴이 μ•ˆ 될 경우 μ°¨λ‘€λŒ€λ‘œ 적용
.main {
	font-family: "SF Pro KR", "MalgunGothic", "Verdana";
}


βœ”οΈ ν…μŠ€νŠΈ

font-size : κΈ€μžμ˜ 크기 λ³€κ²½
font-weight : κ΅΅κΈ° λ³€κ²½
text-decoration : 밑쀄, κ°€λ‘œμ€„
letter-spacing : μžκ°„
line-height : ν–‰κ°„


βœ”οΈ μ •λ ¬

κ°€λ‘œ μ •λ ¬ : text-align (left, right, center, justify)

 

πŸ“£ λ‹¨μœ„

μ ˆλŒ€ λ‹¨μœ„ : px, pt λ“±
μƒλŒ€ λ‹¨μœ„ : %, em, rem, ch, vw, vh λ“±


βœ”οΈ κΈ€κΌ΄ μ‚¬μ΄μ¦ˆλ₯Ό μ •ν•  λ•Œ

1. μ£Όλ³€ ν™˜κ²½μ— 영ν–₯을 받지 μ•ŠλŠ” μ ˆλŒ€μ μΈ 크기둜 μ •ν•˜λŠ” 경우 : px

2. 일반적인 경우 : rem
μ‚¬μš©μžκ°€ μ„€μ •ν•œ κΈ°λ³Έ κΈ€κΌ΄ 크기(root의 κΈ€μž 크기)λ₯Ό κΈ°μ€€μœΌλ‘œ ν•˜λŠ” μƒλŒ€ λ‹¨μœ„
em은 λΆ€λͺ¨ μ—˜λ¦¬λ¨ΌνŠΈμ— 따라 λ°”λ€Œλ―€λ‘œ 계산이 μ–΄λ ΅λ‹€.


βœ”οΈ ν™”λ©΄ μ‚¬μ΄μ¦ˆλ₯Ό μ •ν•  λ•Œ

1. λ°˜μ‘ν˜• μ›Ήμ—μ„œ 기쀀점을 λ§Œλ“€λ•Œ
λ””λ°”μ΄μŠ€ ν¬κΈ°λ³„λ‘œ CSSλ₯Ό 달리 ν•΄μ•Όν•œλ‹€.
λ””λ°”μ΄μŠ€ 크기λ₯Ό λ‚˜λˆ„λŠ” 기쀀은 px

2. ν™”λ©΄ λ„ˆλΉ„λ‚˜ 높이에 λ”°λ₯Έ μƒλŒ€μ μΈ 크기가 μ€‘μš”ν•œ 경우
μ›Ήμ‚¬μ΄νŠΈμ˜ λ³΄μ΄λŠ” μ˜μ—­(Viewport)을 κΈ°μ€€μœΌλ‘œ ν•˜λŠ” vw, vh
ν™”λ©΄ 가득 μ±„μš°λŠ” 방법 -> 100vw, 100vh

 

πŸ“£ λ°•μŠ€λͺ¨λΈ

λͺ¨λ“  μ½˜ν…μΈ λŠ” 각자의 μ˜μ—­μ„ 가진닀.
ν•˜λ‚˜μ˜ μ»¨ν…μΈ λ‘œ λ¬Άμ΄λŠ” μš”μ†Œλ“€μ΄ ν•˜λ‚˜μ˜ λ°•μŠ€κ°€ λœλ‹€.
λ°•μŠ€λŠ” 항상 μ§μ‚¬κ°ν˜•, λ„ˆλΉ„μ™€ 높이λ₯Ό κ°–λŠ”λ‹€.


βœ”οΈ block μš”μ†Œ

쀄 λ°”κΏˆμ΄ λ˜λŠ” λ°•μŠ€
<h1>, <p>, <div>


βœ”οΈ inline μš”μ†Œ

쀄 λ°”κΏˆ 없이 μ˜†μœΌλ‘œ λΆ™λŠ” λ°•μŠ€
크기 지정을 ν•  수 μ—†λŠ” λ°•μŠ€
<span>


βœ”οΈ inline-block μš”μ†Œ

쀄 λ°”κΏˆμ΄ μΌμ–΄λ‚˜μ§€ μ•ŠλŠ” λ°•μŠ€ + block λ°•μŠ€μ˜ νŠΉμ§•
자체적으둜 고유의 크기λ₯Ό 가진닀.


🚨 정리

  block inline-block inline
μ€„λ°”κΏˆ O X X
기본적으둜
κ°–λŠ” λ„ˆλΉ„
(width)
100% κΈ€μžκ°€
μ°¨μ§€ν•˜λŠ” 만큼
κΈ€μžκ°€
μ°¨μ§€ν•˜λŠ” 만큼
크기 μ„€μ •
κ°€λŠ₯ μ—¬λΆ€
O O X


βœ”οΈ λ°•μŠ€λ₯Ό κ΅¬μ„±ν•˜λŠ” μš”μ†Œ

➰ border : ν…Œλ‘λ¦¬
➰ margin : λ°”κΉ₯ μ—¬λ°± (top, right, bottom, left or top&bottom, left&right μˆœμ„œ)
음수 값을 지정 ν•  수 μžˆλ‹€.
➰ padding : μ•ˆμͺ½ μ—¬λ°±


βœ”οΈ λ°•μŠ€λ₯Ό λ²—μ–΄λ‚˜λŠ” μ½˜ν…μΈ  처리

λ°•μŠ€ 크기보닀 μ½˜ν…μΈ  크기가 더 큰 경우 μ½˜ν…μΈ κ°€ λ°•μŠ€ λ°–μœΌλ‘œ λΉ μ Έλ‚˜μ˜¨λ‹€.
λΉ μ Έλ‚˜μ˜€λŠ” 뢀뢄을 κ°€λ¦¬κ±°λ‚˜ or λ°•μŠ€ μ•ˆμ— μŠ€ν¬λ‘€μ„ μΆ”κ°€ν•œλ‹€.
λ°•μŠ€μ— overflow : hidden or auto; 속성 지정


βœ”οΈ λ°•μŠ€ 크기 μΈ‘μ • κΈ°μ€€

λ°•μŠ€μ— μ μš©ν•  여백을 κ³ λ €ν•΄μ•Ό ν•œλ‹€.
box-sizing : border-box. // λ°•μŠ€μ—μ„œ μ—¬λ°±κ³Ό ν…Œλ‘λ¦¬λ₯Ό ν¬ν•¨ν•œ 크기둜 κ³„μ‚°λœλ‹€.

 

πŸ“£ CSS Selector

βœ”οΈ κΈ°λ³Έ μ…€λ ‰ν„°

전체 μ…€λ ‰ν„° *
νƒœκ·Έ μ…€λ ‰ν„° h1, div, section ...
id μ…€λ ‰ν„° #hello
class μ…€λ ‰ν„° .hello
attribute μ…€λ ‰ν„° : 같은 속성을 가진 μš”μ†Œλ₯Ό 선택
➰ p[id="only"] // id값이 only인 p λ₯Ό 선택

 

🚨 CSS 클래슀 띄어쓰기

➰ 곡백없이 클래슀끼리 λΆ™μ–΄μžˆλŠ” 경우

     .name1.name2 : name1 κ³Ό name2 κ°€ λͺ¨λ‘ μ„ μ–Έλœ μš”μ†Œ

➰ μ‰Όν‘œκ°€ μžˆλŠ” 경우

     .name1, name2 : name1 λ˜λŠ” name 2 인 μš”μ†Œ λͺ¨λ‘

➰ 클래슀 사이 곡백이 μžˆλŠ” 경우

     .name1  .name2 : .name1 클래슀의 ν•˜μœ„ μš”μ†ŒμΈ .name2 클래슀 μš”μ†Œ


βœ”οΈ μžμ‹ μ…€λ ‰ν„°

header > p {}
<header> μš”μ†Œ μ•„λž˜μ— μžˆλŠ” <p> μš”μ†ŒλŠ” μ„ νƒλ˜κ³ 
<span> μš”μ†Œ μžμ‹μΈ <p> λŠ” μ„ νƒλ˜μ§€ μ•ŠλŠ”λ‹€.
λ°”λ‘œ μ•„λž˜ μžμ‹λ§Œ 선택

 

βœ”οΈ 후손 μ…€λ ‰ν„°

header p {}
첫 번째둜 μž…λ ₯ν•œ μš”μ†Œμ˜ 후손을 μ„ νƒν•œλ‹€.
λ°”λ‘œ μ•„λž˜ μžμ‹ + 후손 μš”μ†Œ

 

βœ”οΈ ν˜•μ œ μ…€λ ‰ν„°

section ~ p {}
<header>
	<section></section>
    	<p></p>
    	<p></p>
    	<p></p>
</header>
section μš”μ†Œλ₯Ό λ’€λ”°λ₯΄λŠ” λͺ¨λ“  <p>
<p> μš”μ†Œλ₯Ό λͺ¨λ‘ μ„ νƒν•œλ‹€.

 

βœ”οΈ 인접 ν˜•μ œ μ…€λ ‰ν„°

section + p {}
section μš”μ†Œλ₯Ό λ°”λ‘œ λ’€λ”°λ₯΄λŠ” <p> μš”μ†Œ
첫 번째 <p> μš”μ†Œλ₯Ό μ„ νƒν•œλ‹€.

 

βœ”οΈ 가상 클래슀 μ…€λ ‰ν„°

a:link       μ‚¬μš©μžκ°€ λ°©λ¬Έν•˜μ§€ μ•Šμ€ <a>μš”μ†Œλ₯Ό 선택
a:visited  μ‚¬μš©μžκ°€ λ°©λ¬Έν•œ <a>μš”μ†Œ 선택
a:hover    마우슀λ₯Ό μš”μ†Œ <a>μš”μ†Œ μœ„μ— μ˜¬λ Έμ„ λ•Œ 선택
a:active   ν΄λ¦­λœ μƒνƒœμΌ λ•Œ 선택
a:focus    ν¬μ»€μŠ€κ°€ 듀어와 μžˆμ„ λ•Œ 선택

 

βœ”οΈ UI μš”μ†Œ μƒνƒœ μ…€λ ‰ν„°

input:checked + span {}  체크 μƒνƒœμΌ λ•Œ 선택
input:enabled + span {}   μ‚¬μš© κ°€λŠ₯ν•œ μƒνƒœμΌ λ•Œ 선택
input:disabled + span {}  μ‚¬μš© λΆˆκ°€λŠ₯ν•œ μƒνƒœμΌ λ•Œ 선택

 

βœ”οΈ ꡬ쑰 가상 클래슀 μ…€λ ‰ν„°

p:first-child {}                 ν˜•μ œ μš”μ†Œ 쀑 첫번째 μš”μ†Œ 선택 (pκ°€ μ²«λ²ˆμ§Έμ— μžˆμ–΄μ•Ό μ μš©κ°€λŠ₯ν•œ μ½”λ“œ)
ul > li:last-child {}           ul λ°”λ‘œ μ•„λž˜ λ§ˆμ§€λ§‰ li μš”μ†Œ 선택
ul > li:nth-child(2n) {}    ul의 λ°”λ‘œ μ•„λž˜ 짝수번째 li 선택
div:nth-last-child(2) {}   div의 λ§ˆμ§€λ§‰ μš”μ†Œλ‘œλΆ€ν„° 2번째 μš”μ†Œ
p:first-of-type {}             <p> μš”μ†Œμ™€ 같은 νƒ€μž…μ˜ 첫번째 ν˜•μ œ 선택
div:last-of-type {}           <div> μš”μ†Œμ™€ 같은 νƒ€μž…μ˜ λ§ˆμ§€λ§‰ ν˜•μ œ 선택
ul:nth-of-type(2) {}         μ²˜μŒλΆ€ν„° <ul> μš”μ†Œμ™€ 같은 νƒ€μž…μ˜ 2번째 ν˜•μ œ 선택
p:nth-last-of-type(1) {}  λ§ˆμ§€λ§‰λΆ€ν„° <p> μš”μ†Œμ™€ 같은 νƒ€μž…μ˜ 1번째 ν˜•μ œ 선택

 

🚨 :first-child 와 :first-of-type의 차이

<div>
	<div>text1<text>
	<p>text2</p>
	<p>text3</p>
</div>
div p:first-child { color: red }
// div ν•˜μœ„ μ—˜λ¦¬λ¨ΌνŠΈ 쀑 p μ—˜λ¦¬λ¨ΌνŠΈκ°€ κ°€μž₯ μ²«λ²ˆμ§Έμ— μœ„μΉ˜ν•΄μ•Ό ν•˜λŠ”λ° 그렇지 μ•Šμ•„μ„œ 선택할 수 μ—†λ‹€.
// λ³€ν™” μ—†μŒ.

div p:first-of-type { color : red }
// p μ—˜λ¦¬λ¨ΌνŠΈλ§Œμ„ κΈ°μ€€μœΌλ‘œ 카운트 ν•˜κΈ° λ•Œλ¬Έμ— text2의 색상이 λ°”λ€œ.

 

βœ”οΈ λΆ€μ • μ…€λ ‰ν„°

input:not([type="password"]) {}  type이 password κ°€ μ•„λ‹Œ input 선택
div:not(:nth-of-type(2)) {}            div ν˜•μ œμš”μ†Œ 쀑 λ‘λ²ˆμ§Έ div κ°€ μ•„λ‹Œ μš”μ†Œ 선택

 

βœ”οΈ μ •ν•©μ„± 확인 μ…€λ ‰ν„°

input[type="text"]:valid {}      μ •ν•©μ„± 검증이 μ„±κ³΅ν•œ type="text"인 input 선택
input[type="text"]:invalid {}   μ •ν•©μ„± 검증이 μ„±κ³΅ν•œ type="text"인 input 선택