[๐ŸŽจCSS] Flex, Grid, Display

์‚ฌ์š”ยท2024๋…„ 9์›” 2์ผ
0

โ˜๏ธ kakao x goorm DEEP DIVE

๋ชฉ๋ก ๋ณด๊ธฐ
1/3
post-thumbnail

Flexbox

์š”์†Œ๋ฅผ ํšจ์œจ์ ์ด๊ณ  ๋™์ ์œผ๋กœ ๋ฐฐ์—ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ ˆ์ด์•„์›ƒ ๋ชจ๋ธ
๋ ˆ์ด์•„์›ƒ์€ 1์ฐจ์›์ด๋ฉฐ ๊ณต๊ฐ„์ด ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์‚ฐ๋œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์š”์†Œ๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ ˆ์ด์•„์›ƒ์€ ์š”์†Œ๋ฅผ ๋ฐ˜์‘ํ˜•์œผ๋กœ ๋งŒ๋“ ๋‹ค.
=> ์š”์†Œ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์žฅ์น˜์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์š”์†Œ์˜ ๋™์ž‘์ด ๋ณ€๊ฒฝ๋œ๋‹ค.
์š”์†Œ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์ ์ ˆํ•œ ์œ„์น˜์™€ ๋Œ€์นญ์„ ์ œ๊ณตํ•œ๋‹ค.

๊ธฐ์กด ๋ ˆ์ด์•„์›ƒ ์†์„ฑ๋“ค

  1. Block
    ์š”์†Œ๋ฅผ ๋ธ”๋ก ๋ ˆ๋ฒจ๋กœ ํ‘œ์‹œ. ์ค„๋ฐ”๊ฟˆ์ด ์ผ์–ด๋‚˜๊ณ , ๋„ˆ๋น„๊ฐ€ ๋ถ€๋ชจ ์š”์†Œ์— ๋งž์ถฐ ํ™•์žฅ

  2. Inline
    : ์ค„๋ฐ”๊ฟˆ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์œผ๋ฉฐ, ๋‚ด์šฉ๋งŒํผ๋งŒ ๋„ˆ๋น„๋ฅผ ์ฐจ์ง€
    ํ…์ŠคํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ๋ ˆ์ด์•„์›ƒ, ์ฃผ๋ณ€ ํ…์ŠคํŠธ์™€ ๋‚˜๋ž€ํžˆ ๊ฐ™์€ ์ค„์— ๋ฐฐ์น˜

ex) <span>, <a>, <strong>

  1. Table
    : 2์ฐจ์› ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ํ…Œ์ด๋ธ”

  2. Positioned
    : ์š”์†Œ์˜ ํŠน์ • ์œ„์น˜ ์ง€์ •

Flex Components

Flex Container

  • Flexbox ๋ ˆ์ด์•„์›ƒ์„ ์ •์˜ํ•˜๋Š” ๋ถ€๋ชจ ์š”์†Œ
  • display: flex; ๋˜๋Š” display: inline-flex;๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Flex Container๋ฅผ ์„ค์ •
  • Flex Container๋Š” ์ž์‹ ์š”์†Œ๋“ค์„ ์ž๋™์œผ๋กœ Flex Items๋กœ ๋งŒ๋“ฆ

Flex Items

  • Flex Container ์•ˆ์— ๋ฐฐ์น˜๋œ ์ž์‹ ์š”์†Œ๋“ค
  • Flexbox ๋ ˆ์ด์•„์›ƒ์˜ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฐฐ์น˜๋˜๊ณ  ํฌ๊ธฐ๊ฐ€ ์กฐ์ •

๋‘๊ฐœ์˜ ์ถ•

์ด ์ถ•๋“ค์€ Flex Container ๋‚ด๋ถ€์—์„œ Flex Items๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜๋˜๊ณ  ์ •๋ ฌ๋˜๋Š”์ง€๋ฅผ ๊ฒฐ์ •

์ฃผ์ถ•(Main Axis)
Flex Container์—์„œ Flex Items๊ฐ€ ๋ฐฐ์น˜๋˜๋Š” ์ฃผ๋œ ์ถ•

๊ต์ฐจ์ถ•(Cross Axis)
Main Axis์— ์ˆ˜์ง์ธ ์ถ•

Flexbox ์ปจํ…Œ์ด๋„ˆ ์†์„ฑ๋“ค

Flex-direction

Flex-wrap

