[HTML/CSS] CSS 기초

λ””λ”©Β·2022λ…„ 10μ›” 26일
0

Section

λͺ©λ‘ 보기
6/18
post-thumbnail

πŸ•– DAY +6 / 2022. 10. 27

SEB FE / Section1 / Unit5 / CSS 기초



πŸ“Œ Today I Learned

  • CSS 기초
  • λ°•μŠ€ λͺ¨λΈ
  • CSS selector

πŸ’¬ CSSλž€?

μ›Ή νŽ˜μ΄μ§€ μŠ€νƒ€μΌ 및 λ ˆμ΄μ•„μ›ƒμ„ μ •μ˜ν•˜λŠ” μŠ€νƒ€μΌμ‹œνŠΈ μ–Έμ–΄λ‹€.
UI 및 λ ˆμ΄μ•„μ›ƒμ„ 적절히 κ΅¬μ„±ν•˜λ©΄ 멋진 μ›Ή νŽ˜μ΄μ§€λ₯Ό μ™„μ„±ν•  수 μžˆλ‹€.

CSS λ¬Έλ²•μ˜ ꡬ성

  • ν•˜λ‚˜μ˜ μ†μ„±λ§Œ μ‘΄μž¬ν•  λ•ŒλŠ” μ„Έλ―Έμ½œλ‘ (;)을 뢙이지 μ•Šμ•„λ„ λ˜μ§€λ§Œ, 속성과 값을 μž‘μ„±ν•œ λ‹€μŒ μ„Έλ―Έμ½œλ‘ μ„ μ λŠ” μŠ΅κ΄€μ„ λ“€μ΄λŠ” 것이 μ’‹λ‹€.

id와 class의 차이점

  • ID
    #으둜 선택
    ν•œ λ¬Έμ„œμ— 단 ν•˜λ‚˜μ˜ μš”μ†Œμ—λ§Œ 적용
    νŠΉμ • μš”μ†Œμ— 이름을 λΆ™μ΄λŠ” 데 μ‚¬μš©

  • class
    .으둜 선택
    λ™μΌν•œ 값을 κ°–λŠ” μš”μ†Œ 많음
    μŠ€νƒ€μΌ λΆ„λ₯˜(classificatio)에 μ‚¬μš©

예제

.blue {
  color: #0000ff;
}
<!-- blue class의 color 속성에 #0000ff 값을 ν• λ‹Ήν•œλ‹€ -->

.box {
  color: #000000; /* κΈ€μž 색상 */
  background-color: #c7b299; /* λ°°κ²½ 색상 */
  border-color: #ffffff; /* ν…Œλ‘λ¦¬ 색상 */
}
<!-- κΈ€μž, λ°°κ²½, ν…Œλ‘λ¦¬ 색상은 각기 λ‹€λ₯Έ 속성을 가지고 μžˆλ‹€ -->

.emphasize {
  font-family: "SF Pro KR", "MalgunGothic", "Verdana";
}
<!-- font-family 속성을 톡해 κΈ€κΌ΄(폰트)을 μ„€μ •ν•  수 μžˆλ‹€ -->

κΈ€κΌ΄μ˜ 이름은 λ”°μ˜΄ν‘œλ₯Ό λΆ™μ—¬μ„œ μ μš©ν•  수 μžˆλ‹€. μ‚¬μš©ν•˜λ €λŠ” 글꼴이 μ‘΄μž¬ν•˜μ§€ μ•Šκ±°λ‚˜, λ””λ°”μ΄μŠ€μ— 따라 μ§€μ›ν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€. 이런 경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ fallback 글꼴을 μΆ”κ°€ν•  수 μžˆλ‹€. fallback은 ν‘œν˜„ν•˜κ³  싢은 글꼴이 μ—†κ±°λ‚˜ μ‚¬μš©ν•  수 μ—†λŠ” 경우λ₯Ό μœ„ν•œ λŒ€λΉ„μ±…μ΄λ‹€. fallback을 μœ„ν•΄ μ—¬λŸ¬ 글꼴을 μ‚¬μš©ν•˜λŠ” 경우, μ‰Όν‘œλ‘œ κ΅¬λΆ„ν•˜μ—¬ μž…λ ₯ν•  수 μžˆλ‹€. μž…λ ₯된 μˆœμ„œλŒ€λ‘œ fallback이 μ μš©λœλ‹€.

