๐ผ ์ค๋์ CSS์ ๊ฝ์ด๋ผ ๋ถ๋ฆฌ๋ Flexbox์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ๐ผ
1. Flexbox ์ฌ์ฉํ๋ ์ด์
flexbox๊ฐ ๋ฑ์ฅํ๊ธฐ ์ ์๋ ๋ธ๋ผ์ฐ์ ์์์ ์์๋ค์ ๋ฐฐ์นํ๊ธฐ ์ํด float ์์ฑ์ ์ฌ์ฉํ์ต๋๋ค. float์ ํ ์์(element)๊ฐ ๋ณดํต ํ๋ฆ(normal flow)์ผ๋ก๋ถํฐ ๋น ์ ธ ํ ์คํธ ๋ฐ ์ธ๋ผ์ธ(inline) ์์๊ฐ ๊ทธ ์ฃผ์๋ฅผ ๊ฐ์ธ๋ ์๊ธฐ ์ปจํ ์ด๋์ ์ข์ฐ์ธก์ ๋ฐ๋ผ ๋ฐฐ์น๋์ด์ผ ํจ์ ์ง์ ํฉ๋๋ค. float ์์ฑ์ ๊ฐ์๋ left / none / right๊ฐ ์์ต๋๋ค.
left๋ ์ด๋ฏธ์ง๋ฅผ ์ผ์ชฝ์ ๋ฐฐ์นํ๊ณ ๋๋จธ์ง ๊ณต๊ฐ์ ํ ์คํธ๋ฅผ ๋ฐฐ์นํฉ๋๋ค.
float์ ํ ์คํธ์ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ์นํ๊ธฐ ์ํ ์์ฑ์ผ๋ก, ํ ์คํธ์ ์ด๋ฏธ์ง๊ฐ ์๋ ์์๋ฅผ ๋ฐฐ์นํ๊ธฐ ์ํด float๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์๋์ ๋ง์ง ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ค ์์ฑ์ ์ฌ์ฉํด์ ์์๋ค์ ์ ์ฐํ๊ฒ ๋ฐฐ์นํ ์ ์์๊น์? ๋ฐ๋ก flexbox ์ ๋๋ค. flexbox์ ๊ฐ๋ ๊ณผ ์์ฑ์๋ ๋ฌด์์ด ์๋์ง ํจ๊ป ์ดํด ๋ด ์๋ค.
2. Flexbox ๊ธฐ๋ณธ ๊ฐ๋
flexbox๋ ์ปจํ ์ด๋์ ์์ดํ ๋ค์ ์์ ์์ฌ๋ก ํ, ์ด์ ๋ฐฐ์นํ ์ ์๊ฒ ํด์ค๋๋ค. ์๋ฅผ ๋ค์ด ์ปจํ ์ด๋ ์์ ์์ดํ ๋ค์ ๋์ผํ ๊ฐ๊ฒฉ์ผ๋ก ๋ฐฐ์นํ๊ฑฐ๋ ์ํ๋ ๊ธฐ์ค์ผ๋ก ์์๋ค์ ์ ๋ ฌํ ์ ์์ต๋๋ค. flexbox๋ฅผ ์ ๋๋ก ์ดํดํ๊ธฐ ์ํด์๋ ํ์ฌ์ ์ค์ฌ์ถ์ด ๋ฌด์์ธ์ง ์์์ผ ํฉ๋๋ค. ์์๋ค์ด ์ ๋ ฌ๋๋ ๋ฐฉํฅ์ด ์ค์ฌ์ถ(main axis)์ด ๋๊ณ , ๊ทธ ๋ฐ๋์ ์์ง์ถ์ด ๋ฐ๋์ถ(cross axis)์ด ๋ฉ๋๋ค. flexbox์์์ ๋ ๋ค๋ฅธ ์ค์ํ ๊ฐ๋ ์ container์ item ์ ๋๋ค. container๋ ์์ดํ ๋ค์ ๊ฐ์ธ๊ณ ์๋ ์์ ์์๋ฅผ ์๋ฏธํ๊ณ , item์ container์ ์์ ์์๋ฅผ ์๋ฏธํฉ๋๋ค. ์ปจํ ์ด๋์ ์์ดํ ๊ฐ๊ฐ์์ ์ง์ ํ ์ ์๋ ์์ฑ์๋ ๋ฌด์์ด ์๋์ง ์์ ๋ด ์๋ค.
3. container ์์ฑ
display: flex๊ฐ ์ค์ ๋ ๋ถ๋ชจ ์์๋ฅผ ์ผ์ปฌ์ด flex container๋ผ๊ณ ํฉ๋๋ค.
์ปจํ ์ด๋์ ์ง์ ํ ์ ์๋ ์์ฑ์๋ ๋ค์์ด ์์ต๋๋ค.
* display
๋จผ์ ์ด๋ค ์์๋ค์ flexbox๋ก ๋ ์ด์์ํ ์ง ์ ํํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ์ํฅ์ ์ฃผ๊ณ ์ถ์ ์์์ ๋ถ๋ชจ ์์์ display ์์ฑ๊ฐ์ flex๋ผ๊ณ ์ง์ ํฉ๋๋ค.
.container {
display: flex;
}
* flex-direction
flex-direction ์์ฑ์ ์์ flexbox๋ค์ด ์ปจํ ์ด๋ ๋ด๋ถ์ ๋ฐฐ์น๋๋ ๋ฐฉํฅ์ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ row์ด๊ณ ์ค์ฌ์ถ(main axis)์ด ์ํ์ถ์ด ๋ฉ๋๋ค. ์์ดํ ๋ค์ด ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ๋ฐฐ์น๋ฉ๋๋ค.
flex-direction: column;
flex-direction์ column์ผ๋ก ์ค์ ํ๋ฉด ์ค์ฌ์ถ์ด ์์ง์ถ์ด ๋๊ณ , ์์ดํ ๋ค์ด ์ปจํ ์ด๋ ๋ด๋ถ์์ ์์์ ์๋ ๋ฐฉํฅ์ผ๋ก ๋ฐฐ์น๋ฉ๋๋ค.
๐ ์ฐธ๊ณ
row-reverse์ column-reverse ์์ฑ๊ฐ์ ์ฌ์ฉํ์ฌ ์ญ๋ฐฉํฅ์ผ๋ก ๋ฐฐ์นํ ์ ์์ต๋๋ค.
row-reverse๋ ์์ดํ ๋ค์ด ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๋ฐฐ์น๋๊ณ column-reverse๋ ์์ดํ ๋ค์ด ์๋์์ ์๋ก ๋ฐฐ์น๋ฉ๋๋ค.
(๋ ์์ฑ ๋ชจ๋ ์์ดํ ๋ค์ ์์๊ฐ ๋ค๋ฐ๋๋๋ค.)
* flex-wrap
๊ธฐ๋ณธ๊ฐ์ no-wrap์ผ๋ก, ์ฐฝ์ ํฌ๊ธฐ์ ์๊ด์์ด ์์ดํ ๋ค์ด ํ ์ค์ ๋นผ๊ณกํ ๋ฐฐ์น๋ฉ๋๋ค.
flex-wrap: wrap;
์์ฑ๊ฐ์ wrap์ผ๋ก ์ค์ ํ๋ฉด ์ฐฝ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์์ดํ ๋ค์ด ์๋์ผ๋ก ๋ค์ ๋ผ์ธ์ผ๋ก ๋์ด๊ฐ๋๋ก ๋ฐฐ์น๋ฉ๋๋ค.
* flex-flow
flex-direction๊ณผ flex-wrap์ ํ ์ค๋ก ์์ฑํ ์ ์์ต๋๋ค.
์๋์ ์ฝ๋๋ฅผ
flex-direction: row;
flex-wrap: wrap;
๋ค์์ผ๋ก ๋์ฒดํ ์ ์์ต๋๋ค.
flex-flow: row wrap;
* justify-content
์ค์ฌ์ถ์ ๊ธฐ์ค์ผ๋ก ์์ดํ ๋ค์ ์ด๋ป๊ฒ ๋ฐฐ์นํ ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ flex-start๋ก, ์์ดํ ๋ค์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ๋ฐฐ์นํฉ๋๋ค.
justify-content: flex-end;
flex-end ์์ฑ๊ฐ์ ์ ํด์ง ์์น์ ๋ฐ๋ ์์น์์๋ถํฐ ์ ๋ ฌ๋ฉ๋๋ค. ์ด ๋, ์์ดํ ๋ค์ ์์๋ ์๋ณธ์ ์ ์งํฉ๋๋ค.
justify-content: center;
center ์์ฑ๊ฐ์ ์์ดํ ๋ค์ด ์ค์ฌ์ถ์ ์ค์์ ์ ๋ ฌ๋ฉ๋๋ค.
justify-content: space-around;
space-around ์์ฑ๊ฐ์ ์ฒ์๊ณผ ๋์ ์์นํ ์์ดํ ์ ์ ์ธํ ๊ทธ ์ฌ์ด์ ์์ดํ ๋ค์ด ๊ฐ์ ๊ฐ๊ฒฉ์ ์ ์งํ๋ฉฐ ๋ฐฐ์น๋ฉ๋๋ค.
justify-content: space-evenly;
space-evenly ์์ฑ๊ฐ์ ๋ชจ๋ ์์ดํ ๋ค์ ๊ฐ๊ฒฉ์ด ๋์ผํ๊ฒ ๋ฐฐ์น๋ฉ๋๋ค.
justify-content: space-between;
space-between ์์ฑ๊ฐ์ ์ฒ์๊ณผ ๋์ ์์นํ ์์ดํ ์ ์ปจํ ์ด๋์ ์์ชฝ ๋์ ๋ฐฐ์น๋๊ณ , ๊ทธ ์ฌ์ด์ ์์ดํ ๋ค์ ๊ฐ์ ๊ฐ๊ฒฉ์ ์ ์งํ๋ฉฐ ๋ฐฐ์น๋ฉ๋๋ค.
* align-items
๋ฐ๋์ถ์ ๊ธฐ์ค์ผ๋ก ์์ดํ ๋ค์ ์ด๋ป๊ฒ ๋ฐฐ์นํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ strech๋ก, ์์ดํ ๋ค์ด ์ปจํ ์ด๋ ํฌ๊ธฐ์ ๋ง๊ฒ ์ฐ์ฅ๋ฉ๋๋ค.
align-items: center;
center ์์ฑ๊ฐ์ ์์ดํ ๋ค์ด ๋ฐ๋์ถ์ ์ค์์ ์ ๋ ฌ๋ฉ๋๋ค.
align-items: baseline;
baseline ์์ฑ๊ฐ์ ์์ดํ ๋ค์ ํฌ๊ธฐ๊ฐ ๋ค๋ฅด๋๋ผ๋ ๋ชจ๋ ์์ดํ ๋ค์ ํ ์คํธ ์์น๊ฐ ๋์ผํ๊ฒ ๋ฐฐ์น๋ฉ๋๋ค.
* align-content
๋ฐ๋์ถ์ ๊ธฐ์ค์ผ๋ก ์์ดํ ์ ์ด๋ป๊ฒ ๋ฐฐ์นํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ์ค์ฌ์ถ์ ๊ธฐ์ค์ผ๋ก ์์ดํ ๋ค์ ๋ฐฐ์นํ๋ justify-content์ ๋์ผํ ์์ฑ๊ฐ์ ๊ฐ์ง๋๋ค.
4. item ์์ฑ
flex container ๋ด๋ถ์ flexbox๋ก ๋ ์ด์์๋๋ ํญ๋ชฉ์ ์ผ์ปฌ์ด flex item์ด๋ผ๊ณ ํฉ๋๋ค.
์์ดํ ์ ์ง์ ํ ์ ์๋ ์์ฑ์๋ ๋ค์์ด ์์ต๋๋ค.
* order
์์ดํ ์ ์์๋ฅผ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๋ชจ๋ flex item๋ค์ ๊ธฐ๋ณธ๊ฐ์ 0์ ๋๋ค. ๋ง์ด ์ฌ์ฉ๋์ง ์๋ ์์ฑ์ผ๋ก, ์์ดํ ๋ค์ ์์๋ฅผ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด HTML ์ฝ๋ ๋ด์์ ์์ ํฉ๋๋ค.
* flex-grow
์ฐฝ์ ํฌ๊ธฐ๊ฐ ์ปค์ง ๋ ์์ดํ ๋ค์ด ์ง์ ๋ ์ซ์๋งํผ ์ปจํ ์ด๋์ ๊ณต๊ฐ์ ์ฑ์๋๋ค. ๋ชจ๋ flex item๋ค์ ๊ธฐ๋ณธ๊ฐ์ 0์ผ๋ก, ์ฐฝ์ ํฌ๊ธฐ์ ์๊ด์์ด ์์ดํ ๋ค์ ํฌ๊ธฐ๊ฐ ์ผ์ ํฉ๋๋ค.
.item1 {
flex-grow: 2;
}
.item2 {
flex-grow: 1;
}
.item3 {
flex-grow: 1;
}
์ฐฝ์ ํฌ๊ธฐ๊ฐ ์ปค์ง์ ๋ฐ๋ผ item1์ ํฌ๊ธฐ๊ฐ item2์ item3 ํฌ๊ธฐ์ 2๋ฐฐ๋งํผ ์ปค์ง๋๋ค.
* flex-shrink
์ฐฝ์ ํฌ๊ธฐ๊ฐ ์์์ง ๋ ์์ดํ ๋ค์ด ์ง์ ๋ ์ซ์๋งํผ ์ปจํ ์ด๋์ ๊ณต๊ฐ์ ์ฑ์๋๋ค. ๋ชจ๋ flex item๋ค์ ๊ธฐ๋ณธ๊ฐ์ 0์ผ๋ก, ์ฐฝ์ ํฌ๊ธฐ์ ์๊ด์์ด ์์ดํ ๋ค์ ํฌ๊ธฐ๊ฐ ์ผ์ ํฉ๋๋ค.
.item1 {
flex-shrink: 2;
}
.item2 {
flex-shrink: 1;
}
.item3 {
flex-shrink: 1;
}
์ฐฝ์ ํฌ๊ธฐ๊ฐ ์์์ง์ ๋ฐ๋ผ item1์ ํฌ๊ธฐ๊ฐ item2์ item3 ํฌ๊ธฐ์ 2๋ฐฐ๋งํผ ์์์ง๋๋ค.
* flex-basis
์์ดํ ๋ค์ด ์ปจํ ์ด๋์ ๊ณต๊ฐ์ ์ผ๋งํผ ์ฐจ์งํด์ผ ํ๋์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ auto๋ก, flex-grow์ flex-shrink์ ์ง์ ๋ ๊ฐ์ ๋ฐ๋ผ ๋ณํ๋ฉ๋๋ค.
.item1 {
flex-basis: 60%;
}
.item2 {
flex-basis: 30%;
}
.item3 {
flex-basis: 10%;
}
์ฐฝ์ ํฌ๊ธฐ๊ฐ ๋ณํจ์ ๋ฐ๋ผ item1, item2, item3์ ๋น์จ์ด 6:3:1๋ก ๋ณํ๋ฉ๋๋ค.
* flex
flex-grow, flex-shrink, flex-basis๋ฅผ ํ ์ค๋ก ์์ฑํ ์ ์์ต๋๋ค.
์๋์ ์ฝ๋๋ฅผ
.item1 {
flex-grow: 2;
flex-shrink: 2;
flex-basis: auto;
}
๋ค์์ผ๋ก ๋์ฒดํ ์ ์์ต๋๋ค.
.item1 {
flex: 2 2 auto;
}
* align-slef
ํ๋์ ์์ดํ ๋ง ๋ฐ๋ก ์ ๋ ฌํ ์ ์์ต๋๋ค.
.item1 {
align-self: center;
}
item1๋ง ๋ฐ๋์ถ์ ๊ธฐ์ค์ผ๋ก ์ค์ ์ ๋ ฌ๋ฉ๋๋ค.
5. Flexbox ์ฐ์ต
flexbox์ ๊ฐ๋ ๊ณผ container, item ๊ฐ๊ฐ์์ ์ง์ ํ ์ ์๋ ์์ฑ์ ๋ํด ์์ ๋ณด์์ต๋๋ค.
๊ท์ฌ์ด ๊ฒ์์ ํตํด flexbox๋ฅผ ์ ์ดํดํ๋์ง ํ์ธํด ๋ณด์ธ์! ๐ธ
'CSS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
relative vs absolute ๊ฐ๋ ๋น๊ต (0) | 2021.03.03 |
---|---|
์์ฃผ ์ฐ์ด๋ CSS ์์ฑ๋ค (0) | 2021.01.28 |
CSS์ด๋ ๋ฌด์์ผ๊น ๐ธ (0) | 2021.01.15 |