λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Frontend Dev/πŸ₯ μ½”λ“œμŠ€ν…Œμ΄μΈ  FE λΆ€νŠΈμΊ ν”„

Section1 Unit3 CSS 기초

λ°˜μ‘ν˜•

Section1 Unit3 [CSS] 기초

 

πŸ“Œ Chapter1. CSS 기초

• CSS와 UI, UX

 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ (UI; user interface)

     → interface : 컴퓨터와 ꡐλ₯˜ν•˜κΈ° μœ„ν•œ 연결고리.

 λ²„νŠΌλ„ μ—†κ³ , λ§ˆμš°μŠ€λ„ μ—†λ˜ μ‹œλŒ€μ˜ κ°œλ°œμžλŠ” μžμ‹ μ΄ λ§Œλ“  μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μ†Œν†΅ν•˜κΈ° μœ„ν•΄ CLIλ₯Ό μ‚¬μš©ν–ˆλ‹€. ν‚€λ³΄λ“œλ‘œ μž‘μ„±ν•œ λΉ„λ°€ μ•”ν˜Έ 같은 μ½”λ“œλ₯Ό μ μ–΄μ„œ μ—”ν„°λ₯Ό λˆŒλŸ¬μ•Όλ§Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘λ™μ‹œν‚¬ 수 μžˆμ—ˆλ‹€. ν•˜μ§€λ§Œ μ§€κΈˆμ€ ν‚€λ³΄λ“œ μΈν„°νŽ˜μ΄μŠ€λ‘œ μž…λ ₯을 ν•  수 있고, λ²„νŠΌ λͺ¨μ–‘μ˜ μΈν„°νŽ˜μ΄μŠ€λ‘œ μž…λ ₯ν•œ λ‚΄μš©μ„ 전솑할 수 μžˆλ‹€. μ΄λ ‡κ²Œ 일반 μ‚¬μš©μžκ°€ μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€, UI라고 λΆ€λ₯Έλ‹€.

 UIλŠ” μ‚¬μš©μžκ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‚¬μš©ν•˜κ²Œ ν•˜λŠ”λ° 맀우 μ€‘μš”ν•œ 역할을 ν•˜κ³ , UIκ°€ μ—†μœΌλ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μ†Œν†΅μ΄ μ–΄λ €μšΈ 수 μžˆλ‹€. μ§κ΄€μ μœΌλ‘œ μ‰¬μš΄ UI μ œμž‘μ€ ν”„λ‘ νŠΈμ—”λ“œ 개발자의 κΈ°λ³Έ μ†Œμ–‘μ΄λ‹€.

 

 β­οΈ 쒋은 μ‚¬μš©μž κ²½ν—˜(UX; user experience)은 직관적이고 μ‰¬μš΄ UIμ—μ„œ λ‚˜μ˜¨λ‹€.

 

 id와 classλŠ” μ „λ‚  HTMLμ—μ„œλ„ λ‹€λ€˜λŠ”λ°, CSS와 κ΄€λ ¨ν•΄μ„œ ν•œλ²ˆ 더 λ‹€λ£¨μ—ˆλ‹€. 

id class
# 으둜 선택 . 으둜 선택
고유(unique)ν•œ 이름을 뢙일 λ•Œ
(ν•œ λ¬Έμ„œμ— 단 ν•˜λ‚˜μ˜ μš”μ†Œμ—λ§Œ 적용)
λ°˜λ³΅λ˜λŠ” μ˜μ—­μ„ μœ ν˜•λ³„λ‘œ λΆ„λ₯˜ν•  λ•Œ
(λ™μΌν•œ 값을 κ°–λŠ” μš”μ†Œκ°€ λ§Žμ„ 수 있음)
νŠΉμ • μš”μ†Œμ— 이름을 λΆ™μ΄λŠ” 데 μ‚¬μš© μŠ€νƒ€μΌμ˜ λΆ„λ₯˜(classification)에 μ‚¬μš©

 

색상(color, background-color, border-color), κΈ€κΌ΄(font-familiy), 크기(font-size), μ •λ ¬ λ“±μ˜ κΈ°λ³Έ μŠ€νƒ€μΌλ§μ— λŒ€ν•΄μ„œλ„ λ°°μ› λ‹€. 

 