기타 μŠ€νƒ€μΌλ§

λ‹¨μœ„

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

πŸ’« κΈ€κΌ΄ μ‚¬μ΄μ¦ˆλ₯Ό μ •ν•  λ•Œ

  1. κΈ°κΈ°λ‚˜ λΈŒλΌμš°μ € μ‚¬μ΄μ¦ˆ λ“±μ˜ ν™˜κ²½μ— 영ν–₯을 받지 μ ˆλŒ€μ μΈ 크기둜 μ •ν•˜λŠ” 경우

    • px을 μ‚¬μš©ν•œλ‹€.
    • 픽셀은 크기가 κ³ μ •λœ μ ˆλŒ€ λ‹¨μœ„μ΄κΈ° λ•Œλ¬Έμ— μ‚¬μš©μž 접근성이 λΆˆλ¦¬ν•˜λ‹€.
    • λͺ¨λ°”일 기기처럼 μž‘μ€ ν™”λ©΄μ΄λ©΄μ„œ λ™μ‹œμ— 고해상도인 κ²½μš°μ— μ ν•©ν•˜μ§€ μ•Šλ‹€.
    • 인쇄와 같이 ν™”λ©΄μ˜ μ‚¬μ΄μ¦ˆκ°€ 정해진 경우 μœ λ¦¬ν•˜λ‹€.
  2. 일반적인 경우

    • μƒλŒ€ λ‹¨μœ„ rem을 μΆ”μ²œν•œλ‹€.
    • root의 κΈ€μž 크기, 즉 λΈŒλΌμš°μ €μ˜ κΈ°λ³Έ κΈ€μž 크기가 1rem이며 두 배둜 크게 ν•˜κ³  μ‹Άλ‹€λ©΄ 2rem, μž‘κ²Œ ν•˜λ €λ©΄ 0.8remλ“±μœΌλ‘œ μ‘°μ ˆν•˜μ—¬ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

πŸ’« ν™”λ©΄ μ‚¬μ΄μ¦ˆλ₯Ό μ •ν•  λ•Œ

  1. λ°˜μ‘ν˜• μ›Ή(responsive web)μ—μ„œ 기쀀점을 λ§Œλ“€ λ•Œ

    • μœ λ™μ μΈ λ ˆμ΄μ•„μ›ƒμ΄ μ μš©λ˜λŠ” μ›Ήμ‚¬μ΄νŠΈλ₯Ό λ§ν•œλ‹€.
    • λ°μŠ€ν¬νƒ‘, νƒœλΈ”λ¦Ώ, 슀마트폰 μ„Έλ‘œ, κ°€λ‘œ λ“±
    • λ””λ°”μ΄μŠ€ ν¬κΈ°λ³„λ‘œ CSSλ₯Ό λ‹€λ₯΄κ²Œ μ μš©ν•΄μ•Ό ν•œλ‹€.
    • λ””λ°”μ΄μŠ€ 크기λ₯Ό λ‚˜λˆ„λŠ” 기쀀은 보톡 px둜 μ§€μ •ν•œλ‹€.
  2. ν™”λ©΄ λ„ˆλΉ„λ‚˜ 높이에 λ”°λ₯Έ μƒλŒ€μ μΈ 크기가 μ€‘μš”ν•œ 경우

    • vw, vh μ‚¬μš©μ„ μΆ”μ²œν•œλ‹€.
    • μ›Ήμ‚¬μ΄νŠΈμ˜ λ³΄μ΄λŠ” μ˜μ—­μ„ Viewport라고 ν•˜λŠ”λ° vw, vhλŠ” 각각 viewport width와 viewport heightλ₯Ό λœ»ν•œλ‹€.
    • 1vwλŠ” λ³΄μ΄λŠ” μ˜μ—­ λ„ˆλΉ„μ˜ 1/100을, 1vhλŠ” λ³΄μ΄λŠ” μ˜μ—­ λ†’μ΄μ˜ 1/100을 λœ»ν•œλ‹€.
    • 화면을 가득 μ±„μš°λ©° λ”± λ–¨μ–΄μ§€κ²Œ 슀크둀 λ˜λŠ” μ‚¬μ΄νŠΈμ—μ„œ μ‚¬μš©λœλ‹€. 이런 μ›Ή νŽ˜μ΄μ§€μ—μ„œ μ‚¬μš©ν•˜λŠ” 방법이 100vw, 100vhλ₯Ό μ‚¬μš©ν•΄ κ΅¬ν˜„ν•œ 것이닀.