๊ธฐ๋ณธ์ ์ธ Flex ๋Š” ์•„์ดํ…œ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ์•„์ดํ…œ์˜ ํฌ๊ธฐ๊ฐ€ ์ค„์–ด๋“ค๋ฉด์„œ ์–ด๋–ป๊ฒŒ๋“  ๋‹จ์ผํ•œ ์ค„์— ํฌํ•จ์‹œํ‚ค๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ flex-wrap: wrap ์„ค์ •์„ ์ฃผ๋ฉด ์ค„๋ฐ”๊ฟˆ์ด ์ผ์–ด๋‚œ๋‹ค.

  • nowrap(๊ธฐ๋ณธ๊ฐ’) : ๋ชจ๋“  ํ”Œ๋ ‰์Šค ํ•ญ๋ชฉ์ด ํ•œ ์ค„์— ํ‘œ์‹œ
  • wrap : ์—ฌ๋Ÿฌ์ค„๋กœ ์ค„๋ฐ”๊ฟˆ
  • wrap-reverse : ์•„๋ž˜์—์„œ ์œ„๋กœ ์—ฌ๋Ÿฌ์ค„๋กœ ์ค„๋ฐ”๊ฟˆ

Flex-flow

flex-flow : <flex-direction> <flex-wrap>

.container {
flex-flow : column wrap;
}

justify-content

Main Axis๋ฅผ ๋”ฐ๋ผ Flex Items๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ํ• ์ง€๋ฅผ ๊ฒฐ์ •

  • flex-start: Flex Items๊ฐ€ ์ฃผ ์ถ•์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋ฐฐ์น˜
  • flex-end: Flex Items๊ฐ€ ์ฃผ ์ถ•์˜ ๋ ๋ถ€๋ถ„์— ๋ฐฐ์น˜
  • center: Flex Items๊ฐ€ ์ฃผ ์ถ•์˜ ์ค‘์•™์— ๋ฐฐ์น˜
  • space-between: Flex Items ์‚ฌ์ด์— ๋™์ผํ•œ ๊ฐ„๊ฒฉ์„ ๋ฐฐ์น˜ํ•˜๋ฉฐ, ์ฒซ ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ ์•„์ดํ…œ์€ ๋์— ๋ฐฐ์น˜
  • space-evenly: Flex Items ์ฃผ์œ„์— ๋™์ผํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฐฐ์น˜
  • space-around : ๊ฐ€์žฅ์ž๋ฆฌ์—๋Š” 1๋‹จ์œ„์˜ ๊ณต๊ฐ„์ด ์žˆ๊ณ , Item ์‚ฌ์ด์—๋Š” 2๋‹จ์œ„ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๋„๋ก ๋ฐฐ์น˜

๐Ÿ“Œ space-evenly ์™€ space-around ์˜ ์ฐจ์ด

align-items

Cross Axis๋ฅผ ๋”ฐ๋ผ Flex Items๊ฐ€ ์–ด๋–ป๊ฒŒ ์ •๋ ฌ๋ ์ง€๋ฅผ ๊ฒฐ์ •

  • flex-start: Flex Items๊ฐ€ ๊ต์ฐจ ์ถ•์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋ฐฐ์น˜
  • flex-end: Flex Items๊ฐ€ ๊ต์ฐจ ์ถ•์˜ ๋ ๋ถ€๋ถ„์— ๋ฐฐ์น˜
  • center: Flex Items๊ฐ€ ๊ต์ฐจ ์ถ•์˜ ์ค‘์•™์— ๋ฐฐ์น˜
  • baseline: Flex Items์˜ ํ…์ŠคํŠธ ๊ธฐ์ค€์„ ์ด ๋งž์ถฐ์ง€๋„๋ก ์ •๋ ฌ
  • stretch: Flex Items๊ฐ€ ๊ต์ฐจ ์ถ•์„ ๋”ฐ๋ผ ๋Š˜์–ด๋‚˜๋„๋ก ์„ค์ •(๊ธฐ๋ณธ๊ฐ’)

align-content