CSS UNITS (μ ˆλŒ€ λ‹¨μœ„μ™€ μƒλŒ€ λ‹¨μœ„)

 CSSμ—λŠ” px, % λ“±μ˜ λ‹¨μœ„λ“€μ΄ μžˆλŠ”λ° 자주 μ‚¬μš©ν•˜λŠ” λ‹¨μœ„λ₯Ό λ”°λ‘œ μ •λ¦¬ν•΄λ³΄μ•˜λ‹€.

 μ˜ˆμ „에 emκ³Ό rem의 μ‚¬μš©μ΄ ν—·κ°ˆλ Έλ˜ 적이 μžˆμ—ˆλŠ”λ°, 자료λ₯Ό 찾아보고 글을 μ •λ¦¬ν•˜λ©΄μ„œ μ΄λ²ˆμ— λ‹€μ‹œ ν•œ 번 λͺ…ν™•ν•˜κ²Œ μ•Œκ²Œ λ˜μ–΄μ„œ μ˜λ―Έκ°€ μžˆλŠ” μ‹œκ°„μ΄μ—ˆλ‹€ 😊

 

CSS UNITS (μ ˆλŒ€ λ‹¨μœ„μ™€ μƒλŒ€ λ‹¨μœ„)

πŸ‘Ύ 자주 μ‚¬μš©λ˜λŠ” CSS Units • μ ˆλŒ€ λ‹¨μœ„: px, pt λ“± • μƒλŒ€ λ‹¨μœ„: %, em, rem, vw, vh λ“± βœ“ 기본적으둜 λΈŒλΌμš°μ €μ—μ„œ html에 ν• λ‹Ήλ˜λŠ” 폰트 μ‚¬μ΄μ¦ˆλŠ” 16px (100%, 1em) • px px은 λͺ¨λ‹ˆν„° μœ„μ—μ„œ 화면에 λ‚˜νƒ€λ‚Ό

fay-story.com


그리고 μ΄λ²ˆμ— μƒˆλ‘­κ²Œ μ•Œμ•˜λŠ”λ°, 이와 같은 UIλ₯Ό holy grail (μ„±λ°°) UI 라고 λΆ€λ₯Έλ‹€κ³  ν•œλ‹€!

 

πŸ“Œ Chapter2. λ°•μŠ€λͺ¨λΈ

Block μš”μ†Œμ™€ Inline μš”μ†Œ

HTML의 λͺ¨λ“  μš”μ†ŒλŠ” ν•΄λ‹Ή μš”μ†Œκ°€ μ›Ή λΈŒλΌμš°μ €μ— μ–΄λ–»κ²Œ λ³΄μ΄λŠ”κ°€λ₯Ό κ²°μ •μ§“λŠ” display 속성을 가진닀.

  block inline-block inline
μ„€λͺ… μ–Έμ œλ‚˜ μƒˆλ‘œμš΄ λΌμΈμ—μ„œ μ‹œμž‘ν•˜λ©°, ν•΄λ‹Ή 라인의 λͺ¨λ“  λ„ˆλΉ„λ₯Ό μ°¨μ§€ν•œλ‹€. inline λ°•μŠ€μ²˜λŸΌ λ‹€λ₯Έ μš”μ†Œμ˜ μ˜†μœΌλ‘œ λΆ™μœΌλ©΄μ„œ, 자체적으둜 고유의 크기λ₯Ό 가진닀. ν•΄λ‹Ή HTML μš”μ†Œμ˜ λ‚΄μš©λ§ŒνΌλ§Œ 자리λ₯Ό μ°¨μ§€ν•œλ‹€.
쀄 λ°”κΏˆ μ—¬λΆ€ O X X
기본적으둜 κ°–λŠ” λ„ˆλΉ„(width) 100% κΈ€μžκ°€ μ°¨μ§€ν•˜λŠ” 만큼 κΈ€μžκ°€ μ°¨μ§€ν•˜λŠ” 만큼
width, height μ‚¬μš© κ°€λŠ₯ μ—¬λΆ€ O O X
λŒ€ν‘œμ μΈ μš”μ†Œ p, div, h, ul, ol, form   span, a, img

 

contentspaddingbordermargin으둜 κ΅¬μ„±λœ boxλͺ¨λΈμ— κ΄€ν•΄μ„œλ„ ν•™μŠ΅ν–ˆλ‹€.

κ°œλ°œμžλ„κ΅¬μ—μ„œ 각 μš”μ†Œμ— 적용된 λ°•μŠ€μ˜ 크기λ₯Ό μ‰½κ²Œ 확인할 수 μžˆλ‹€.

 