πŸ’¬ λ°•μŠ€ λͺ¨λΈμ΄λž€?

  • λͺ¨λ“  μ½˜ν…μΈ μ—λŠ” κ³ μœ ν•œ μ˜μ—­μ΄ μžˆλ‹€.
  • 각자의 μ˜μ—­μ„ 가지며 일반적으둜 ν•˜λ‚˜μ˜ μ½˜ν…μΈ λ‘œ λ¬Άμ΄λŠ” μš”μ†Œλ“€μ΄ ν•˜λ‚˜μ˜ λ°•μŠ€κ°€ λœλ‹€.
  • λ°•μŠ€λŠ” 항상 μ§μ‚¬κ°ν˜•μ΄κ³ , λ„ˆλΉ„(width)와 높이(height)λ₯Ό 가진닀.

예제

<!-- html 예제 -->
<h1>Basic document flow</h1>
<p>I am a basic block level element. My adjacent block level elements sit on new lines below me.</p>
<p>By default we span 100% of the width of our parent element, and we are as tall as our child content. Our total width and height is our content + padding + border width/height.</p>
<p>We are separated by our margins. Because of margin collapsing, we are separated by the width of one of our margins, not both.</p>
<p>inline elements <span>like this one</span> and <span>this one</span> sit on the same line as one another, and adjacent text nodes, if there is space on the same line. Overflowing inline elements will <span>wrap onto a new line if possible (like this one containing text)</span>, or just go on to a new line if not</p>
<!-- css 예제 -->
h1 {
  background: gray;
  width: 60%;
}

p {
  background: rgba(255,84,104,0.3);
  width: 80%;
  height: 200px;
}

span {
  background: yellow;
  width: 100px;
  height: 100px;
}

block, inline-block, inline의 νŠΉμ§•

  • block
    • μ€„λ°”κΏˆμ΄ 일어남
    • 기본적으둜 κ°–λŠ” λ„ˆλΉ„(width) 100%
    • width, height μ‚¬μš© κ°€λŠ₯
  • inline-block
    • μ€„λ°”κΏˆμ΄ μΌμ–΄λ‚˜μ§€ μ•ŠμŒ
    • 기본적으둜 κ°–λŠ” λ„ˆλΉ„(width) κΈ€μžκ°€ μ°¨μ§€ν•˜λŠ” 만큼
    • width, height μ‚¬μš© κ°€λŠ₯
  • inline
    - μ€„λ°”κΏˆμ΄ μΌμ–΄λ‚˜μ§€ μ•ŠμŒ
    - 기본적으둜 κ°–λŠ” λ„ˆλΉ„(width) κΈ€μžκ°€ μ°¨μ§€ν•˜λŠ” 만큼
    - width, height μ‚¬μš© λΆˆκ°€λŠ₯