๊ต์ฐจ์ถ• ๊ธฐ์ค€ ์ค„๊ณผ ์ค„ ์‚ฌ์ด์˜ ์ •๋ ฌ์„ ์„ค์ • , ํ–‰๋“ค ๊ฐ„์˜ ๊ณต๊ฐ„์„ ์กฐ์ ˆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
โ—๏ธflex-wrap : wrap ์ธ ์ƒํƒœ์—์„œ ๋‘ ์ค„ ์ด์ƒ์ธ ์ƒํƒœ์—์„œ๋งŒ ์ ์šฉ

  • flex-start: ๋ชจ๋“  ํ–‰์ด ๊ต์ฐจ ์ถ•์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋ฐ€์ฐฉ
  • flex-end: ๋ชจ๋“  ํ–‰์ด ๊ต์ฐจ ์ถ•์˜ ๋ ๋ถ€๋ถ„์— ๋ฐ€์ฐฉ
  • center: ๋ชจ๋“  ํ–‰์ด ๊ต์ฐจ ์ถ•์˜ ์ค‘์•™์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.
  • space-between: ์ฒซ ๋ฒˆ์งธ ํ–‰์€ ๊ต์ฐจ ์ถ•์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—, ๋งˆ์ง€๋ง‰ ํ–‰์€ ๋ ๋ถ€๋ถ„์— ๋ฐฐ์น˜๋˜๊ณ , ๋‚˜๋จธ์ง€ ํ–‰๋“ค์€ ์‚ฌ์ด์— ๊ท ์ผํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฐฐ์น˜
  • space-around: ๊ฐ€์žฅ์ž๋ฆฌ์—๋Š” 1๋‹จ์œ„์˜ ๊ณต๊ฐ„์ด ์žˆ๊ณ , Item ์‚ฌ์ด์—๋Š” 2๋‹จ์œ„ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๋„๋ก ๋ฐฐ์น˜
  • space-evenly: ๋ชจ๋“  ํ–‰์ด ๋™์ผํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ํ–‰ ์‚ฌ์ด์™€ ์–‘ ๋ ๊ฐ„์˜ ๊ฐ„๊ฒฉ์ด ๋™์ผ
  • stretch: ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ, ํ–‰๋“ค์ด ๊ต์ฐจ ์ถ•์„ ๊ฐ€๋“ ์ฑ„์šฐ๋„๋ก ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.

align-self

๊ฐœ๋ณ„ ํ”Œ๋ ‰์Šค ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ๊ธฐ๋ณธ ์ •๋ ฌ(align-items๋กœ ์ง€์ •๋œ ์ •๋ ฌ) ์žฌ์ •์˜

โ—๏ธalign-content ์†์„ฑ์€ ์ง€์›Œ์ค˜์•ผ ์ œ๋Œ€๋กœ ์ ์šฉ


=> align-self ๋ฅผ ํ†ตํ•ด ์ž์‹ ์•„์ดํ…œ๋“ค์„ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ •๋ ฌํ•œ ์ƒํƒœ

order

ํ”Œ๋ ‰์Šค ์ปจํ…Œ์ด๋„ˆ์— ๋‚˜ํƒ€๋‚˜๋Š” ์ˆœ์„œ ์ œ์–ด
๊ธฐ๋ณธ ๊ฐ’์€ 0์ด๋ฉฐ, ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ๊ฒƒ๋ถ€ํ„ฐ ๋จผ์ € ๋ฐฐ์น˜

flex-grow, flex-shrink

์œ ์—ฐํ•œ ๋ ˆ์ด์•„์›ƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์†์„ฑ

  • ํ™”๋ฉด์ด ๋Š˜์–ด๋‚˜๊ฑฐ๋‚˜ ์ค„์–ด๋“ฆ์— ๋”ฐ๋ผ ํ”Œ๋ ‰์Šค ๋ฐ•์Šค ์•„์ดํ…œ์˜ ๊ธฐ๋ณธ ๋„ˆ๋น„๋ฅผ ์ž๋™์œผ๋กœ ๋Š˜์–ด๋‚˜๊ฑฐ๋‚˜(flex-grow) ์ค„์–ด๋“ค๋„๋ก(flex-shrink)ํ•ด์„œ ํ–‰ ์•ˆ์— ์ ์ ˆํ•œ ๋„ˆ๋น„๋กœ ๋ฐฐ์น˜๋˜๋„๋ก ๋งž์ถ”๋Š” ๊ธฐ๋Šฅ
  • ๋น„์œจ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์œ„ ์—†๋Š” ๊ฐ’์„ ํ—ˆ์šฉ
  • ์Œ์ˆ˜๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ
  • Item์ด ์ฐจ์ง€ํ•ด์•ผํ•˜๋Š” ํ”Œ๋ ‰์Šค ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์˜ ์–‘์„ ๋‚˜ํƒ€๋ƒ„
  • flex-grow์˜ ๊ธฐ๋ณธ ๊ฐ’์€ 0

โ“ ๋งŒ์•ฝ flex-grow, flex-shrink ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด

๋ทฐํฌํŠธ ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚˜๋“ , ์ค„์–ด๋“ค๋˜ ๊ด€๊ณ„ ์—†์ด ์ผ์ •ํ•œ ํฌ๊ธฐ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

flex-grow

Flex Container ๋‚ด์— ์—ฌ์œ  ๊ณต๊ฐ„์ด ์žˆ์„ ๋•Œ,
flex-grow ๊ฐ’์— ๋”ฐ๋ผ Flex Items๊ฐ€ ์ด ๊ณต๊ฐ„์„ ๋น„์œจ์— ๋”ฐ๋ผ ๋ถ„๋ฐฐ

๐Ÿ“Œ ๊ณ„์‚ฐ ๋ฐฉ๋ฒ•

๐Ÿ“Œ Tip ์‚ฌ์ดํŠธ ๋ ˆ์ด์•„์›ƒ์—์„œ ํ‘ธํ„ฐ ํ•˜๋‹จ์— ๋ฐฐ์น˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.

flex-shrink

Flex Container์˜ ํฌ๊ธฐ๊ฐ€ ์ค„์–ด๋“ค์–ด Flex Items๊ฐ€ ๋งž์ง€ ์•Š์„ ๋•Œ,
flex-shrink ๊ฐ’์— ๋”ฐ๋ผ Flex Items๊ฐ€ ์ค„์–ด๋“œ๋Š” ์ •๋„๋ฅผ ์กฐ์ ˆ

  • ์ฃผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ๋ฒ—์–ด๋‚œ ์•„์ดํ…œ ๋„ˆ๋น„๋ฅผ ๋ถ„๋ฐฐํ•ด์„œ ์ค„์ด๋Š”๋ฐ ์‚ฌ์šฉ
  • ๊ธฐ๋ณธ ๊ฐ’์€ 1 (๊ณต๊ฐ„์ด ๋ถ€์กฑํ•  ๋•Œ ๋ชจ๋“  Item์ด ๊ฐ™์€ ๋น„์œจ๋กœ ์ค„์–ด๋“ฆ)

flex-shrink : 0 ์ผ๋•Œ

flex-shrink : 1 ์ผ๋•Œ

โ“flex-shrink๋ฅผ ํ†ตํ•ด ์ค„์–ด๋“  ํ™”๋ฉดํฌ๊ธฐ๋ฅผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‚˜๋ˆ„์–ด๊ฐ€์ง€๋Š”๋ฐ, ์ค„์–ด๋“œ๋Š” ๋ถ€๋ถ„์˜ ๋น„์œจ ๊ฐ’์ด ์‹ค์ œ ์ปดํฌ๋„ŒํŠธ ํฌ๊ธฐ๋ณด๋‹ค ํฌ๋‹ค๋ฉด?

๊ทธ ์•ˆ์— Text๊ฐ™์€ ํŠน๋ณ„ํ•œ ๋‚ด์šฉ๋ฌผ์ด ์—†๋‹ค๋ฉด ์™„์ „ํžˆ ์‚ฌ๋ผ์ ธ๋ฒ„๋ฆฐ๋‹ค ๐Ÿ˜‚๐Ÿ˜…

โ“grow ๋‚˜ shrink๋ฅผ ์ผ์Œ์—๋„ ํ™”๋ฉด์„ ์ค„์˜€๋Š”๋ฐ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง€์ง€ ์•Š์•„์š”

๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ๊ฐ€ width:500px ์ฒ˜๋Ÿผ ์ •์ ์ด๋ผ๋ฉด flex-shrink๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„
๋ทฐํฌํŠธํฌ๊ธฐ์— ๋”ฐ๋ผ ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ ํฌ๊ธฐ์˜ ๋ณ€๋™์ด ์—†์œผ๋ฏ€๋กœ Flex Item์€ ์ค„์–ด๋“ค์ง€ ์•Š๋Š”๋‹ค.
width:100% ๊ฐ™์ด ๋ถ€๋ชจ์ปจํ…Œ์ด๋„ˆ์— ๋ฐ˜์‘ํ˜• ๋‹จ์œ„๋ฅผ ์จ์•ผ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค.

โ“shrink ๊ฐ€ ์ ์šฉ ๋˜์—ˆ๋Š”๋ฐ ์‚์ ธ๋‚˜์˜ค๋Š” ์ด์œ ๋Š”?
font-size ์ž์ฒด๋ฅผ ์ค„์ผ ์ˆ˜ ์—†์–ด์„œ