πŸ“Œ Chapter3. CSS Selector

기본적인 셀렉터에 κ΄€ν•œ λ‚΄μš©λ“€λ„ ν•™μŠ΅ν–ˆλŠ”λ°, κ΄€λ ¨ 자료λ₯Ό μ½λŠ” 쀑에 λ‚΄κ°€ μ΄μ „μ—λŠ” λ”°λ‘œ 기둝해두지 μ•Šμ•˜λ˜ 'μ •ν•©μ„± 확인 μ…€λ ‰ν„°'κ°€ μžˆμ—ˆλ‹€. (μ•½κ°„ ν—·κ°ˆλ¦¬λŠ” 뢀뢄을 ChatGPTμ—κ²Œ λ¬Όμ–΄λ΄€λŠ”λ°, 정말 잘 μ•Œλ €μ€€λ‹€... 팩트체크만 잘 ν•΄μ„œ μ‚¬μš©ν•˜λ©΄ κ³΅λΆ€ν•˜λŠ”λ° λ„ˆλ¬΄λ‚˜λ„ μœ μš©ν•œ 도ꡬ가 될 λ“―!)

 

 μ •ν•©μ„± 확인 μ…€λ ‰ν„°μ—λŠ” :valid, :invalidκ°€ 있으며, μ΄λŠ” 폼 μš”μ†Œκ°€ μœ νš¨ν•œμ§€ λ˜λŠ” μœ νš¨ν•˜μ§€ μ•Šμ€μ§€λ₯Ό ν™•μΈν•˜λŠ”λ° μ‚¬μš©ν•œλ‹€. (폼 μš”μ†Œμ—λ§Œ 적용 κ°€λŠ₯ν•˜λ©°, input, textarea, select λ“±κ³Ό 같은 μš”μ†Œμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.)

input[type="text"]:valid { } 
input[type="text"]:invalid { }

 :valid <input> μš”μ†Œμ— μœ νš¨ν•œ 데이터가 μž…λ ₯되면 μ μš©λœλ‹€. 이λ₯Ό μ‚¬μš©ν•˜μ—¬, μœ νš¨ν•œ 데이터가 μž…λ ₯된 μž…λ ₯λž€μ„ μ‹œκ°μ μœΌλ‘œ κ°•μ‘°ν•˜κ±°λ‚˜, 제좜 λ²„νŠΌμ„ ν™œμ„±ν™”ν•˜λŠ” λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€.

 :invalid <input> μš”μ†Œκ°€ ν•„μˆ˜μ μ΄κ³  λΉ„μ–΄ 있으면 μ μš©λœλ‹€. 이λ₯Ό ν™œμš©ν•˜μ—¬, μ‚¬μš©μžμ—κ²Œ ν•΄λ‹Ή μž…λ ₯λž€μ΄ λΉ„μ–΄ μžˆλŠ”κ²ƒμ„ μ•Œλ €μ£Όκ±°λ‚˜ 폼 μ œμΆœμ„ 방지할 수 μžˆλ‹€.

 

 'μ •ν•©μ„± 확인'μ΄λΌλŠ” 말이 쑰금 μ–΄λ ΅κ²Œ λŠκ»΄μ Έμ„œ μš©μ–΄ μžμ²΄λŠ” 와닿지 μ•Šμ§€λ§Œ valid, invalid μ…€λ ‰ν„°λ₯Ό μ–΄λ–»κ²Œ μ‚¬μš©ν•΄μ•Ό ν• μ§€λŠ” μ•Œ 것 κ°™λ‹€.

 


