๐งฉ 06. Flexbox: '1์ฐจ์ ๋ ์ด์์์ ๋ง๋ฒ์ฌ'
๐ ๊ฐ์
ํ๋ ์น ๋ ์ด์์์ ํ์ ๋๊ตฌ์ธ Flexbox์ ํต์ฌ ์๋ฆฌ์ ์ ๋ ฌ ๋ฐฉ์, ๊ทธ๋ฆฌ๊ณ flex-grow/shrink์ ์ ๋ฐํ ๊ณ์ฐ๋ฒ์ ์์ฒ ์ด์ ํจ๊ป ๋ฐฐ์๋ด ๋๋ค.
๐ ์ด ๋ฌธ์๋ฅผ ์ฝ๊ธฐ ์ ์
โฑ๏ธ ์์ ์ฝ๊ธฐ ์๊ฐ: 10๋ถ(์ ์ฒด) / ํต์ฌ ํํธ๋ง: 5๋ถ
๐บ๏ธ ์ด ๋ฌธ์์ ํ๋ฆ
[์ถ(Axis)์ ์ดํด] โ [์ ๋ ฌ(Alignment) ๋ง์คํฐ] โ [flex-basis/grow/shrink์ ์ํ]
๐ฏ ์ด ๋ฌธ์๋ฅผ ๋ค ์ฝ์ผ๋ฉด ํ ์ ์๋ ๊ฒ
- ์ฃผ์ถ(Main Axis)๊ณผ ๊ต์ฐจ์ถ(Cross Axis)์ ๊ฐ๋ ์ ์๋ฒฝํ ํ์ ํฉ๋๋ค.
- ์์๋ฅผ ๊ฐ๋ก/์ธ๋ก ์ค์์ ์ ๋ ฌํ๋ ๊ฐ์ฅ ์ฐ์ํ ๋ฐฉ๋ฒ์ ์ตํ๋๋ค.
-
flex๋จ์ถ ์์ฑ์ด ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๊ณต๊ฐ์ ๋ฐฐ๋ถํ๋์ง ์ดํดํฉ๋๋ค.
๐บ๏ธ ์ด ๋ฌธ์์ ๋ฐฐ๊ฒฝ ์ธ๊ณ๊ด: '์์๋ค ์ปค๋ฎค๋ํฐ'
- ๐ฃ ์์ฒ (์ด๋ฐ์ ์ง๋์จ ๋จ๊ณ): "์ํธ ๋, ๋ฉ๋ด ๋ฐ๋ฅผ
float๊ณผposition์ผ๋ก ๋ง์ถ๋ค ๋ณด๋ 1px ์ฐจ์ด๋ก ์ค๋ฐ๊ฟ์ด ๋ฌ๋ผ์ง๋๋ค. ์์ง ์ค์ ์ ๋ ฌ๋ ์ฝ๋๊ฐ ๋๋ฌด ๋ณต์กํด์ก๊ณ ์." - ๐ฆ ์ํธ (๋ฆฌ๋): "์ด์ Flexbox๋ฅผ ์ธ ์ฐจ๋ก์์. ํต์ฌ์ ์์ฑ ์๊ธฐ๊ฐ ์๋๋ผ ์ฃผ์ถ๊ณผ ๊ต์ฐจ์ถ์ ๋จผ์ ์ ํ๋ ๊ฒ๋๋ค. ์ถ ํ๋๋ง ์ ๋๋ก ์ก์ผ๋ฉด ์ ๋ ฌ ์ฝ๋๊ฐ ํจ์ฌ ์งง์์ง๋๋ค."
๐ค ์ ์์์ผ ํ๋๊ฐ
Flexbox๊ฐ ๋ฑ์ฅํ๊ธฐ ์ ๊น์ง ์น ๋ ์ด์์์ ๋ณธ๋ ๋ชฉ์ ๊ณผ ๋ค๋ฅธ ์์ฑ์ ์กฐํฉํด ํด๊ฒฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค. ์ฌ์ง ์์ ํ
์คํธ๋ฅผ ๋๋ํ ๋๋ ค๊ณ float์ ์ฐ๊ณ clearfix๋ก ํ๋ฆ์ ์ ๋ฆฌํด์ผ ํ์ฃ . ํนํ ์์ง ์ค์ ์ ๋ ฌ์ ์ฝ๋๊ฐ ์ฅํฉํด์ง๊ธฐ ์ฌ์ด ๋ฌธ์ ์์ต๋๋ค.
Flexbox๋ ์์๋ค์ ํ ๋ฐฉํฅ(๊ฐ๋ก ํน์ ์ธ๋ก)์ผ๋ก ์ ๋ ฌํ๊ณ , ๋จ๋ ๊ณต๊ฐ์ ์ด๋ป๊ฒ ๋๋ ๊ฐ์ง์ง ๊ฒฐ์ ํ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ๊ณ ์ง๊ด์ ์ธ ๋๊ตฌ์
๋๋ค. 5๋
์ฐจ ๊ฐ๋ฐ์๋ ๋จ์ํ display: flex๋ฅผ ๋จ๋ฐํ๋ ๊ฒ ์๋๋ผ, ์์ดํ
๋ค์ด '์ ์ฐํ๊ฒ(Flex)' ๋ฐ์ํ๋ ์๋ฆฌ๋ฅผ ์กฐ์ ํด ์ด๋ค ํ๋ฉด ํฌ๊ธฐ์์๋ ๊นจ์ง์ง ์๋ ๋ ์ด์์์ ์ค๊ณํฉ๋๋ค.
๐๏ธ 1. ๋ ๊ฐ์ ์ถ(Axis): ๋ช ์ค์ ์์
Flexbox์ ๋ชจ๋ ๊ฒ์ ์ถ(Axis) ์์ ์์๋ฉ๋๋ค.
- Main Axis (์ฃผ์ถ):
flex-direction์ ๊ฒฐ์ ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐrow์ผ ๋๋ ๊ฐ๋ก,column์ผ ๋๋ ์ธ๋ก๊ฐ ๋ฉ๋๋ค. - Cross Axis (๊ต์ฐจ์ถ): ์ฃผ์ถ๊ณผ ์ง๊ตํ๋ ์ถ์ ๋๋ค.
๐ฆ ์ํธ์ ํต์ฌ ๋ ์จ:
"justify-content๋ ์ฃผ์ถ ๋ฐฉํฅ์ ์ ๋ ฌ์,align-items๋ ๊ต์ฐจ์ถ ๋ฐฉํฅ์ ์ ๋ ฌ์ ๋ด๋นํฉ๋๋ค. ์ด ๋ ์ค๋ง ์์ผ๋ฉด ์ ์ค์ '๊ฐ๋ก์ธ๋ก ์ค์ ์ ๋ ฌ'์ด ์์ฑ๋์ฃ ."
์์ฒ ์ด๊ฐ ๋ฉ๋ด ํญ๋ชฉ์ ๊ฐ์ด๋ฐ ๋๊ณ ์ถ๋ค๋ฉด ๋จผ์ ๋ฐฉํฅ์ ํ์ธํด์ผ ํฉ๋๋ค. row๊ฐ ๊ธฐ๋ณธ๊ฐ์ด๋ฏ๋ก ์๋ ์ฝ๋์์๋ ๊ฐ๋ก๊ฐ ์ฃผ์ถ, ์ธ๋ก๊ฐ ๊ต์ฐจ์ถ์
๋๋ค.
.container {
display: flex;
/* ์ฃผ์ถ(row ๊ธฐ๋ณธ๊ฐ์์๋ ๊ฐ๋ก) ๊ฐ์ด๋ฐ ์ ๋ ฌ */
justify-content: center;
/* ๊ต์ฐจ์ถ(row ๊ธฐ๋ณธ๊ฐ์์๋ ์ธ๋ก) ๊ฐ์ด๋ฐ ์ ๋ ฌ */
align-items: center;
}flex-direction: column์ผ๋ก ๋ฐ๊พธ๋ฉด ๋ ์์ฑ์ด ๋งก๋ ๋ฐฉํฅ๋ ๋ฐ๋๋๋ค. ๊ทธ๋์ Flexbox ๋๋ฒ๊น
์ ์ฒซ ์ง๋ฌธ์ ํญ์ "์ง๊ธ ์ฃผ์ถ์ด ์ด๋ ๋ฐฉํฅ์ธ๊ฐ?"์
๋๋ค.
๐ฏ ์ถ ์ ๋ ฌ ๋๊ฒฐ: justify-content vs align-items
๐ 2. flex-basis, grow, shrink: ๊ณต๊ฐ ๋ฐฐ๋ถ์ ์ํ
์์ดํ ๋ค์ด ๋จ๋ ๊ณต๊ฐ์ ์ด๋ป๊ฒ ๋๋ ๊ฐ์ง์ง ๊ฒฐ์ ํ๋ 3ํ์ ์ ๋๋ค.
flex-basis: ์์ดํ ์ ๊ธฐ๋ณธ ํฌ๊ธฐ์ ๋๋ค. (width์ ๋น์ทํ์ง๋ง ์ถ ๋ฐฉํฅ์ ๋ฐ๋ผ ๋ค๋ฆ)flex-grow: ๋จ๋ ๊ณต๊ฐ์ ๋น๋กํด์ ๊ฐ์ ธ๊ฐ๋ ๋น์จ์ ๋๋ค. (๊ธฐ๋ณธ๊ฐ 0: ์ ๊ฐ์ ธ๊ฐ)flex-shrink: ๊ณต๊ฐ์ด ๋ถ์กฑํ ๋ ๋น๋กํด์ ์ค์ด๋๋ ๋น์จ์ ๋๋ค. (๊ธฐ๋ณธ๊ฐ 1: ๋๊ฐ์ด ์ค์ด๋ฌ)
์คํฐ๋ ์นด๋ ๋ชฉ๋ก์ฒ๋ผ ์์ดํ
์ด ๋จ๋ ๊ณต๊ฐ์ ๋๋ ๊ฐ์ ธ์ผ ํ๋ค๋ฉด flex ๋จ์ถ ์์ฑ์ ์ธ ๊ฐ์ ํจ๊ป ์ฝ์ด์ผ ํฉ๋๋ค.
.nav-item {
/* flex-grow, flex-shrink, flex-basis ์์์
๋๋ค. */
flex: 1 1 200px;
}โ๏ธ ๊ณต๊ฐ ๋ฐฐ๋ถ์ ๋ง๋ฒ: flex-grow
โ ๏ธ 5๋ ์ฐจ์ ๊ฒฝ๊ณ :
flex: 1์ ์ฌ์คflex: 1 1 0%์ ์ค์๋ง์ ๋๋ค. ๋ฐ๋ฉดflex: auto๋flex: 1 1 auto์ฃ . ์ด ๋ฏธ๋ฌํ ์ฐจ์ด๊ฐ ๋ ์ด์์์ด ๊ฝ ์ฐจ๋๋, ์ฝํ ์ธ ํฌ๊ธฐ๋งํผ๋ง ์ปค์ง๋๋๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
๐ ๏ธ 3. gap: ๋ง์ง๋ง ์์ดํ ์์ธ ์ฒ๋ฆฌ ์ค์ด๊ธฐ
๊ณผ๊ฑฐ์๋ ์์ดํ
์ฌ์ด ๊ฐ๊ฒฉ์ ์ฃผ๋ ค๊ณ margin-right๋ฅผ ์ฃผ๊ณ ๋ง์ง๋ง ์์ดํ
๋ง last-child๋ก ๋นผ๊ณค ํ์ต๋๋ค. ์ด์ ๋ gap ์์ฑ์ผ๋ก ์ปจํ
์ด๋๊ฐ ๊ฐ๊ฒฉ์ ๊ด๋ฆฌํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
.container {
display: flex;
/* ์์ดํ
์์ฒด๊ฐ ์๋๋ผ ์ปจํ
์ด๋๊ฐ ๊ฐ๊ฒฉ ์ ์ฑ
์ ์์ ํฉ๋๋ค. */
gap: 20px;
}๐ ๋ง๋ฌด๋ฆฌ ํด์ฆ
Q1. flex-direction: column;์ผ ๋ ์์๋ค์ ์์ง ๋ฐฉํฅ(์์์ ์๋)์ ํ๊ฐ์ด๋ฐ์ ๋์ผ๋ ค๋ฉด ์ด๋ค ์์ฑ์ ์จ์ผ ํ ๊น์?
โ
์ ๋ต: justify-content: center;
๐ก ์์ธ ํด์ค:
- ์๋ฆฌ:
justify-content๋ ์ธ์ ๋ ์ฃผ์ถ(Main Axis) ๋ฐฉํฅ์ ์ ๋ ฌ์ ๋ด๋นํฉ๋๋ค.flex-direction: column์ผ ๋๋ ์ธ๋ก๊ฐ ์ฃผ์ถ์ด ๋๋ฏ๋ก,justify-content: center๋ฅผ ์จ์ผ ์์ง ์ค์ ์ ๋ ฌ์ด ๋ฉ๋๋ค. - ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋, ์ฃผ์ถ์ด ๋ฐ๋๋ฉด ์์ฑ์ ์ญํ ๋ ๋ฐ๋๋ค๋ ๊ฑธ ๊ผญ ๊ธฐ์ตํ์ธ์. ํท๊ฐ๋ฆฐ๋ค๋ฉด '์ฃผ์ ํ(Justify-Main)'์ด๋ผ๊ณ ์ธ์๋ณด์ธ์!"
Q2. flex-shrink: 0; ์์ฑ์ด ๋ถ์ฌ๋ ์์ดํ
์ ์ปจํ
์ด๋ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๋ ์ด๋ป๊ฒ ๋ฐ์ํ ๊น์?
- ์ปจํ ์ด๋ ํฌ๊ธฐ์ ๋ง์ถฐ ์ค์ด๋ ๋ค.
- ์ ๋ ์ค์ด๋ค์ง ์๊ณ ์๊ธฐ ํฌ๊ธฐ๋ฅผ ์ ์งํ๋ฉฐ ์์ ธ๋์จ๋ค.
- ๋ค์ ์ค๋ก ์๋์ผ๋ก ๋์ด๊ฐ๋ค.
- ์ฌ๋ผ์ง๋ค.
โ
์ ๋ต: 2. ์ ๋ ์ค์ด๋ค์ง ์๊ณ ์๊ธฐ ํฌ๊ธฐ๋ฅผ ์ ์งํ๋ฉฐ ์์ ธ๋์จ๋ค.
๐ก ์์ธ ํด์ค:
- ์๋ฆฌ:
flex-shrink๋ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๋ ์์ดํ ์ด ์ผ๋ง๋ ์ค์ด๋ค์ง๋ฅผ ๊ฒฐ์ ํ๋ ๋น์จ์ ๋๋ค.0์ผ๋ก ์ค์ ํ๋ฉด ๊ธฐ๋ณธ ํฌ๊ธฐ๋ฅผ ์ ์งํ๋ ค๊ณ ํ๋ฉฐ, ์ปจํ ์ด๋๊ฐ ์ถฉ๋ถํ ์ข์ผ๋ฉด ๋์นจ์ด ์๊ธธ ์ ์์ต๋๋ค. - ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋, ๋ด์ฉ๋ฌผ์ด ์๋ฆฌ๋ฉด ์ ๋๋ ์ค์ํ ์์ด์ฝ์ด๋ ๋ฒํผ์๋
flex-shrink: 0์ ์ค ์ ์์ด์. ๋์ ์์ ํ๋ฉด์์ ๋์น์ง ์๋์ง ํจ๊ป ํ์ธํด์ผ ํฉ๋๋ค."
Q3. [์์ฒ ์ด์ ํ
์คํธ ํ์: ์ค๋ฌด ๋๋ ๋ง]
์์ฒ ์ด๊ฐ ์นด๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์๋๋ฐ, ๋ง์ง๋ง ์ค์ ์นด๋ ํ๋๊ฐ ํผ์์ ์ปจํ
์ด๋ ์ ์ฒด ๋๋น๋ฅผ ์ฐจ์งํ๋ฉฐ ๋ฑ๋ฑํ๊ฒ ๋์ด๋ ๋ฒ๋ ธ์ต๋๋ค. ์์ ๋์์ด๋ ๋์ด "๋ง์ง๋ง ์นด๋๋ ๋ค๋ฅธ ์นด๋๋ ๋๊ฐ์ ํฌ๊ธฐ์ฌ์ผ ํด์!"๋ผ๊ณ ํ์๋ค์. ์์ฒ ์ด๊ฐ flex ์์ฑ์ ์ด์ฉํด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ์ค์ ํด์ผ ํ ๊น์?
โ
์ ๋ต: flex-grow: 0 (๋๋ flex: none)์ ์ฃผ์ด ํ์ฅ์ ๋ง๊ณ , flex-basis๋ width๋ก ๊ณ ์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ค.
๐ก ์์ธ ํด์ค:
- ๋ฌธ์ ์ง๋จ:
flex-grow: 1์ "๊ฐ๋ฅํ ๋ชจ๋ ๋น ๊ณต๊ฐ์ ์ฑ์๋ผ"๋ผ๋ ๊ฐ๋ ฅํ ๋ช ๋ น์ ๋๋ค. ์ฌ๋ฌ ์ค๋ก ๋์ด๋ ์นด๋ ๋ฆฌ์คํธ์์ ๋ง์ง๋ง ์ค์ ์์ดํ ์ด ํ๋๋ง ๋จ์ผ๋ฉด, ๊ทธ ์์ดํ ์ด ํด๋น ์ค์ ๋ชจ๋ ์ฌ๋ฐฑ์ ์ฐจ์งํด ์นด๋ ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. - ํด๊ฒฐ ๋ฐฉ์ (์ค๋ฌด ํต์ฌ):
- ์ ์ ํ (Flex-grow: 0): ์์ดํ
์
flex-grow: 0์ ์ฃผ์ด ๋ฌด๋ถ๋ณํ ํ์ฅ์ ๋ง์ต๋๋ค. ๋์flex-basis: calc(50% - gap)์ด๋width๋ก ๋ช ํํ ์๊ธฐ ์๋ฆฌ๋ฅผ ์ง์ ํด์ค์ผ ํฉ๋๋ค. - ๊ฑด์ถํ (Grid): ์ ์ด์ ์ด๋ฐ ๊ฒฉ์ํ ๋ ์ด์์์ 07๊ฐ์์ ๋ฐฐ์ธ CSS Grid๋ฅผ ์ฐ๋ ๊ฒ์ด ๊ฐ์ฅ ์๋ฒฝํ ํด๊ฒฐ์ฑ ์ ๋๋ค. (Grid๋ ์ค์ด ๋ฐ๋์ด๋ ๊ฐ ์นธ์ ํฌ๊ธฐ๋ฅผ ์ผ์ ํ๊ฒ ์ ์งํ๋๊น์!)
- ์ ์ ํ (Flex-grow: 0): ์์ดํ
์
โ ๋ฌธ์ ์ํฉ: flex-grow: 1 (๋ง์ง๋ง ์์ดํ ๋น๋ํ)
โ ํด๊ฒฐ ๋ฐฉ๋ฒ: flex-grow: 0 (๋๋น ๊ณ ์ )
- ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋,
flex: 1์ ๋ชจ๋ ๋ ์ด์์์ ๊ธฐ๋ณธ๊ฐ์ด ์๋์์. ์ฌ๋ฌ ์ค ์นด๋ ๋ชฉ๋ก์์๋ ๊ณต๊ฐ์ ๋๋ ๊ฐ์ง ์๋๋กflex-grow๋ฅผ 0์ผ๋ก ๋๊ฑฐ๋ Grid๋ฅผ ๊ฒํ ํ์ธ์." - ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: "ํ ์ค ์ ๋ ฌ์ Flex, ํ๊ณผ ์ด์ด ๋ชจ๋ ์ค์ํ๋ฉด Grid๋ ํ๋ณด์ ์ฌ๋ฆฐ๋ค."
๐ฃ ์์ฒ ์ด์ ํด๊ทผ ์ผ๊ธฐ
์ค๋ float์ ๋ฒ๋ฆฌ๊ณ Flexbox์ ์ธ๊ณ์ ์
์ฑํ๋ค.
์์ง ์ค์ ์ ๋ ฌ์ด ๋จ ๋ ์ค ๋ง์ ๋๋๋ ๊ฑธ ๋ณด๊ณ ๋ด ์ง๋ ๋ฐค์์ด ํ๋งํ๊ฒ ๋๊ปด์ก์ง๋ง, ์ด์ ๋ผ๋ ์์์ผ๋ ๋คํ์ด๋ค.
ํนํ flex-grow๋ flex-shrink๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ํ ๊ณ์ฐ์ ํ๊ณ ์๋ค๋ ๊ฒ ์ ๋ง ์ ๊ธฐํ๋ค.
๐ก "์ ๋ ฌ์ ์ฃผ๊ด์ด ์๋๋ผ ์ถ(Axis)์ ์ํ ๋ฌผ๋ฆฌ์ ์ธ ๋ฐฐ์น๋ค. ์ถ์ ์ง๋ฐฐํ๋ ์๊ฐ ๋ ์ด์์์ ์ง๋ฐฐํ๋ค."
์ํธ ๋์ด "๋จ์ํ ์ธ์ฐ์ง ๋ง๊ณ ๊ณต๊ฐ์ด ์ด๋ป๊ฒ ๋จ๊ณ ๋ชจ์๋ผ๋์ง๋ฅผ ์ค๋ช
ํด๋ณด๋ผ"๋ผ๊ณ ํ์
จ๋ค. ๋ด์ผ๋ถํฐ๋ display: flex๋ฅผ ๋จผ์ ์ฐ๊ธฐ ์ ์ ์ด ๋ ์ด์์์ด ํ ๋ฐฉํฅ ๋ฌธ์ ์ธ์ง, ์๋๋ฉด ํ๊ณผ ์ด์ด ํจ๊ป ์ค์ํ ๋ฌธ์ ์ธ์ง๋ถํฐ ํ๋จํด๋ด์ผ๊ฒ ๋ค.