๐Ÿ”Ž ๋ถ„์„

Q. flex-shrink๊ฐ€ 0์ธ Flex Item ์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด, ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. (x)
A. 0์ธ Item์ด ์žˆ๋”๋ผ๋„, 0์ด ์•„๋‹Œ Item์ด ์žˆ์œผ๋ฉด ๋น„์œจ๋กœ ๋‚˜๋ˆ„์–ด๊ฐ€์ง€๋ฏ€๋กœ ์‚์ ธ๋‚˜์˜ค์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.
Q. 0์ด ์•„๋‹Œ flex-shrink๊ฐ€ ์ ์šฉ๋œ Flex Item ์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด, ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. (o)
A. ์ถ•์†Œ๋œ ๊ตฌ์—ญ์„ flex-shrink๊ฐ€ ์ ์šฉ๋œ Flex Item์ด ๋น„์œจ๋กœ ๋‚˜๋ˆ„์–ด๊ฐ€์ง€๋ฏ€๋กœ ์‚์ ธ๋‚˜์˜ฌ ์ˆ˜ ์—†๋‹ค.

flex-basis

Flex Item์˜ ๊ธฐ๋ณธ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ์†์„ฑ

  • ๊ธฐ๋ณธ ๊ฐ’์€ auto : ์ฝ˜ํ…์ธ  ํฌ๊ธฐ์— ๋”ฐ๋ผ์„œ ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ฒฐ์ •
  • ์ฃผ ์ถ•(Main Axis)์„ ๋”ฐ๋ผ Flex Item์ด ์ฐจ์ง€ํ•˜๋Š” ์ดˆ๊ธฐ ํฌ๊ธฐ๋ฅผ ์ •์˜.
  • flex-direction์ด row ์ผ ๋•Œ์—๋Š” width ๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , column ์ผ๋•Œ์—๋Š” height ๋ฅผ ์ปจํŠธ๋กค
  • width ๋˜๋Š” height ์†์„ฑ๋ณด๋‹ค ์šฐ์„ ์ ์œผ๋กœ ์ ์šฉ
  • Flex Items๊ฐ€ ๊ณต๊ฐ„์„ ๋‚˜๋ˆ„๊ธฐ ์ „์— ์‹œ์ž‘ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

flex

flex-grow flex-shrink flex-basis ์˜ ์ถ•์•ฝ

1) ๊ฐ’์ด ํ•˜๋‚˜์ผ ๋•Œ

  • ๋‹จ์œ„๊ฐ€ ์—†์œผ๋ฉด flex-grow
  • ๋‹จ์œ„๊ฐ€ ์žˆ์œผ๋ฉด flex-basis

2) ๊ฐ’์ด ๋‘๊ฐœ์ผ ๋•Œ

  • ์ฒซ๋ฒˆ์งธ ๊ฐ’์€ flex-grow๋กœ ๋‹จ์œ„๊ฐ€ ์—†์–ด์•ผ ํ•จ
  • ๋‘๋ฒˆ์งธ ๊ฐ’์€ ๋‹จ์œ„๊ฐ€ ์—†์œผ๋ฉด flex-shrink, ์žˆ์œผ๋ฉด flex-basis

3) ๊ฐ’์ด ์„ธ๊ฐœ์ผ ๋•Œ

  • ์ฒซ๋ฒˆ์งธ ๊ฐ’์€ flex-grow : ๋‹จ์œ„ x
  • ๋‘๋ฒˆ์งธ ๊ฐ’์€ flex-shrink : ๋‹จ์œ„ x
  • ์„ธ๋ฒˆ์งธ ๊ฐ’์€ flex-basis : ๋‹จ์œ„ o

=> ๋‹จ์œ„๊ฐ€ ์žˆ์œผ๋ฉด ๋ฌด์กฐ๊ฑด flex-basis ์ด๋‹ค!

display : table

  • HTML ์š”์†Œ๋ฅผ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜์—ฌ ํ…Œ์ด๋ธ” ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค ๋•Œ ์œ ์šฉ
  • ์ด ์†์„ฑ์€ display: table, display: table-row, display: table-cell ๋“ฑ์˜ ์กฐํ•ฉ์œผ๋กœ ์‚ฌ์šฉ
 .table {
        display: table;
        width: 100%;
        border-collapse: collapse;
      }
      .row {
        display: table-row;
      }
      .cell {
        display: table-cell;
        border: 1px solid black;
        padding: 10px;
      }
 <div class="table">
      <div class="row">
        <div class="cell">Header 1</div>
        <div class="cell">Header 2</div>
        <div class="cell">Header 3</div>
      </div>
      <div class="row">
        <div class="cell">Row 1, Cell 1</div>
        <div class="cell">Row 1, Cell 2</div>
        <div class="cell">Row 1, Cell 3</div>
      </div>
      <div class="row">
        <div class="cell">Row 2, Cell 1</div>
        <div class="cell">Row 2, Cell 2</div>
        <div class="cell">Row 2, Cell 3</div>
      </div>
    </div>