πŸŒ™  였늘의 회고

 μ˜€λŠ˜λ„ μ–΄μ œμ™€ λΉ„μŠ·ν•˜κ²Œ CSS 과정을 λ¬΄λ‚œν•˜κ²Œ μ§„ν–‰ν–ˆλ‹€. HTML, CSS 뢀뢄은 이번주둜 끝이 λ‚˜λŠ” 것 같은데 진도가 ꡉμž₯히 λΉ¨λΌμ„œ λ‚˜μ€‘μ— JS와 Recatλ₯Ό ν•  λ•Œκ°€ 걱정이 λ˜κΈ°λŠ” ν–ˆλ‹€.

 μ˜€λŠ˜ κ°•μ˜λ₯Ό 보며 λ‹€μ‹œ μƒκ°ν•œ 뢀뢄이 μžˆλ‹€. μ΄μ „μ—λŠ” ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžκ°€ CSSλ₯Ό 잘 λ‹€λ£¨λŠ” 것을 UI, UX와 ν•¨κ»˜ μƒκ°ν•˜μ§€λŠ” μ•Šμ•˜λ˜ 점이닀. UIUXλ₯Ό κ³ λ €ν•˜λŠ” 건 κΈ°νšμžμ™€ λ””μžμ΄λ„ˆμ˜ μ˜μ—­μ΄λΌκ³  μƒκ°ν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€. λ¬Όλ‘  κ·Έ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 것은 개발자의 μ˜μ—­μ΄λΌκ³  할지라도 말이닀. ν•˜μ§€λ§Œ μƒκ°ν•΄λ³΄λ‹ˆ μ μ ˆν•œ HTML νƒœκ·Έλ‘œ μ˜λ―ΈμžˆλŠ” λ§ˆν¬μ—…μ„ ν•˜κ³ , CSS둜 λͺ…ν™•ν•œ μŠ€νƒ€μΌλ§μ„ ν•˜λŠ” 것은 개발자의 μ˜μ—­μΌν…Œλ‹ˆ, UIUX와 연관이 μ—†λ‹€κ³  말할 μˆ˜λŠ” 없을 것 κ°™λ‹€λŠ” 생각이 λ“€μ—ˆλ‹€. (μ›Ή 접근성을 생각해도 UIUXλŠ” 화면을 κ΅¬ν˜„ν•˜λŠ” ν”„λ‘ νŠΈ κ°œλ°œμžμ—κ²Œλ„ μ€‘μš”ν•œ μš”μ†ŒμΈλ“― ν•˜λ‹€.)

 HTMLκ³Ό CSSλ₯Ό κ°•μ˜λ₯Ό 보며 λΈ”λ‘œκ·Έ 글을 μ“°λ‹€κ°€ μƒκ°ν•œ 건데, μ΄λ²ˆμ— λΆ€νŠΈμΊ ν”„λ₯Ό μ§„ν–‰ν•˜λ©° λΈ”λ‘œκ·Έμ— 기둝을 μ—΄μ‹¬νžˆ 해봐야겠닀고 λ‹€μ‹œ ν•œλ²ˆ λ‹€μ§ν–ˆλ‹€. λ‚˜ 혼자 보기 μœ„ν•΄ λ…Έμ…˜μ— κΈ°λ‘ν•œ κΈ€κ³Ό 곡유λ₯Ό μœ„ν•΄ λΈ”λ‘œκ·Έμ— μ •λ¦¬ν•œ κΈ€μ˜ 차이가 λŠκ»΄μ§„λ‹€λž„κΉŒ. λΈ”λ‘œκ·Έμ— 정리λ₯Ό ν•˜λ‹€λ³΄λ©΄ 쑰금 더 μ •ν™•ν•œ 정보λ₯Ό μ›ν•˜κ²Œ 되고, μŠ€μŠ€λ‘œλ„ λ¨Έλ¦Ώμ†μ—μ„œ λ‹€μ‹œ ν•œ 번 정리도 ν•  수 있게 λ˜λŠ” 것 κ°™λ‹€. κ·Έ 기둝을 μ·¨μ—… μ€€λΉ„λ₯Ό ν•  λ•Œ ν¬νŠΈν΄λ¦¬μ˜€λ‘œλ„ μ‚¬μš©ν•˜κΈ°μ—λ„ λ„ˆλ¬΄ 쒋을 것 κ°™λ‹€λŠ” 생각이 λ“€μ—ˆλ‹€. ν•˜μ§€λ§Œ λ„ˆλ¬΄ 완벽함을 μΆ”κ΅¬ν•˜μ§€λŠ” 말자. μ™„λ²½ν•˜μ§€ μ•ŠμœΌλ©΄ 글을 λ°œν–‰μ‹œν‚€μ§€ λͺ»ν•˜λŠ” 건 λ„ˆλ¬΄ λ§Žμ€ μ‹œκ°„μ΄ μ†Œμš”λœλ‹€. κ³΅λΆ€λ§Œ ν•˜κΈ°μ—λ„ λΆ€μ‘±ν•œ μ‹œκ°„μ΄λ‹ˆ.

λ°˜μ‘ν˜•