Flexbox Layout
1. ๊ฐ์
Flexbox Layout์ ๋ชจ๋ ์น์ ์ํ์ฌ ์ ์๋ ๊ธฐ์กด layout๋ณด๋ค ๋ ์ธ๋ จ๋ ๋ฐฉ์์ ๋์ฆ์ ๋ถํฉํ๊ธฐ ์ํ CSS3์ ์๋ก์ด layout๋ฐฉ์์ด๋ค. ํ๋์ค ๋ฐ์ค ๋ ์ด์์์ ๋น๊ต์ ์ต๊ทผ์ ๋ฑ์ฅํ ๊ฐ๋ ์ด๋ฏ๋ก ๊ธฐ์กด์ CSS ์์ฑ ์ธ์ ์๋ก ๊ณต๋ถํด์ผ ํ ์์ฑ์ด ์๋ค.
2. ์ฉ์ด ์ ๋ฆฌ

ํ๋ ์ค ์ปจํ ์ด๋(๋ถ๋ชจ ๋ฐ์ค): ํ๋ ์ค ๋ฐ์ค ๋ ์ด์์์ ์ ์ฉํ ๋์์ ๋ฌถ๋ ์์์ด๋ค. ์์ ๊ทธ๋ฆผ์์๋ ๋ ธ๋ผ์ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ํฐ ๋ฐ์ค๊ฐ ํ๋ ์ค ์ปจํ ์ด๋์ ํด๋น๋๋ค.
ํ๋ ์ค ํญ๋ชฉ(์์ ๋ฐ์ค, flex-item): ํ๋ ์ค ๋ฐ์ค ๋ ์ด์์์ ์ ์ฉํ ๋์์ด๋ค. ์์ ๊ทธ๋ฆผ์์๋ ํ์์ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ์์ ๋ฐ์ค๊ฐ ํ๋ ์ค ํญ๋ชฉ์ ํด๋น๋๋ค.
์ฃผ์ถ(main axis): ํ๋ ์ค ์ปจํ ์ด๋ ์์์ ํ๋ ์ค ํญ๋ชฉ์ ๋ฐฐ์นํ๋ ๊ธฐ๋ณธ ๋ฐฉํฅ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ด๋ฉฐ ์ํ ๋ฐฉํฅ์ผ๋ก ๋ฐฐ์นํ๋ค. ํ๋ ์ค ํญ๋ชฉ์ ๋ฐฐ์น๊ฐ ์์๋๋ ์์น๋ฅผ '์ฃผ์ถ ์์์ ', ๋๋๋ ์์น๋ฅผ '์ฃผ์ถ ๋์ '์ด๋ผ๊ณ ํ๋ค.
๊ต์ฐจ์ถ(cross axis): ์ฃผ์ถ๊ณผ ๊ต์ฐจํ๋ ๋ฐฉํฅ์ ๋งํ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์์์ ์๋๋ก ๋ฐฐ์นํ๋ค. ํ๋ ์ค ํญ๋ชฉ์ ๋ฐฐ์น๊ฐ ์์๋๋ ์์น๋ฅผ '๊ต์ฐจ์ถ ์์์ ', ๋๋๋ ์์น๋ฅผ '๊ต์ฐจ์ถ ๋์ '์ด๋ผ๊ณ ํ๋ค.
3. Usage
ํ๋ ์ค ๋ฐ์ค ๋ ์ด์์์ ๋ง๋ค๊ธฐ ์ํด์๋ ๋จผ์ ์น ์ฝํ ์ธ ๋ฅผ ํ๋ ์ค ์ปจํ ์ด๋๋ก ๋ฌถ์ด ์ฃผ์ด์ผ ํ๋ค. ์ฆ, ๋ฐฐ์นํ ์น ์์๊ฐ ์๋ค๋ฉด ๊ทธ ์์๋ฅผ ๊ฐ์ธ๋ ๋ถ๋ชจ ์์๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ๋ถ๋ชจ ์์๋ฅผ ํ๋ ์ค ์ปจํ ์ด๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
๋ถ๋ชจ ์์์ display ์์ฑ์ flex๋ฅผ ์ง์ ํ๋ฉด ํ๋ ์ค ์ปจํ ์ด๋๊ฐ ๋ง๋ค์ด์ง๋ค.
๋ถ๋ชจ ์์๊ฐ inline ์์์ธ ๊ฒฝ์ฐ inline-flex์ ์ง์ ํ๋ค.
Flexbox Layout๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ flex ๋๋ inline-flex๋ ๋ถ๋ชจ ์์์ ๋ฐ๋์ ์ง์ ํด์ผํ๋ฉฐ ์์ ์์๋ ์๋์ ์ผ๋ก flex item์ด ๋๋ค.
4. Flexbox container ์์ฑ
4.1 flex-direction
ํ๋ ์ค ์ปจํ ์ด๋ ์์์ ํ๋ ์ค ํญ๋ชฉ์ ๋ฐฐ์นํ๋ ์ฃผ์ถ(main axis) ๋ฐฉํฅ์ ์ค์ ํ๋ค.
์๋๋ flex-direction์ ํ๋กํผํฐ๊ฐ๊ณผ ์ค๋ช
์ด๋ค.
row
์ฃผ์ถ์ ๊ฐ๋ก๋ก ์ง์ ํ๊ณ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐฐ์นํ๋ค.(๊ธฐ๋ณธ๊ฐ)
row-reverse
์ฃผ์ถ์ ๊ฐ๋ก๋ก ์ง์ ํ๊ณ ๋ฐ๋๋ก ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๋ฐฐ์นํ๋ค.
column
์ฃผ์ถ์ ์ธ๋ก๋ก ์ง์ ํ๊ณ ์์ชฝ์์ ์๋์ชฝ์ผ๋ก ๋ฐฐ์นํ๋ค.
column-reverse
์ฃผ์ถ์ ์ธ๋ก๋ก ์ง์ ํ๊ณ ์๋์ชฝ์์ ์์ชฝ์ผ๋ก ๋ฐฐ์นํ๋ค.