๐Ÿ“Œ ์‹ค์Šต ์˜ˆ์ œ

  • ์š”์†Œ+์š”์†Œ ์„ ํƒ์ž๋Š” ํŠน์ • ์š”์†Œ ๋ฐ”๋กœ ๋’ค์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
  • .box+.box ์„ ํƒ์ž๋Š” ์˜ค๋ฅธ์ชฝ ๋ฐ•์Šค ๊ธฐ์ค€ border-left ๊ฐ€ ๋จน๋Š”๋‹ค.

position CSS

์š”์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ์œ„์น˜์‹œํ‚ฌ์ง€ ์ •์˜ํ•˜๋ฉฐ, ์•„๋ž˜์˜ 5๊ฐ€์ง€ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค.

absolute ์™€ relative

  • absolute๋ฅผ ๊ฐ€์ง„ ์š”์†Œ๋Š” ์ฃผ๋กœ relative๋ฅผ ๊ฐ€์ง„ ์š”์†Œ ์•ˆ์— ์‚ฌ์šฉ
  • relative ๋‚ด๋ถ€์— absolute ๊ฐ€ ์žˆ์œผ๋ฉด ์ ˆ๋Œ€ ์ขŒํ‘œ ๊ณ„์‚ฐ ์‹œ, relative ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ธฐ์ค€ ์ ์œผ๋กœ ์žก๋Š”๋‹ค.

sticky

์š”์†Œ๊ฐ€ ์Šคํฌ๋กค ์œ„์น˜์— ๋”ฐ๋ผ ๊ณ ์ •๋˜๋„๋ก ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ

  • ์š”์†Œ๊ฐ€ ํŠน์ • ์Šคํฌ๋กค ์œ„์น˜์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ๋ฅด๋Š” ๋ ˆ์ด์•„์›ƒ์—์„œ ์›€์ง(static)์ด๋‹ค๊ฐ€,์ฃผ์–ด์ง„ offset ์œ„์น˜๊ฐ€ ๋ทฐํฌํŠธ์—์„œ ๋งŒ๋‚˜๋ฉด ์ œ์ž๋ฆฌ์— ๊ณ ์ •(fixed)
  • ์Šคํฌ๋กค ์œ„์น˜์— ๋”ฐ๋ผ static ์š”์†Œ์™€ fixed ์š”์†Œ ์‚ฌ์ด๋ฅผ ์ „ํ™˜

๐Ÿ“Œ ํ™œ์šฉ

ํ—ค๋”๊ฐ€ ํŽ˜์ด์ง€ ์ƒ๋‹จ์— ๊ณ ์ •๋˜์–ด ์Šคํฌ๋กคํ•  ๋•Œ ๋”ฐ๋ผ์˜ค๋Š” ๊ฒƒ์— ์œ ์šฉ

๋ทฐํฌํŠธ

ํ˜„์žฌ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๊ณ  ์žˆ๋Š” ๋‹ค๊ฐํ˜•(๋ณดํ†ต ์ง์‚ฌ๊ฐํ˜•)์˜ ์˜์—ญ
์›น ํŽ˜์ด์ง€๋ฅผ ์‹ค์ œ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ™”๋ฉด์˜ ๋ถ€๋ถ„

  • ๋ธŒ๋ผ์šฐ์ € ๋ทฐํฌํŠธ: ์›น ํŽ˜์ด์ง€๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด๋ฉด, ํŽ˜์ด์ง€์˜ ์ฝ˜ํ…์ธ ๋Š” ์ด ๋ทฐํฌํŠธ ๋‚ด์— ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.

  • ๋””๋ฐ”์ด์Šค ๋ทฐํฌํŠธ: ์‹ค์ œ ๋””๋ฐ”์ด์Šค์˜ ํ™”๋ฉด ์˜์—ญ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ชจ๋ฐ”์ผ ๋””๋ฐ”์ด์Šค์—์„œ๋Š” ํ™”๋ฉด์˜ ๋ฌผ๋ฆฌ์  ํฌ๊ธฐ์™€ ํ•ด์ƒ๋„๊ฐ€ ๋ทฐํฌํŠธ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฌธ์„œ ๋ทฐํฌํŠธ: CSS์˜ viewport ๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ํŽ˜์ด์ง€์˜ ์ „์ฒด ์ฝ˜ํ…์ธ ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” ๊ฐ€์ƒ์˜ ์˜์—ญ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” CSS์˜ vw, vh, vmin, vmax ๋‹จ์œ„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ทฐํฌํŠธ ๊ด€๋ จ CSS ์†์„ฑ๊ณผ ๋ฉ”ํƒ€ ํƒœ๊ทธ