λ°•μŠ€λ₯Ό κ΅¬μ„±ν•˜λŠ” μš”μ†Œ

border (ν…Œλ‘λ¦¬)
각 μ˜μ—­μ΄ μ°¨μ§€ν•˜λŠ” 크기λ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•΄, λ ˆμ΄μ•„μ›ƒμ„ λ§Œλ“€λ©΄μ„œ κ·Έ 크기λ₯Ό μ‹œκ°μ μœΌλ‘œ 확인할 수 μžˆλ„λ‘ λ§Œλ“ λ‹€.

p {
  border: 1px solid red;
}

margin (λ°”κΉ₯ μ—¬λ°±)
각각의 값은 top, right, bottom, left둜 μ‹œκ³„λ°©ν–₯이닀.

p {
  margin: 10px 20px 30px 40px;
}

값을 두 개만 λ„£μœΌλ©΄ topκ³Ό bottom이 10px, left 및 rightκ°€ 20px이닀.

p {
  margin: 10px 20px;
}

값을 ν•˜λ‚˜λ§Œ λ„£μœΌλ©΄ λͺ¨λ“  λ°©ν–₯의 λ°”κΉ₯ 여백에 μ μš©λœλ‹€.

p {
  margin: 10px;
}

λ‹€μŒκ³Ό 같이 λ°©ν–₯을 νŠΉμ •ν•œ 속성도 μ‘΄μž¬ν•œλ‹€.

p {
  margin-top: 10px;
  margin-right: 20px;
  margin-bottom: 30px;
  margin-left: 40px;
}
  • μœ„μ™€ 같은 κ·œμΉ™μ€ padding에도 λ™μΌν•˜κ²Œ μ μš©λœλ‹€.

content-box와 border-box
μ—¬λ°±κ³Ό ν…Œλ‘λ¦¬λ₯Ό ν¬ν•¨ν•˜λŠ” λ°•μŠ€ 크기 계산법인 border-boxλ₯Ό ꢌμž₯ν•œλ‹€.

μ•„λž˜ 그림은 * {}에 기본적으둜 λ“€μ–΄κ°€λŠ” 것이닀.
μ΄ˆκΈ°ν™”λ₯Ό ν•˜κ³  μ‹œμž‘ν•˜λŠ” 것이 μ’‹λ‹€.



πŸ’¬ CSS selectorλž€?

CSS 속성을 μ μš©ν•  λŒ€μƒμ„ μ„ νƒν•˜λŠ” 방법을 CSS selector라고 ν•œλ‹€.

μžμ‹ / 후손 / ν˜•μ œ μ…€λ ‰ν„°

πŸ’‘ μžμ‹ μ…€λ ‰ν„°

  • μžμ‹ μ…€λ ‰ν„°λŠ” 첫 번째둜 μž…λ ₯ν•œ μš”μ†Œμ˜ λ°”λ‘œ μ•„λž˜ μžμ‹μΈ μš”μ†Œλ₯Ό μ„ νƒν•œλ‹€. 예제의 경우 <header> μš”μ†Œ λ°”λ‘œ μ•„λž˜μ— μžˆλŠ” 두 개의 <p> μš”μ†ŒλŠ” μ„ νƒλ˜μ§€λ§Œ, <span> μš”μ†Œμ˜ μžμ‹μΈ <p> μš”μ†ŒλŠ” μ„ νƒλ˜μ§€ μ•ŠλŠ”λ‹€.

예제

header > p { }
<header>
	<p> <!-- 선택 -->
		<span>
			<p></p>
		</span>
	</p>
	<p> <!-- 선택 -->
		<span>
			<p></p>
		</span>
	</p>
</header>