4-2 flex-wrap
flex-wrap ํ๋กํผํฐ๋ ํ๋ ์ค ์ปจํ
์ด๋ ๋๋น๋ณด๋ค ๋ง์ ํ๋ ์ค ํญ๋ชฉ์ด ์์ ๊ฒฝ์ฐ ์ค์ ๋ฐ๊ฟ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํ๋ค.
์๋๋ flex-wrap์์ ์ฌ์ฉํ ์ ์๋ ํ๋กํผํฐ๊ฐ๊ณผ ์ค๋ช
์ด๋ค.
nowrap
ํ๋ ์ค ํญ๋ชฉ์ ํ ์ค์ ํ์ํ๋ค.(๊ธฐ๋ณธ๊ฐ)
warp
ํ๋ ์ค ํญ๋ชฉ์ ์ฌ๋ฌ ์ค์ ํ์ํ๋ค.
wrap-reverse
ํ๋ ์ค ํญ๋ชฉ์ ์ฌ๋ฌ ์ค์ ํ์ํ๋, ์์์ ๊ณผ ๋์ ์ด ๋ฐ๋๋ค.

4-3. flex-flow
flex-flow ํ๋กํผํฐ๋ flex-direction ํ๋กํผํฐ์ flex-wrap ํ๋กํผํฐ๋ฅผ ๋์์ ์ค์ ํ๊ธฐ ์ํ shorthand์ด๋ค. ๊ธฐ๋ณธ๊ฐ์ row nowarp์ด๋ค.
์ฌ์ฉ๋ฒ flex-flow: <flex-direction> || <flex-wrap>;
4-4 justify-content
justify-content ํ๋กํผํฐ๋ ์ฃผ์ถ(main axis)์ ๊ธฐ์ค์ผ๋ก flex item์ ์ํ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ง์ ํ๋ค.
flex-direction: column;์ผ๋ก ์ธํด ์ฃผ์ถ์ด ๋ฐ๋๊ฒ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์กฐ์ฌํ์.
์๋๋ justify-content์ ํ๋กํผํฐ๊ฐ๊ณผ ์ค๋ช
์ด๋ค.
flex-start
์ฃผ์ถ์ ์์์ ์ ๋ง์ถฐ ๋ฐฐ์นํ๋ค.
flex-end
์ฃผ์ถ์ ๋์ ์ ๋ง์ถฐ ๋ฐฐ์นํ๋ค.
center
์ฃผ์ถ์ ์ค์์ ๋ง์ถฐ ๋ฐฐ์นํ๋ค.
space-between
์ฒซ ๋ฒ์ฌ ํญ๋ชฉ๊ณผ ๋ ํญ๋ชฉ์ ์ฃผ์ถ์ ์์์ ๊ณผ ๋์ ์ ๋ฐฐ์นํ ํ ๋๋จธ์ง ํญ๋ชฉ์ ๊ทธ ์ฌ์ด์ ๊ฐ์ ๊ฐ๊ฒฉ์ผ๋ก ๋ฐฐ์นํ๋ค.
space-around
๋ชจ๋ ํญ๋ชฉ์ ์ฃผ์ถ์ ๊ฐ์ ๊ฐ๊ฒฉ์ผ๋ก ๋ฐฐ์นํ๋ค.

