-
๐จ CSS 2 | Flexbox (with ๋๋ฆผ์ฝ๋ by ์จ๋ฆฌ) 1ํCSS 2021. 12. 17. 17:32
Step 1: Background
flexbox๊ฐ ์๊ธฐ ์ ์๋ float, position, table์ ์ฌ์ฉํด์ ํ๋ํ๋ ๋ฐฐ์น๋ฅผ ํด์ฃผ์๋ค.
์๋ฅผ ๋ค์ด float์ ๊ฒฝ์ฐ๋ ๋ณธ๋ฌธ๊ณผ ์ฌ์ง์ ํจ๊ป ๋ฐฐ์นํ ๋ ์ฌ์ง์ ์์น๋ฅผ left , center, right ์ผ๋ก ์กฐ์ ํด์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณธ๋ฌธ์ ๋ค์ ๋ ๋๋ ์ ํ๋๋ ์ค๋ฅธ์ชฝ์ ๋๋จธ์ง ํ๋๋ float์ ์ฌ์ฉํด ์๋์ ๋ฐฐ์นํด์ฃผ์๋ค.
.img { float : left }
float ์ ์๋ ๋ชฉ์ ์ ํ ์คํธ์ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ์นํ๋ ๊ฒ์ด์์ง๋ง, ์๋ ๋ชฉ์ ์์ ๋ฒ์ด๋๊ฒ ๋์๊ณ , ์ฝ๋๋ ๋ณต์กํด์ก๋ค. flexbox๊ฐ ๋ฑ์ฅํ๊ฒ ๋๋ฉด์ float์ ์๋ ๋ชฉ์ ์ผ๋ก๋ง ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค.
Step 2 : Flexbox
Flexbox layout ๋ชจ๋(Flexbox)์ ๋ฐ์ค์ ์์ดํ ๋ค์ ์์ ์์ฌ๋ก ์ด๊ณผ ํ์ผ๋ก ๋ฐฐ์นํ ์ ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ์ด๋ค. ์น์ฌ์ดํธ ๋ ์ด์์์ ํ ๋ ์ฌ์ฉํ๋ฉด ํจ์ฌ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ฐฐ์น๋ฅผ ํ ์ ์๋ค.
flexbox์์ ์ด 2๊ฐ์ง๋ฅผ ๊ฐ์ฅ ๋จผ์ ์๊ณ ์์ด์ผ ํ๋ค.
1. Flexbox๋ ํฌ๊ฒ container์ ์ฃผ๋ ์์ฑ๊ณผ item๋ค์๊ฒ ์ฃผ๋ ์์ฑ์ผ๋ก ๋๋๋ค.
container ์ ๊พธ๋ฉฐ์ค ์ ์๋ ์์ฑ๋ค
- display
- flex-direction
- flex-wrap
- felx-flow
- justify-content
- align-items
- align-content
item ์ ๊พธ๋ฉฐ์ค ์ ์๋ ์์ฑ๋ค
- order
- flex-grow
- flex-shrink
- flex
2. Flexbox๋ ํฌ๊ฒ ์ค์ฌ์ถ๊ณผ ๋ฐ๋์ถ์ด ์๋ค.
main-axis๋ ์์ดํ ๋ค์ด ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋์ด๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด ๋ ์ค์ฌ์ถ์ ์ํ์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋์ถ์ ์์ง์ ์ด ๋๋ค.
๋ฐ๋๋ก cross-axis์์๋ ์์ดํ ๋ค์ด ์์์ ์๋๋ก ๋์ด๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด ๋ ์ค์ฌ์ถ์ ์์ง์ ์ด๊ณ ๋ฐ๋์ถ์ ์ํ์ ์ด ๋๋ค.
Step 3 : Flexbox ๋ถ๋ชจ์๊ฒ ์ค ์ ์๋ ์์ฑ๋ค (container)
๋จผ์ item๋ค์ ์์ฑํด์ฃผ์.
index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="style.css" /> <title></title> </head> <body> <div class="container"> <div class="item item1">1</div> <div class="item item2">2</div> <div class="item item3">3</div> <div class="item item4">4</div> <div class="item item5">5</div> <div class="item item6">6</div> <div class="item item7">7</div> <div class="item item8">8</div> <div class="item item9">9</div> <div class="item item10">10</div> </div> </body> </html>
container์์ 10๊ฐ์ div ์์ดํ ๋ค์ ๋ฃ์ด์ฃผ์๋ค.
style.css
.container { background-color: beige; height: 100vh; } .item { width: 40px; height: 40px; } .item1 { background-color: rgb(247, 114, 114); } .item2 { background-color: rgb(250, 134, 153); } .item3 { background-color: rgb(165, 100, 250); } .item4 { background-color: rgb(129, 103, 255); } .item5 { background-color: rgb(83, 178, 255); } .item6 { background-color: rgb(67, 155, 94); } .item7 { background-color: rgb(162, 233, 168); } .item8 { background-color: rgb(243, 231, 123); } .item9 { background-color: rgb(250, 170, 21); } .item10 { background-color: rgb(255, 79, 79); }
- display
flexbox ๋ ์ด์์์ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ flexbox๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค๊ณ ์๋ ค์ค์ผ ํ๋ค.
style.css
.container { background-color: beige; height: 100vh; display: flex; } ...
- flex-direction
row (default) : ์์ดํ ๋ค์ด ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐฐ์น๋๋ค.
์ค์ฌ์ถ : row, ๋ฐ๋์ถ : column
.container { background-color: beige; height: 100vh; display: flex; flex-direction: row; } ...
row-reverse : ์์ดํ ๋ค์ด ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๋ฐฐ์น๋๋ค.
์ค์ฌ์ถ : row, ๋ฐ๋์ถ : column
.container { background-color: beige; height: 100vh; display: flex; flex-direction: row-reverse; } ...
column : ์์ดํ ๋ค์ด ์์์ ์๋๋ก ๋ฐฐ์น๋๋ค.
์ค์ฌ์ถ : column, ๋ฐ๋์ถ : row
.container { background-color: beige; height: 100vh; display: flex; flex-direction: column; } ...
column-reverse : ์์ดํ ๋ค์ด ์๋์์ ์๋ก ๋ฐฐ์น๋๋ค.
์ค์ฌ์ถ : column, ๋ฐ๋์ถ : row
.container { background-color: beige; height: 100vh; display: flex; flex-direction: column-reverse; } ...
- flex-wrap
nowrap(default) : ๋ชจ๋ ์์ดํ ๋ค์ด ํ ์ค์ ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-direction: row-reverse; flex-wrap : nowrap; } ...
wrap : ์์ดํ ๋ค์ด ์๋ ์ค ๋ฐ๊ฟ๋์ด ์์์ ์๋๋ก ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-direction: row-reverse; flex-wrap : wrap; } ...
wrap-reverse : ์์ดํ ๋ค์ด ์๋ ์ค ๋ฐ๊ฟ๋์ด ์๋์์ ์๋ก ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-direction: column-reverse; flex-wrap : wrap-reverse; } ...
- felx-flow
border์ ์์ฑ๊ฐ์ ์ง์ ํด์ค ๋ border : 1px solid black ์ผ๋ก ํ ๋ฒ์ ์ง์ ํด ์ค ์ ์๋ค.
์ด์ฒ๋ผ flex-flow๋ฅผ ์ด์ฉํ๋ฉด flex-direction๊ณผ flex-wrap์ ํ ๋ฒ์ ์ง์ ํด ์ค ์ ์๋ค.
.container { background-color: beige; height: 100vh; display: flex; /* flex-direction: column-reverse; flex-wrap : wrap-reverse; */ flex-flow : row-reverse wrap } ...
- justify-content
์ค์ฌ์ถ์ ๊ธฐ์ค์ผ๋ก ์์ดํ ์ ์ด๋ป๊ฒ ๋ฐฐ์นํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ ์ ์๋ค.
flex-start(default) : ์ค์ฌ์ถ์ ์์๋ถํฐ ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row nowrap; justify-content : flex-start; } ...
flex-end : ์ค์ฌ์ถ์ ๋๋ถํฐ ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row nowrap; justify-content : flex-end; } ...
flex-direction์ด ์์ดํ ์ ์์๋ฅผ ๋ฐ๊ฟ์คฌ๋ค๋ฉด justify-content๋ ์์ดํ ์ ์์๋ ์ ์ง๋ ์ฑ ์ด๋๋ง ํ๋ค.
center : ์ถ์ ์ค์์ ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row nowrap; justify-content : center; } ...
space-around : ๋์ผํ ๊ฐ๊ฒฉ์ ๊ฐ๊ณ ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row nowrap; justify-content : space-around; } ...
space-evenly : space-around์ ๋ค๋ฅด๊ฒ ์์ชฝ ๋๋ ๋์ผํ ๊ฐ๊ฒฉ์ ๊ฐ์ง๊ณ ์๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row nowrap; justify-content : space-evenly; } ...
space-between : ์์ชฝ ๋์ ๊ณต๊ฐ ์์ด ์ค๊ฐ ์์ดํ ๋ค๋ง ๊ณต๊ฐ์ ๊ฐ๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row nowrap; justify-content : space-between; } ...
- align-items
justify-content๊ฐ ์ค์ฌ์ถ์์ ์์ดํ ๋ฐฐ์น๋ฅผ ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ด์๋ค๋ฉด, align-items๋ ๋ฐ๋์ถ์์ ์์ดํ ๋ฐฐ์น๋ฅผ ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ๋ค.
flex-start : ์์ดํ ์ด ๋ฐ๋์ถ์ ์์์ ์ ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row nowrap; justify-content : space-between; align-items : flex-start; } ...
flex-end : ์์ดํ ์ด ๋ฐ๋์ถ์ ๋์ ์ ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row nowrap; justify-content : space-between; align-items : flex-end; } ...
center : ์์ดํ ์ด ๋ฐ๋์ถ์ ์ค์ฌ์ ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row nowrap; justify-content : space-between; align-items : center; } ...
baseline : ์์ดํ ๋ค์ ์ค์์ ๊ธฐ์ค์ผ๋ก ๋ฐ๋์ถ์ ์์์ ์ ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row nowrap; justify-content : space-between; align-items : baseline; } ...
align-content
๋ฐ๋์ถ์ ๊ธฐ์ค์ผ๋ก ์์ดํ ๋ค์ ๋ฐฐ์น๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค.
flex-start : container์ ์์์ ์์ดํ ๋ค์ด ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row wrap; justify-content : space-between; align-items : baseline; align-content : flex-start; } ...
flex-end : container์ ๋์ ์์ดํ ๋ค์ด ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row wrap; justify-content : space-between; align-items : baseline; align-content : flex-end; } ...
center : container์ ์ค์์ ์์ดํ ๋ค์ด ๋ฐฐ์น๋๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row wrap; justify-content : space-between; align-items : baseline; align-content : center; } ...
space-between : ์์ชฝ๊ณผ ์๋์ชฝ์ ์์นํ ์์ดํ ๋ค์ space-between ์์ฑ์ ๋ฐ๋ผ ์์ ๋ฑ ๋ถ์ด์๊ณ ์ค๊ฐ ์์ดํ ๋ค์ space๊ฐ ๋ค์ด๊ฐ ์๋ค.
.container { background-color: beige; height: 100vh; display: flex; flex-flow : row wrap; justify-content : space-between; align-items : baseline; align-content : space-between; } ...
step 4๋ถํฐ๋ 2ํ์...
[์ฐธ๊ณ ์๋ฃ]
'CSS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐จ CSS 6 | ๊ทธ๋ฆฌ๋(with ๋๋ฆผ์ฝ๋ by ์จ๋ฆฌ) 2ํ (0) 2022.09.09 ๐จ CSS 5 | ๊ทธ๋ฆฌ๋(with ๋๋ฆผ์ฝ๋ by ์จ๋ฆฌ) 1ํ (0) 2022.09.09 ๐จ CSS 4 | Flexbox (with ๋๋ฆผ์ฝ๋ by ์จ๋ฆฌ) 2ํ (0) 2022.09.05 ๐จ CSS 3 | CSS ๋จ์ ( %, em, rem, vw, vh ) (0) 2021.12.17 ๐จ CSS 1 | CSS layout (display, position) (0) 2021.12.16