1. meta viewport ํƒœ๊ทธ

HTML ๋ฌธ์„œ์˜ <head> ๋ถ€๋ถ„์— ์‚ฝ์ž…ํ•˜์—ฌ ๋ทฐํฌํŠธ์˜ ํฌ๊ธฐ์™€ ๋ฐฐ์œจ์„ ์„ค์ •
๋ชจ๋ฐ”์ผ ๋””๋ฐ”์ด์Šค์—์„œ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ

<meta name="viewport" content="width=device-width, initial-scale=1.0">
  • width=device-width: ๋ทฐํฌํŠธ์˜ ๋„ˆ๋น„๋ฅผ ๋””๋ฐ”์ด์Šค์˜ ํ™”๋ฉด ๋„ˆ๋น„์™€ ๊ฐ™๊ฒŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • initial-scale=1.0: ํŽ˜์ด์ง€์˜ ์ดˆ๊ธฐ ํ™•๋Œ€ ๋น„์œจ์„ 1๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ( ํ™”๋ฉด์— ๊ฝ‰์ฐจ๊ฒŒ )

CSS ๋ทฐํฌํŠธ ๋‹จ์œ„

  • vw (Viewport Width): ๋ทฐํฌํŠธ์˜ ๋„ˆ๋น„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ ๋‹จ์œ„, 1vw๋Š” ๋ทฐํฌํŠธ ๋„ˆ๋น„์˜ 1%
  • vh (Viewport Height): ๋ทฐํฌํŠธ์˜ ๋†’์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ ๋‹จ์œ„, 1vh๋Š” ๋ทฐํฌํŠธ ๋†’์ด์˜ 1%
  • vmin: ๋ทฐํฌํŠธ์˜ ๋„ˆ๋น„์™€ ๋†’์ด ์ค‘ ๋” ์ž‘์€ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ ๋‹จ์œ„
  • vmax: ๋ทฐํฌํŠธ์˜ ๋„ˆ๋น„์™€ ๋†’์ด ์ค‘ ๋” ํฐ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ ๋‹จ์œ„

โ“ vw ์™€ % ์˜ ์ฐจ์ด๋Š” โ“

%

  • ์ฐฝ์ด ์ค‘์‹ฌ์ด ์•„๋‹Œ ๋ถ€๋ชจ ์š”์†Œ์˜ ๊ธธ์ด์— ๋งž๊ฒŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ตœ์ƒ๋‹จ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ดœ์ฐฎ์ง€๋งŒ ๋ฐ‘์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ํŒŒ๊ณ  ๋“ค์–ด๊ฐˆ์ˆ˜๋ก ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์™€์˜ ๋น„์œจ๋กœ ํฌ๊ธฐ๊ฐ€ ๊ณ„์‚ฐ๋˜๋ฏ€๋กœ ์ƒ๋Œ€์ ์ธ ํฌ๊ธฐ ์ง€์ •์—๋Š” ์šฉ์ดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
    ์ ˆ๋Œ€์ ์œผ๋กœ ์›ํ•˜๋Š” ํฌ๊ธฐ๋กœ ๋งž์ถ”๊ธฐ์—๋Š” ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.
  • ์Šคํฌ๋กค๋ฐ”๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์€ ํฌ๊ธฐ ๊ธฐ์ค€
  • 100% ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์Šคํฌ๋กค๋ฐ”๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.