4-5 align-items
align-items ํ๋กํผํฐ๋ ์์ง ๋ฐฉํฅ(cross axis)์ ๊ธฐ์ค์ผ๋ก flex item์ ์ ๋ ฌํ๋ค. align-items ํ๋กํผํฐ๋ ๋ชจ๋ flex-item์ ์ ์ฉ๋๋ค.
์๋๋ align-items์ ํ๋กํผํฐ๊ฐ๊ณผ ์ค๋ช
์ด๋ค.
flex-start
๊ต์ฐจ์ถ์ ์์์ ์ ๋ง์ถฐ ๋ฐฐ์นํ๋ค.
flex-end
๊ต์ฐจ์ถ์ ๋์ ์ ๋ง์ถฐ ๋ฐฐ์นํ๋ค.
center
๊ต์ฐจ์ถ์ ์ค์์ ๋ฐฐ์นํ๋ค.
baseline
๊ต์ฐจ์ถ์ ๋ฌธ์ ๊ธฐ์ค์ ์ ๋ง์ถฐ ๋ฐฐ์นํ๋ค.
stretch
ํ๋ ์ค ํญ๋ชฉ์ ๋๋ ค ๊ต์ฐจ์ถ์ ๊ฐ๋ ์ฐจ๊ฒ ๋ฐฐ์นํ๋ค.

4-6. align-content
flex container์ cross axis๋ฅผ ๊ธฐ์ค์ผ๋ก flex item์ ์์ง ์ ๋ ฌํ๋ค. ์ฐธ๊ณ ๋ก justify-content ํ๋กํผํฐ๋ flex container์ main aixs๋ฅผ ๊ธฐ์ค์ผ๋ก flex item์ ์ํ ์ ๋ ฌํ๋ค.
์ฆ, ์ฃผ์ถ์์ ์ค ๋ฐ๊ฟ์ด ์๊ฒจ์ flex item์ ์ฌ๋ฌ ์ค๋ก ํ์ํ ๋ align-content ํ๋กํผํฐ๋ฅผ ํตํด ๊ต์ฐจ์ถ์์ flex item์ ๊ฐ๊ฒฉ์ ์ง์ ํ ์ ์๋ค.
์๋๋ align-content์ ํ๋กํผํฐ๊ฐ๊ณผ ์ค๋ช
์ด๋ค.
flex-start
๊ต์ฐจ์ถ์ ์์์ ์์ ๋ง์ถฐ ๋ฐฐ์นํ๋ค.
flex-end
๊ต์ฐจ์ถ์ ๋์ ์ ๋ง์ถฐ ๋ฐฐ์นํ๋ค.
center
๊ต์ฐจ์ถ์ ์ค์์ ๋ง์ถฐ ๋ฐฐ์นํ๋ค.
space-between
์ฒซ ๋ฒ์งธ ํญ๋ชฉ๊ณผ ๋ ํญ๋ชฉ์ ๊ต์ฐจ์ถ์ ์์์ ๊ณผ ๋์ ์ ๋ง์ถ๊ณ ๋๋จธ์ง ํญ๋ชฉ์ ๊ทธ ์ฌ์ด์ ๊ฐ์ ๊ฐ๊ฒฉ์ผ๋ก ๋ฐฐ์นํ๋ค.
space-around
๋ชจ๋ ํญ๋ชฉ์ ๊ต์ฐจ์ถ์ ๊ฐ์ ๊ฐ๊ฒฉ์ผ๋ก ๋ฐฐ์นํ๋ค.
stretch
ํ๋ ์ค ํญ๋ชฉ์ ๋๋ ค์ ๊ต์ฐจ์ถ์ ๊ฐ๋ ์ฐจ๊ฒ ๋ฐฐ์นํ๋ค.


5. Flexbox item ์์ฑ
5-1. order
flex item์ ๋ฐฐ์น ์์๋ฅผ ์ง์ ํ๋ค. HTML ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ order ํ๋กํผํฐ๊ฐ์ ์ง์ ํ๋ ๊ฒ์ผ๋ก ๊ฐ๋จํ ์ฌ๋ฐฐ์นํ ์ ์๋ค. ๊ธฐ๋ณธ ๋ฐฐ์น ์์๋ flex container์ ์ถ๊ฐ๋ ์์์ด๋ค. ๊ธฐ๋ณธ๊ฐ์ 0์ด๋ค.
์ฌ์ฉ๋ฒ order: <์ ์๊ฐ>
5-2. flex-grow
flex item์ ๋๋น์ ๋ํ ํ๋ ์ธ์๋ฅผ ์ง์ ํ๋ค. ๊ธฐ๋ณธ๊ฐ์ 0์ด๊ณ ์์๊ฐ์ ๋ฌดํจํ๋ค.

