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 ์„ ํƒ