์ด๋ฒ ํฌ์คํ ์ค๋ช ์ ์ ๊ฐ ์์ฑํ์ผ๋ ์ด๋ฏธ์ง๋ ๋ค๋ฅธ ๊ณณ์์ ์ ๊ทธ๋ ค์ง ๊ฒ๋ค์ ๊ฐ์ ธ์์ต๋๋ค.
์ด๋ฏธ์ง๋ง๋ค ์ถ์ฒ ํ๊ธฐํ์ต๋๋ค :)
์ฌ๊ธฐ ๊ฐ์๋ฉด flex ์์๋ค์ ์ง์ ํด๋ฆญํด ๋ณด๋ฉด์ ํ๋ฉด ๋ ์ด์์์ ํ์ธํด ๋ณผ ์ ์์ด์.
Flex์ Grid๋?
์์ ์๋ ์นํ์ด์ง ํ๋ฉด์ ์ด๋ค ๋ด์ฉ์ ๋ณด์ฌ์ค ๊ฒ์ธ๊ฐ๊ฐ ์ค์ํ๋ค๋ฉด ์ด์ ๋ ์ด๋ป๊ฒ ํ๋ฉด ์ ๋ณด๋ฅผ ํ๋ฉด์ ๊น๋ํ๊ฒ ๋ณด์ฌ์ค ๊ฒ์ธ์ง ๋ ์ด์์๋ ์ค์ํด์ก๋ค. ์น๋ ๋ฐ์ ์ ๊ฑฐ๋ญํ๋ฉด์ ๋ณด๊ธฐ ์ข๊ฒ ํ๋ฉด์ ์์๋ฅผ ๋ฐฐ์นํ๊ธฐ ์ํด css3์์ ์ถ๊ฐ๋์๋ค.
๊ทธ ์ ๊น์ง๋ ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ์ ๋ ฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ๋ช ํํ๊ฒ ์ ์๋์ง ์์์ ํ ์ด๋ธ, ํ๋กฏ, ์ธ๋ผ์ธ ๋ธ๋ก ๋ฑ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉ ํด ์๋ค.
์ด์ ๋ Flex์์ฑ์ผ๋ก 1์ฐจ์ ๋ ์ด์์์ ๋ณด๋ค ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ฒ ๋์๋ค. Flex๋ ๋ถ๋ชจ ์์ ์๋์์ ์์ ์์๋ค์ด ์ ํด์ค ๋ฉ์ธ ์ถ ๋ฐฉํฅ์ผ๋ก ์ ๋ ฌ๋๋ค. Grid๋ ํ๊ณผ ์ด๋ก ์ด๋ฃจ์ด์ ธ ๋ณต์กํ 2์ฐจ์ ๋ ์ด์์ ์ค๊ณ์ ์ ํฉํ๋ค.
Flex
ํ๋ ์ค๋ ๋ถ๋ชจ์ ์์ ํ๊ทธ๊ฐ ํ์ํ๊ณ ,
์์ ์์์ธ flex-item ์ ๋ถ๋ชจ flex-container์ ์ ์ฉ ๊ฐ๋ฅํ ์์ฑ์ด ๊ตฌ๋ถ๋์ด ์๋ค.
์ ์ฉํ ์์ฑ์ ์ปจํ ์ด๋์ ์ง๊ณ ์์๊น์ง๋ง ์ํฅ์ ๋ฏธ์น๋ค.
`flex-container`์ ์์ฑ: flex-direction, flex-wrap, justify-content, align-itmes, align-content ๋ฑ
`flex-item`์ ์์ฑ: flex, flex-grow, flex-shrink, flex-basis, align-self, order, z-index ๋ฑ
ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์์ ์น์ฌ์ดํธ๋ก ๊ฐ์ `๊ฐ๋ฐ์ ๋๊ตฌ > ์คํ์ผ ํญ` ๋ฅผ ์ด๋ฉด ํ๋ฉด ๋ ์ด์์์์ flex ๊ฐ ์ ์ฉ๋ ๋ถ๋ถ์ ๋ณด์ฌ์ค๋ค. GUI ๊ธฐ๋ฅ์ผ๋ก ๋ค์ฏ๊ฐ์ง ํ๋ ์ค ์์๋ฅผ ๊ฐํธํ๊ฒ ์ ์ฉํด๋ณผ ์ ์๋ค.
1. ๋ถ๋ชจ์์์ ์ ์ฉ๋๋ ์์ฑ
1-1. flex-direction
flex-direction ์์ฑ์ Flexbox ๋ ์ด์์์์ ํ๋ ์ค ์์ดํ ์ ์ฃผ ์ถ(main axis) ๋ฐฉํฅ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ด ์์ฑ์๋ ๋ค ๊ฐ์ง ์ข ๋ฅ๊ฐ ์์ผ๋ฉฐ, ๊ฐ ๊ฐ์ ์์ดํ ์ ๋ฐฐ์น ๋ฐฉํฅ์ ์ ์ํฉ๋๋ค.
ํ๋ฐฉํฅ : main axis (์์์ ์ main start, ๋์ ์ main end)
์ด๋ฐฉํฅ : cross axis (์์์ ์ cross start, ๋์ ์ cross end)
main axis ์ ๋ฐฉํฅ์ flex-direction ์์ฑ ์ ์ํด ๊ฒฐ์ ๋๋ค.
flex-direction์ ๋ค ๊ฐ์ง ์์ฑ
- row : ์ํ (์ผ์ชฝ → ์ค๋ฅธ์ชฝ) ๊ธฐ๋ณธ ํ ์คํธ ๋ฐฉํฅ๊ณผ ๋์ผ
- row-reverse : ์ํ (์ค๋ฅธ์ชฝ → ์ผ์ชฝ) ํ ์คํธ ๋ฐฉํฅ ๋ฐ๋
- column : ์์ง (์ → ์๋) ๊ธฐ๋ณธ ํ ์คํธ ๋ฐฉํฅ๊ณผ ๋์ผ
- column-reverse : ์์ง (์๋ → ์) ํ ์คํธ ๋ฐฉํฅ ๋ฐ๋
1-2. justify - content
์ํ ์ ๋ ฌ
์ฃผ ์ถ(main axis) ์์์ ์์ดํ ์ ์ ๋ ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ฑ.
์์ดํ ๊ฐ์ ๊ฐ๊ฒฉ์ ์กฐ์ ํ๊ฑฐ๋ ์ ๋ ฌ ์์น๋ฅผ ์ค์
- flex-start ์์์ ์ ์ ๋ ฌ
- flex-end ๋์ ์ ์ ๋ ฌ
- center ๊ฐ์ด๋ฐ ์ ๋ ฌ
- space-between ์ฌ์ด ๊ฐ๊ฒฉ ๊ท ๋ฑ, ์ ๋์ ๋ถ์
- space-around ์์ดํ ์ฃผ์ ๊ฐ๊ฒฉ ๊ท ๋ฑ, ๊ฐ์ฅ์๋ฆฌ๋ ์์
- space-evenly ์์ดํ ๊ฐ ๋ฐ ๊ฐ์ฅ์๋ฆฌ ๊ฐ๊ฒฉ ๊ท ๋ฑ
1-3. align-items, align-content
align ์ ์์ง ์ ๋ ฌ (์ผ์ง์ ๋ง์ถค)
align-items๋ ํ ์ค๋ก ๋ง์ถฐ์ง๋ ์์ฑ, align-content๋ ๋ ์ค ์ด์์ผ๋ก ๋ง์ถ๋ ์์ฑ
align-items์ align-content๋ ๋ค ๊ฐ์ง ์์ฑ์ ๊ณต์ ํ๋ค.
- strech ๋ถ๋ชจ์์์ ๋์ด๋งํผ ์์์์๊ฐ ๊ฐ์ด ๋์ด๋๋ ์์ฑ
- flex-start์ flex-end๋ ๊ต์ฐจ์ถ ์ค์ฌ์ผ๋ก ์์์ ๊ณผ ๋์ ์ค์์ผ๋ก ์ ๋ ฌ๋๋ ์์ฑ
- flex-start๋ ์ข์ธก ์๋จ๋ถํฐ ์ ๋ ฌ
- flex-end๋ ์ข์ธก ํ๋จ๋ถํฐ ์ ๋ ฌ
- center ๋ถ๋ชจ ์์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ด๋ฐ๋ก ์ ๋ ฌ
align-items๋ง ๊ฐ์ง๋ ์์ฑ
โก baseline
ํ ์คํธ ๊ธฐ์ค์ ์ ๋ง์ถฐ ์ ๋ ฌ
align-content ๋ง ๊ฐ์ง๋ ์์ฑ
justify-content์ ๋น์ทํ๋, ์์ ๊ฐ๋ณ์ ์ผ๋ก ์ ๋ ฌํ๋ ๊ฒ์ด ์๋ ์ฌ๋ฌ ์ค์ ์์ดํ ์ ๋จ๋ฝ๋ณ๋ก ๋ฌถ์ด์ ํ ๋ฉ์ด๋ฆฌ๋ก ๋ง๋ ๋ค์ ํ๊บผ๋ฒ์ ์ฎ๊ธด๋ค.
โก space-beetween
๊ต์ฐจ์ถ์ ์ ๋์ ๋ง์ถฐ์ ๋์ผํ ๊ฐ๊ฒฉ์ ์ค๋ค.
์์ดํ ์ฌ์ด์ ๊ท ๋ฑํ ๊ฐ๊ฒฉ์ ๋๊ณ , ๊ฐ์ฅ์๋ฆฌ์๋ ์ฌ๋ฐฑ์ด ์๋ค. ์ฒซ ๋ฒ์งธ ์์ดํ ์ ์ปจํ ์ด๋์ ์ผ์ชฝ ๋์ ๋ฐฐ์น๋๊ณ , ๋ง์ง๋ง ์์ดํ ์ ์ปจํ ์ด๋์ ์ค๋ฅธ์ชฝ ๋์ ๋ฐฐ์น๋๋ฉฐ ์์ดํ ๋ค ๊ฐ ๊ฐ๊ฒฉ์ ๋์ผํ๋ค.
- ์์ดํ ๊ฐ์๋ง ๊ฐ๊ฒฉ์ด ๋ฐฐ๋ถ๋๊ณ , ๊ฐ์ฅ์๋ฆฌ๋ ์ฌ๋ฐฑ ์์
- ๊ฐ์ฅ์๋ฆฌ ๊ฐ๊ฒฉ ์์
โก space-around
์์ดํ ์ ์ฃผ๋ณ(์๋ค) ์ ๊ท ๋ฑํ ๊ฐ๊ฒฉ์ ์ค๋ค.
์์ดํ ๋ค ์ฌ์ด ๊ฐ๊ฒฉ์ ๋์ผํ์ง๋ง, ์ปจํ ์ด๋ ๊ฐ์ฅ์๋ฆฌ์ ์ฒซ/๋ง์ง๋ง ์์ดํ ๊ฐ ๊ฐ๊ฒฉ์ ์ ๋ฐ์ผ๋ก ๋ฐฐ๋ถ(์ฆ,
์์ดํ ๋ค ๊ฐ์ ๊ฐ๊ฒฉ์ด ๋ ํฌ๋ค)
- ๊ฐ ์์ดํ ์๋ค์ ๊ฐ๊ฒฉ ๋ฐฐ๋ถ, ๊ฐ์ฅ์๋ฆฌ ๊ฐ๊ฒฉ์ ์ ๋ฐ ํฌ๊ธฐ
- ๊ฐ์ฅ์๋ฆฌ ๊ฐ๊ฒฉ ์กด์ฌ (์์ดํ ๊ฐ ๊ฐ๊ฒฉ์ ์ ๋ฐ ํฌ๊ธฐ)
โก space-evenly
์ฃผ์ถ(main axis) ์ ๊ธฐ์ค์ผ๋ก ์์ดํ ๊ฐ ๊ฐ๊ฒฉ๋ฟ ์๋๋ผ ์ปจํ ์ด๋ ๊ฐ์ฅ์๋ฆฌ ๊ฐ ๊ฐ๊ฒฉ๋ ๋์ผํ๊ฒ ๋ฐฐ๋ถ
- ์์ดํ ๊ฐ ๊ฐ๊ฒฉ๊ณผ ๊ฐ์ฅ์๋ฆฌ ๊ฐ ๊ฐ๊ฒฉ์ด ๋์ผ
- ๊ฐ์ฅ์๋ฆฌ ๊ฐ๊ฒฉ ์์ (์์ดํ ๊ฐ ๊ฐ๊ฒฉ๊ณผ ๋์ผ)
1-4. flex-wrap
flex container ์์ ์์ ์์๊ฐ ๋๋ฌด ๋ง์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๊ธฐ๋ณธ์ ์ผ๋ก Flexbox๋ ๋จ์ผ ํ ๋๋ ์ด๋ก ๋ชจ๋ ์์ดํ ์ ๋ฐฐ์นํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์, ์์ดํ ์ด ์ปจํ ์ด๋๋ฅผ ์ด๊ณผํ๋ฉด ํฌ๊ธฐ๋ฅผ ์ค์ด๊ฑฐ๋ ์๋ฆฌ๋ ํ์์ด ๋ฐ์ํ ์ ์๋ค.
flex-wrap์ Flexbox์์ ์์ ์์ดํ
๋ค์ด ๋ถ๋ชจ ์ปจํ
์ด๋์ ๋๋น๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ดํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ์ด๋ด
๋ flex-wrap ์์ฑ์ ์ฌ๋ฌ ์ค๋ก ์์ดํ ์ ๋ฐฐ์นํ๊ฑฐ๋ ๊ฐ๋ ์ฑ๊ณผ ๋ ์ด์์ ์ ์ง๋ฅผ ์ํด ์์ดํ ์ ์๋์ผ๋ก ์ค๋ฐ๊ฟํ ์ ์๋๋ก ํ๋ค.
โก nowarp (๊ธฐ๋ณธ๊ฐ)
๋ชจ๋ ์์ดํ ์ด ํ ์ค์ ๋ฐฐ์น
์์ดํ ์ด ์ปจํ ์ด๋๋ฅผ ์ด๊ณผํ๋๋ผ๋ ๊ฐ์ ๋ก ์ค์ด๋ค๊ฑฐ๋ ์๋ฆฐ๋ค.
nowrap์๋ ์์์์๊ฐ ๋ถ๋ชจ ์์์ ๋๋น๋ฅผ ๋ฐ๋ผ๊ฐ๋ ์์ฑ์ด ์์ด์ ๋ถ๋ชจ ์์์ width๋ฅผ ์ค์ด๋ฉด ์์ ์์๋ค์ ๋๋น๋ ์ค์ด๋ ๋ค.
โก wrap
์์ ์์์ ์ด ๋์ด๊ฐ ๋ถ๋ชจ ์์์ ๋์ด๋ณด๋ค ํด ๋, ๋ถ๋ชจ ์์ ์์ ์์์์๊ฐ ๋ค ๋ค์ด๊ฐ ์ ์๋๋ก ๋ค์ ์ค์ ์ด์ด์ ์ ๋ ฌํ๋ ๊ฒ. flex-direction ๋ฐฉํฅ์ ๋ฐ๋ผ์ ์ ๋ ฌ ์ํ๋ ๋ฌ๋ผ์ง๋ค.
๊ธฐ๋ณธ row ์ผ ๋ ๊ฐ๋กํ ๊ธฐ์ค์ผ๋ก ์์ถ์ธ ์ํ์ผ๋ก ์์ ์์๋ค์ด ์ ๋ ฌ๋๊ณ ๊ต์ฐจ์ถ์ธ ์์ง์ผ๋ก ์์ดํ ๋ค์ด ์์ด๊ฒ ๋๋ค.
๋ฐ๋๋ก ๋ฐฉํฅ์ด ์ธ๋ก ์ด column ์ผ ๋ ์ฃผ์ถ์ธ ์์ง ๋ฐฉํฅ์ผ๋ก ์์ ์์๋ค์ด ์ ๋ ฌ๋๊ณ ๊ต์ฐจ์ถ์ธ ์ํ ๋ฐฉํฅ์ผ๋ก ์์ดํ ๋ค์ด ์์ด๊ฒ ๋๋ค.
โก wrap-reverse
flex-direction์ด row์ผ๋ ๋ฐ๋ฅ ํ์ ์ผ์ชฝ๋ถํฐ ์์ฐจ์ ์ผ๋ก ๋ฐฐ์น๋๊ณ ์๋์์ ์๋ก ์์
flex-direction์ด column์ผ๋ ์ค๋ฅธ์ชฝ๋ถํฐ ์์ดํ ์ด ์ฐจ๋ก๋๋ก ๋ฐฐ์น
2. ์์์์์ ์ ์ฉ๋๋ ์์ฑ
2-1. flex-basis
VSCode์์ ์์์ฝ๋๋ฅผ ์ง ๋ดค๋ค.
๋ง์ฝ ๊ทธ๋ฅ flex item์ height๋ฅผ 40px๋ก ์ ์ฉํ๋ฉด ์ด๋ ๊ฒ ๊ธด ๊ธ์ item ๋ฐ์ค ํฌ๊ธฐ๋ฅผ ๋์ด๊ฐ๋ค.
ํ์ง๋ง height ๋์ flex-basis ์์ฑ์ ๋๋น๋ฅผ 40px๋ก ์ง์ ํด ์ฃผ๋ฉด
์๋์ฒ๋ผ ๊ธ์จ๊ฐ height ๊ฐ์ ๋์ด๊ฐ๋ฉด ์์ดํ ์ ์์ญ์ผ๋ก ๋ชจ๋ ๋ค์ด์ค๊ฒ ๋๋ค.
item ์ ๋๋น๋ฅผ 100px๋ก ์ ํํด ์ฃผ์๋๋ ์์ชฝ ์์๊ฐ ๋ฐ์ผ๋ก ์์ ธ ๋์จ๋ค.
์ ์ํ์์ word-break: break-all; ์ค์ ํด์ฃผ๋ฉด
๋๋น ๊ณ ์ ์ํ๋ก ์์ดํ ์ ์์ชฝ์ผ๋ก ๋ฃ์ด์ค ์ ์๋ค.
โก ๋ง์ฝ flex-basis์ height/width ๊ฐ ๊ฐ์ด ์ฐ์ธ๋ค๋ฉด ?
๋๊ฐ์ ๊ฐ์ด ๋ค๋ฅด๋ฉด ์ฐ์ ์์๋ flex-basis > height/width
๊ฐ์ด ๊ฐ์ผ๋ฉด height/width ๋จผ์ ์ ์ฉ
โก flex-basis: auto; (๊ธฐ๋ณธ)
์ง์ ํด์ค width ๋ height ๊ฐ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ค๋ฅธ ๋ฐ์ค๊ฐ ๋์ด๋ ๋ ๊ฐ์ด ๋์ด๋๋ค. ๋ํ ์ถ๊ฐ๊ณต๊ฐ์ด flex-grow ๊ฐ์ ๋ฐ๋ผ ๋ถ๋ฐฐ๋๋ค.
โก flex-basis: 0;
auto์ผ ๋์๋ ๋ค๋ฅด๊ฒ ๋ด์ฉ ์ฃผ๋ณ์ ์ถ๊ฐ ๊ณต๊ฐ์ด ๊ณ ๋ ค๋์ง ์๋๋ค.
2-2. flex-grow
flex-basis์ ์ฐ๋ํด์ ์ฌ์ฉํ๊ธฐ ์ข์ ์์ฑ
์ฌ์ ๊ณต๊ฐ์ ๋น๋ก์ ์ผ๋ก ๋๋๋ ๋ฐฉ์
flex-grow์ ๊ฐ์ผ๋ก ์์๊ฐ ์ฌ์ฉ x, 0๊ณผ ์์ ์ ์๋ง ๊ฐ๋ฅ. ์์๊ฐ์ ์ค์ ํ๋ฉด 0์ ์ด ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง์ธ ํจ๊ณผ๊ฐ ์ผ์ด๋๋ค.
๋ํ ์ฆ๊ฐ๋๋น์ ๋น์จ์ width์ ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ flex-basis๋ ๊ฐ์ด ์ฐ๋ฉด ์ข๋ค.
์ ์ฒด ์ฌ์ ๊ณต๊ฐ ๊ณ์ฐ
๋จผ์ , ํ๋ ์ค ์ปจํ
์ด๋์ ์ ์ฒด ๋๋น(ํน์ ๋์ด)๋ฅผ ๊ตฌํ๊ณ , ๊ฐ ์์ดํ
์ด ์ฐจ์งํ๋ ๊ธฐ๋ณธ ํฌ๊ธฐ(flex-basis)๋ฅผ ๋ชจ๋ ํฉ์ฐํ๋ค.
์ฌ์ ๊ณต๊ฐ์ ์ปจํ
์ด๋์ ์ ์ฒด ํฌ๊ธฐ์์ ์์ดํ
๋ค์ ๊ธฐ๋ณธ ํฌ๊ธฐ ํฉ์ ๋นผ๋ฉด ๋๋ค.
์ฌ์ ๊ณต๊ฐ ๋๋๊ธฐ
flex-grow ๊ฐ์ ๋น๋กํ์ฌ ์ฌ์ ๊ณต๊ฐ์ ๋ถ๋ฐฐํ๋ค.
๊ฐ ์์ดํ
์ flex-grow ๊ฐ์ด ํด์๋ก, ์ฌ์ ๊ณต๊ฐ์์ ์ฐจ์งํ๋ ๋น์จ์ด ์ปค์ง๋ค.
์ด๋ ๊ฒ ํ๋ ์ค ์์ดํ ์ 1 : 2 : 1 ์ ๋น์จ๋ก flex-grow ๊ฐ์ ๋งค๊ฒผ๋ค๊ณ ํด๋ณด์.
<div class="container">
<div class="item" style="flex-grow: 1;">Item 1</div>
<div class="item" style="flex-grow: 2;">Item 2</div>
<div class="item" style="flex-grow: 1;">Item 3</div>
</div>
.container {
display: flex;
width: 600px; /* ์ปจํ
์ด๋์ ์ ์ฒด ๋๋น */
}
.item {
flex-basis: 100px; /* ๊ธฐ๋ณธ ํฌ๊ธฐ */
background-color: lightblue;
padding: 20px;
text-align: center;
}
1. ์ ์ฒด ๋๋น
์ปจํ ์ด๋์ ์ ์ฒด ๋๋น๋ 600px
2. ๊ฐ ์์ดํ
์ ๊ธฐ๋ณธ ํฌ๊ธฐ ํฉ
Item 1, Item 2, Item 3์ ๊ธฐ๋ณธ ํฌ๊ธฐ๋ ๊ฐ๊ฐ 100px์ด๊ณ ,
์ดํฉ์ 100px + 100px + 100px = 300px
3. ์ฌ์ ๊ณต๊ฐ ๊ณ์ฐ
์ฌ์ ๊ณต๊ฐ = ์ปจํ ์ด๋์ ์ ์ฒด ๋๋น - ๊ธฐ๋ณธ ํฌ๊ธฐ ํฉ
์ฌ์ ๊ณต๊ฐ = 600px - 300px = 300px
4. flex-grow ๋น์จ๋ก ๋๋๊ธฐ
flex-grow ๊ฐ์ ๊ฐ๊ฐ 1, 2, 1์ด๋ค. ๊ฐ ์์ดํ ์ด ์ฐจ์งํ ์ฌ์ ๊ณต๊ฐ์ ๋น์จ๋ก ๋๋์ด์ง๋ค.
flex-grow ๊ฐ์ ์ดํฉ์ 1 + 2 + 1 = 4
5. ์ฌ์ ๊ณต๊ฐ๋ถ๋ฐฐ
Item 1: (1 / 4) * 300px = 75px
Item 2: (2 / 4) * 300px = 150px
Item 3: (1 / 4) * 300px = 75px
6. ๊ฐ ์์ดํ
์ ์ต์ข
ํฌ๊ธฐ
๊ธฐ๋ณธ ํฌ๊ธฐ + ์ฌ์ ๊ณต๊ฐ ํฉ์น ๊ฐ
Item 1: 100px + 75px = 175px
Item 2: 100px + 150px = 250px
Item 3: 100px + 75px = 175px
Item 1๊ณผ Item 3์ ์ฌ์ ๊ณต๊ฐ์์ ๊ฐ๊ฐ 75px์ฉ ์ฐจ์งํ๊ณ ,
Item 2๋ ์ฌ์ ๊ณต๊ฐ์์ ๋ ๋ฐฐ ๋ ๋ง์ 150px์ ์ฐจ์งํฉ๋๋ค.
์ด์ ๊ฐ์ด flex-grow ๊ฐ์ ๋น๋กํ์ฌ ์ฌ์ ๊ณต๊ฐ์ ๋ถ๋ฐฐํ๊ฒ ๋๋ค.
2-3. flex-shrink
๊ฐ ํ๋ ์ค ์์ดํ ์ด ๋ถ์กฑํ ๊ณต๊ฐ์ ์ด๋ป๊ฒ ๋๋์ด ๊ฐ์ง์ง ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ฑ.
์ฝ๊ฒ ๋งํ๋ฉด flex-shrink๋ Flexbox์์ ์์ดํ
์ด ์ค์ด๋๋ ์ ๋๋ฅผ ์ ์ดํ๋ ์์ฑ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Flexbox์์๋ ์์ดํ
๋ค์ด ๊ณต๊ฐ์ ์ถฉ๋ถํ ํ๋ณดํ์ง ๋ชปํ ๋ ์์ดํ
ํฌ๊ธฐ๋ฅผ ์ค์ด๊ฒ ๋๋๋ฐ, ์ด๋ flex-shrink ์์ฑ์ ์ฌ์ฉํ์ฌ ์ค์ด๋๋ ๋น์จ์ ์กฐ์ ํ ์ ์๋ค.
๊ธฐ๋ณธ ๊ฐ์ 1๋ก, ์์ดํ
๋ค์ด ์ด ๊ฐ์ ๋ฐ๋ผ ์ปจํ
์ด๋ ๋ด์์ ์๋์ผ๋ก ์ถ์๋๋ค.
- flex-shrink: 0: ์์ดํ ์ด ์ถ์๋์ง ์๋๋ก ์ค์
- -> ์์ดํ ์ ํฌ๊ธฐ๋ ๊ณ ์ ๋๊ณ , ์ฌ์ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๋๋ ์์ดํ ์ด ์๋ฆฌ๊ฑฐ๋ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํจ
- flex-shrink: 1 (๊ธฐ๋ณธ๊ฐ): ์์ดํ ์ด ์ฌ์ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๋ ๋น๋ก์ ์ผ๋ก ์ค์ด๋ค๋๋ก ์ค์
- flex-shrink: 2: flex-shrink ๊ฐ์ด ์ปค์ง์๋ก, ํด๋น ์์ดํ ์ ๋ ๋ง์ด ์ถ์
CSS ํ์ค์ ๊ด๋ฆฌํ๋ W3C์ ๋ฐ๋ฅด๋ฉด flex-shrink ์์ฑ์ ์ง์ ์ฌ์ฉํ๊ธฐ๋ณด๋ค๋, ์๋์ ๊ฐ์ด flex ์ถ์ฝ ์์ฑ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ์๋ค.
.item {
flex: <flex-grow> <flex-shrink> <flex-basis>;
}
2-4. align-self
align-self๋ Flexbox์์ ์ฌ์ฉ๋๋ ์์ฑ์ผ๋ก, ๊ฐ๋ณ ํ๋ ์ค ์์ดํ ์ ์ธ๋ก ์ ๋ ฌ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ค.
๋ถ๋ชจ ์ปจํ ์ด๋์ align-items ์์ฑ์ด ๋ชจ๋ ํ๋ ์ค ์์ดํ ์ ์ ์ฉ๋๋ ๊ธฐ๋ณธ ์ ๋ ฌ ๋ฐฉ์์ด๋ผ๋ฉด, align-self๋ ํน์ ์์ดํ ์ ๋ํด์๋ง ์ด ๊ฐ์ ์ค๋ฒ๋ผ์ด๋ ํด์ ์ ๋ ฌ์ ๋ค๋ฅด๊ฒ ์ค์ ํ ์ ์๊ฒ ํด์ค๋ค.
2-5. order
order ์์ฑ์ ํ๋ ์ค ์ปจํ
์ด๋์์ ์์ดํ
๋ค์ด ๋ํ๋๋ ์์๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ ์ค ์์ดํ
์ HTML ๋ฌธ์์ ์ ์๋ ์์๋๋ก ๋ฐฐ์น๋์ง๋ง, order ์์ฑ์ ์ฌ์ฉํ๋ฉด ์์ดํ
์ ์์๋ฅผ ์๊ฐ์ ์ผ๋ก๋ง ๋ณ๊ฒฝํ ์ ์๋ค.
๊ธฐ๋ณธ๊ฐ์ 0์ด๊ณ , order ๊ฐ์ด ๋ ์์ ์ซ์๊ฐ ๋จผ์ ํ์๋๊ณ , ๋ ํฐ ์ซ์๊ฐ ๋์ค์ ํ์๋๋ค.
์์, ์์, 0 ๊ฐ์ ์ง์ ํ ์ ์๋ค.
5๊ฐ์ ์์ดํ ์ด ์๋ค๊ณ ํ ๋ ์๋์ ๊ฐ์ด ์ง์ ํด์ฃผ๋ฉด
.item:nth-child(1) {
order: 2; /* ๋ค ๋ฒ์งธ๋ก */
}
.item:nth-child(2) {
order: 1; /* ์ฒซ ๋ฒ์งธ๋ก */
}
.item:nth-child(3) {
order: 3; /* ๋ ๋ฒ์งธ๋ก */
}
.item:nth-child(4) {
order: 4; /* ์ธ ๋ฒ์งธ๋ก */
}
.item:nth-child(5) {
order: 5; /* ์ธ ๋ฒ์งธ๋ก */
}
์๋ ์ด๋ฏธ์ง์ ๋ ๋ฒ์งธ ์ปจํ ์ด๋ ๋ชจ์ต์ผ๋ก ํ๋ฉด์ ๋ฐฐ์น๊ฐ ๋๋ค.
2-6. z-index
z-index๋ CSS ์์ฑ์ผ๋ก, HTML ์์๋ค์ ์์ ์์(stacking order)๋ฅผ ๊ฒฐ์ ํ๋ค. ์ฆ, ํ์ด์ง ์์์ ๊ฒน์น๋ ์ฌ๋ฌ ์์๋ค์ด ์์ ๋, ์ด๋ค ์์๊ฐ ์์ ์ค๊ณ , ์ด๋ค ์์๊ฐ ๋ค์ ์ฌ์ง๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ์ด๋ค. ์ฝ๊ฒ ๋งํด์ ํ๊ธ์ด๋ ํ์ํฌ์ธํธ์์ ์ฌ์ง ๊ฐ์๊ฑฐ ํด๋ฆญํ๋ฉด ์์ฑ์์ ๋งจ ๋ค๋ก ๋ณด๋ด๊ธฐ, ๋งจ ์์ผ๋ก ๋ณด๋ด๊ธฐ ์ด๋ฐ ๊ฑฐ๋ ๊ฐ๋ค. ๋ค๋ฅธ ์์๋ค๊ณผ์ ๋ฐฐ์น์์ ์ด๋ค ๊ฒ์ด ๋ ์๋ก ์ค๊ณ ์ด๋ค ๊ฒ์ด ๋ ๋ค๋ก ๊ฐ ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.
z-index๋ฅผ ์ดํดํ๊ธฐ ์ํด์ ๋จผ์ , ์์ ๋งฅ๋ฝ(Stacking Context)์ ๊ฐ๋ ์ ์ดํดํด์ผ ํ๋ค. ์์ ๋งฅ๋ฝ์ด๋, HTML ์์๋ค์ ์ฌ์ฉ์๋ฅผ ๋ฐ๋ผ๋ณด๋ ๊ธฐ์ค์ผ๋ก ๊ฐ์์ z์ถ์ ์์ฑํ์ฌ 3์ฐจ์ ๊ฐ๋ ์ผ๋ก ๋ณด๋ ๊ฒ ์ด๋ค. ๋ฐ๋ผ์, ์์ ๋งฅ๋ฝ์ ํ์ฑํ๋ค๋ ๊ฒ์ ์์ ๋ง์ 3์ฐจ์ ๊ณต๊ฐ์ ํ์ฑํ๋ ๊ฒ์ด๋ฉฐ ๊ทธ ์์๋ค์ ์ฐ์ ์์๋ฅผ z-index๊ฐ ์ ํ๊ฒ ๋๋ ์๋ฆฌ์ด๋ค.
z-index ์์ฑ
z-index๋ ์ ์๊ฐ์ ๊ฐ์ง๋ฉฐ, ์์, 0, ์์ ๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
๊ฐ์ด ํด์๋ก ์์ชฝ(์์)์ ํ์๋๊ณ , ๊ฐ์ด ์์์๋ก ๋ค์ชฝ(ํ์)์ ํ์๋ฉ๋๋ค.
๋ค์ชฝ์ ํ์๋๋ฉด ์ ์์์ ์ํด ๊ฐ๋ ค์ง๋ค.
z-index๋ํฌ์ง์
๋๋ ์์(positioned elements)์๋ง ์ ์ฉ๋๋ค. ์ฆ, position์ด absolute, relative, fixed, sticky์ธ ์์์๋ง ํจ๊ณผ๊ฐ ์๋ค.
์ถ์ฒ ๋ธ๋ก๊ทธ
https://studiomeal.com/archives/197
https://studiomeal.com/archives/533