5-3. flex-shrink
flex item์ ๋๋น์ ๋ํ ์ถ์ ์ธ์๋ฅผ ์ง์ ํ๋ค. ๊ธฐ๋ณธ๊ฐ์ 1์ด๊ณ ์์๊ฐ์ ๋ฌดํจํ๋ค. 0๋ฅผ ์ง์ ํ๋ฉด ์ถ์๊ฐ ํด์ ๋์ด ์๋์ ๋๋น๋ฅผ ์ ์งํ๋ค.

5-4. flex-basis
flex item์ ๋๋น ๊ธฐ๋ณธ๊ฐ์ px, % ๋ฑ์ ๋จ์๋ก ์ง์ ํ๋ค. ๊ธฐ๋ณธ๊ฐ์ auto์ด๋ค.

5-5. flex
flex-grow, flex-shrink, flex-basis ํ๋กํผํฐ์ shorthand์ด๋ค. ๊ธฐ๋ณธ๊ฐ์ 0 1 auto์ด๋ค.
W3C์์๋ ์ด ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋ค ๊ฐ๋ณ์ ์ผ๋ก ๊ธฐ์ ํ๋ ๊ฒ์ ์ถ์ฒํ๊ณ ์๋ค.
5-6. align-self
align-item ์์ฑ์ ๊ต์ฐจ์ถ์ ๊ธฐ์ค์ผ๋ก ํ๋ ์ค ํญ๋ชฉ์ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ์ง๋ง ๊ทธ์ค์์ ํน์ ํญ๋ชฉ๋ง ์ง์ ํ๊ณ ์ถ๋ค๋ฉด align-self ์์ฑ์ ์ฌ์ฉํ๋ค. align-item ํ๋กํผํฐ๋ณด๋ค ์ฐ์ ํ์ฌ ๊ฐ๋ณ flex item์ ์ ๋ ฌํ๋ค.
align-self ํ๋กํผํฐ์์ ์ฌ์ฉํ ๊ฐ์ align-items ํ๋กํผํฐ์์ ์ฌ์ฉํ๋ ๊ฐ๊ณผ ๊ฐ๋ค.

6. Conclusion
flex-grow๋ ์ฒ์ ์จ๋ณด๋ ํ๋กํผํฐ์ด๋ค. ๊ต์ฅํ ์ ๊ธฐํ๋ค. ์์ ์ฝ๋๋ฅผ ์๋ฅผ๋ค์ด box ํด๋์ค๋ฅผ ๊ฐ์ง div๋ค์ ๋๋น๋ฅผ 100%๋ก ์ง์ ํ์ง ์์๋flex-grow๋ฅผ 1๋ก ์ง์ ํ๋ฉด ์ ์ฒด ๋๋น๋ฅผ ๋ชจ๋ ๋๋ฑํ๊ฒ ์ฐจ์งํ๊ฒ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 0 ์ด๋ฏ๋ก ๋ฑ ์์ ์ ์์๋งํผ๋ง ๋๋น๋ฅผ ์ฐจ์งํ๋ ๊ฒ ๊ฐ๋ค. ๋ฟ๋ง ์๋๋ผflex-shrink๊ณผflex-basis๋ ์ด๋ฒ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ์ฒ์ ์จ๋ณด๋ ํ๋กํผํฐ์๋ค.flex๋grid๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ ๊น์ง ์์ฃผ ์ฌ์ฉํ์๋ค. ํ์ง๋งgrid๋ฅผ ๋ฐฐ์ฐ๊ณ ๋์๋ ์ฌ์ฉ๋น๋๊ฐ ๋ง์ด ์ค์๋ค. ๋ ๊ฐ์ ํ๋กํผํฐ ๋ชจ๋ CSS์์ ์ค์ํ ๋ด์ฉ์ด๋ ํ์ํ ์ํฉ์ ๋ง์ถฐ ์ ์ฌ์ฉํ๋๋ก ํ์.
์ฐธ๊ณ
poiemaweb 2-20 ํ๋ ์ค ๋ฐ์ค ๋ ์ด์์ ๋์ - HTML + CSS + ์๋ฐ์คํฌ๋ฆฝํธ ์น ํ์ค์ ์ ์
๐ 2022-07-24
Last updated