πŸ’‘ 후손 μ…€λ ‰ν„°

  • 후손 μ…€λ ‰ν„°λŠ” 첫 번째둜 μž…λ ₯ν•œ μš”μ†Œμ˜ 후손을 μ„ νƒν•œλ‹€. 예제의 경우 <header> μš”μ†Œμ˜ μžμ‹μΈ <p> μš”μ†Œλ₯Ό 뿐 μ•„λ‹ˆλΌ, <header> μš”μ†Œμ˜ μžμ‹μ˜ μžμ‹μΈ μžˆλŠ” <p> μš”μ†ŒκΉŒμ§€ λͺ¨λ‘ μ„ νƒλœλ‹€.

예제

header p { }
<header>
	<p> <!-- 선택 -->
		<span>
			<p> <!-- !!선택!! -->
            </p> 
		</span>
	</p>
	<p> <!-- 선택 -->
		<span>
			<p> <!-- !!선택!! -->
            </p>
		</span>
	</p>
</header>

πŸ’‘ ν˜•μ œ μ…€λ ‰ν„°

  • ν˜•μ œ μ…€λ ‰ν„°λŠ” 같은 λΆ€λͺ¨ μš”μ†Œλ₯Ό κ³΅μœ ν•˜λ©΄μ„œ, 첫 번째 μž…λ ₯ν•œ μš”μ†Œ 뒀에 μ˜€λŠ” 두 번째 μž…λ ₯ν•œ μš”μ†Œλ₯Ό λͺ¨λ‘ μ„ νƒν•œλ‹€. 예제의 경우 <section> μš”μ†Œ 뒀에 μžˆλŠ” μ„Έ 개의 <p> μš”μ†Œλ₯Ό λͺ¨λ‘ μ„ νƒν•©λ‹ˆλ‹€.

예제

section ~ p { }
<header>
	<section></section>
	<p></p> <!-- 선택 -->
	<p></p> <!-- 선택 -->
	<p></p> <!-- 선택 -->
</header>

πŸ’‘ 인접 ν˜•μ œ μ…€λ ‰ν„°

  • 인접 ν˜•μ œ μ…€λ ‰ν„°λŠ” 같은 λΆ€λͺ¨ μš”μ†Œλ₯Ό κ³΅μœ ν•˜λ©΄μ„œ, 첫 번째 μž…λ ₯ν•œ μš”μ†Œ λ°”λ‘œ 뒀에 μ˜€λŠ” 두 번째 μž…λ ₯ν•œ μš”μ†Œλ₯Ό μ„ νƒν•œλ‹€. μ˜ˆμ‹œμ˜ 경우 <section> μš”μ†Œ 뒀에 μžˆλŠ” μ„Έ 개의 <p> μš”μ†Œ 쀑 첫 번째 <p> μš”μ†Œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

예제

section + p { }
<header>
	<section></section>
	<p></p> <!-- 선택 -->
	<p></p>
	<p></p>
</header>

CSS selector
CSS selectorλ₯Ό κ²Œμž„μœΌλ‘œ 배울 수 μžˆλŠ” μ‚¬μ΄νŠΈ
https://flukeout.github.io/


πŸ‘€ λŒμ•„λ³΄κΈ°

ν™•μ‹€νžˆ μ…€λ ‰ν„°λŠ” 많이 보고, 써보고, λ°°μ›Œμ•Ό ν•  것 κ°™λ‹€.
ν€΄μ¦ˆλ₯Ό ν’€λ©° μ–΄λŠ 정도 ꡬ별을 ν•  수 μžˆμ§€λ§Œ CSS λ””λ„ˆ κ²Œμž„μ„ μ§„ν–‰ν•˜κΈ°μ—” 아직 λΆ€μ‘±ν•œ 점이 λ§Žλ‹€.
심화 과정듀을 μ–΄λ €μ›Œν•˜λŠ” λ“― 싢은데... 쑰금 더 μ§‘μ€‘ν•΄μ„œ μ΄ν•΄ν•˜λ„λ‘ ν•˜μž.

profile
λ¬΄μ‚¬μ™€μš”... μ—΄κ³΅ν–μš”...

0개의 λŒ“κΈ€