vw

  • vh์™€ vw๋Š” ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ํฌ๊ธฐ์— ๊ธฐ๋ฐ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํฌ๋กค๋ฐ”๋ฅผ ํฌํ•จํ•œ ํฌ๊ธฐ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐ

  • vw ๋‹จ์œ„๋Š” ์–ธ์ œ ์–ด๋””์„œ๋‚˜ ํ™”๋ฉด ์ฐฝ์ด๋ผ๋Š” ์ ˆ๋Œ€์ ์ธ ๊ธฐ์ค€์„ ํ†ตํ•ด ๋‹จ์œ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ™”๋ฉด์˜ ๋„ˆ๋น„๊ฐ€ ์ค„์–ด๋“ค๊ฑฐ๋‚˜ ๋Š˜์–ด๋‚  ๋•Œ, vw ๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•œ ์š”์†Œ์˜ ํฌ๊ธฐ๋Š” ๋ทฐํฌํŠธ ๋„ˆ๋น„์˜ ๋น„์œจ๋กœ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•œ๋‹ค.

  • 100vw ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํฌ๋กค๋ฐ”๊ฐ€ ์ƒ๊ธด๋‹ค. ์ฆ‰, vw ๋Š” ์Šคํฌ๋กค๋ฐ” ์˜์—ญ์„ ํฌํ•จํ•˜๋Š” ํฌ๊ธฐ์ด๋‹ค.

๊ฒฐ๋ก 

vh์™€ vw๋Š” ํ™”๋ฉด ํฌ๊ธฐ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•˜๋Š” ๋ฐ˜์‘ํ˜• ์›น ๋””์ž์ธ์— ์ ํ•ฉ. ๋ฐ˜๋ฉด, ํผ์„ผํŠธ๋Š” ๋ถ€๋ชจ ์š”์†Œ์— ์˜์กด์ ์ธ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. vw ์™€ % ๋ฅผ ํ˜ผ๋™ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์‹œ์— ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ค‘์— ํ™”๋ฉด ๋ณ€๊ฒฝ์‹œ UI๊ฐ€ ํ”๋“ค๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์œ ์˜ํ•˜์ž.

z-index

  • z-index ๊ฐ€ ๋†’์„์ˆ˜๋ก ์•ž์— ๋‚˜ํƒ€๋‚œ๋‹ค.
  • ๊ธฐ๋ณธ ๊ฐ’์€ 0
  • z-index๊ฐ€ ๋™์ผํ•˜๋ฉด ์ฝ”๋“œ์ƒ ์ˆœ์„œ์— ๋”ฐ๋ผ ์Œ“์ธ๋‹ค.
  • position: static ์€ ํ•ญ์ƒ ๋’ค์— ๋‚˜ํƒ€๋‚˜๊ณ  z-index์˜ ํšจ๊ณผ๊ฐ€ ์—†๋‹ค.
  • z-index๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ position:static ์ด๋ฉด ๋‚˜์ค‘์— ์ž‘์„ฑ๋œ ์š”์†Œ๊ฐ€ ์•ž์— ๋‚˜ํƒ€๋‚œ๋‹ค.
  • ๋ถ€๋ชจ์—๊ฒŒ z-index ๊ฐ’์„ ์ค„ ๊ฒฝ์šฐ ๋ถ€๋ชจ๋ผ๋ฆฌ ๋จผ์ € z-index ์ˆœ์œ„๋ฅผ ์ •ํ•œ ๋’ค ์ž์‹์ด ์ ์šฉ
    => ์ฆ‰, ์ž์‹์˜ z-index ๊ฐ’์ด ์•„๋ฌด๋ฆฌ ๋†’๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋ถ€๋ชจ์˜ ๊ฐ’์ด ๋‚ฎ์œผ๋ฉด ์œ„๋กœ ์˜ฌ๋ผ์˜ฌ ์ˆ˜ ์—†๋‹ค.
  • position ์†์„ฑ์„ ์ง€์ •ํ•ด์•ผ z-index ๊ฐ€ ์œ ํšจํ•˜๋‹ค.

๐Ÿ“Œ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์Œ“์ด๋Š” ๋‘๊ฐ€์ง€ ์ข…๋ฅ˜
z-index๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์˜ ์Œ“์ž„
๋“ฑ์žฅํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ

  1. Root ์—˜๋ฆฌ๋จผํŠธ์˜ ๋ฐฐ๊ฒฝ๊ณผ ํ…Œ๋‘๋ฆฌ
  2. ์ž์‹์€ ๋“ฑ์žฅํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ
  3. position ์ด ใ…ˆ
  4. z-index๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์Œ“์ž„

CSS ์ ์šฉ ์šฐ์„ ์ˆœ์œ„

profile
ํ•˜๋ฃจํ•˜๋ฃจ ๋‚˜์•„๊ฐ€๋Š” ์ƒˆ์‹น ๊ฐœ๋ฐœ์ž ๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€