๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปWEB FrontEnd/๋ฐ˜์‘ํ˜• ์›น

Flex

1. Flex

  • ๋ฐ•์Šค์˜ ๋ฐฐ์น˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ž์œ ๋กญ๊ฒŒ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋˜ ๊ธฐ์กด์˜ ์†์„ฑ๋“ค๊ณผ ๋‹ฌ๋ฆฌ, ํ”Œ๋ ‰์Šค๋Š” ๋ฐ•์Šค ์š”์†Œ๋“ค์„ ๋‹ค์–‘ํ•˜๊ณ  ์ž์œ ๋กญ๊ฒŒ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Flexible Box, Flexbox๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

 

1) Container์™€ Item

ํ”Œ๋ ‰์Šค๋Š” ํ”Œ๋ ‰์Šค ์ปจํ…Œ์ด๋„ˆ์™€ ํ”Œ๋ ‰์Šค ์•„์ดํ…œ๋กœ ์ด๋ค„์ ธ ์žˆ๊ณ , ์ปจํ…Œ์ด๋„ˆ์™€ ์•„์ดํ…œ์— ์ ์šฉํ•˜๋Š” ์†์„ฑ์ด ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋‹ค.

 

- ํ”Œ๋ ‰์Šค์˜ ์ถ•

๋ฉ”์ธ์ถ•(Main Axis) : ์•„์ดํ…œ๋“ค์ด ๋ฐฐ์น˜๋œ ๋ฐฉํ–ฅ

์ˆ˜์ง์ถ• ๋˜๋Š” ๊ต์ฐจ์ถ•(Cross Axis) : ๋ฉ”์ธ์ถ•๊ณผ ์ˆ˜์ง์ธ ์ถ•

 

- ํ”Œ๋ ‰์Šค ์ปจํ…Œ์ด๋„ˆ(Flex Container)

์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”Œ๋ ‰์Šค ์•„์ดํ…œ์„ ํฌํ•จํ•œ ๋ถ€๋ชจ ์—ญํ• ์„ ํ•œ๋‹ค.

์†์„ฑ ์„ค๋ช… ์†์„ฑ๊ฐ’
display   flex : ๋ธ”๋ก ์ˆ˜์ค€์˜ ํ”Œ๋ ‰์„œ๋ธ” ๋ฐ•์Šค
inline-flex : ์ธ๋ผ์ธ ์ˆ˜์ค€์˜ ํ”Œ๋ ‰์„œ๋ธ” ๋ฐ•์Šค
flex-direction ๋ฉ”์ธ์ถ•์˜ ๋ฐฉํ–ฅ ์„ค์ • row(๊ธฐ๋ณธ๊ฐ’) | column
row-reverse | column-reverse
flex-wrap ๋ฐ•์Šค๊ฐ€ ๋‹ค์Œ ์ค„๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋ฐฉ์‹ nowrap(๊ธฐ๋ณธ๊ฐ’) : ์ค„๋ฐ”๊ฟˆ ํ•˜์ง€ ์•Š์Œ.
wrap : ์ค„๋ฐ”๊ฟˆ์„ ํ•จ.
wrap-reverse : ์ค„๋ฐ”๊ฟˆ์„ ํ•˜๋Š”๋ฐ, ์•„์ดํ…Œ์„ ์—ญ์ˆœ์œผ๋กœ ๋ฐฐ์น˜
flex-flow flex-direction๊ณผ flex-wrap์„ ํ•œ๊บผ๋ฒˆ์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ถ• ์†์„ฑ
flex-direction, flex-wrap์˜ ์ˆœ์œผ๋กœ ํ•œ ์นธ ๋–ผ๊ณ  ์†์„ฑ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
justify-content ๋ฉ”์ธ์ถ• ๋ฐฉํ–ฅ ์„ค์ • flex-start(๊ธฐ๋ณธ๊ฐ’) | flex-end | center
space-between | space-around space-evenly
align-items ์ˆ˜์ง์ถ• ๋ฐฉํ–ฅ ์„ค์ • stretch : ์•„์ดํ…œ๋“ค์ด ์ˆ˜์ง์ถ• ๋ฐฉํ–ฅ์œผ๋กœ ๋๊นŒ์ง€ ๋Š˜์–ด๋‚œ๋‹ค.
flex-start | flex-end | center
baseline : ์•„์ดํ…œ๋“ค์„ ํ…์ŠคํŠธ ๋ฒ ์ด์Šค๋ผ์ธ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
align-content ์—ฌ๋Ÿฌ ํ–‰ ์ •๋ ฌ
flex-wrap: wrap;์ด ์„ค์ •๋œ ์ƒํƒœ์—์„œ, ์•„์ดํ…œ๋“ค์˜ ํ–‰์ด 2์ค„ ์ด์ƒ ๋˜์—ˆ์„ ๋•Œ์˜ ์ˆ˜์ง์ถ• ๋ฐฉํ–ฅ ์ •๋ ฌ์„ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ
stretch
flex-start | flex-end | center
space-between | space-around space-evenly

 

- ํ”Œ๋ ‰์Šค ์•„์ดํ…œ(Flex Item)

ํ”Œ๋ ‰์Šค ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ์œ„์น˜ํ•˜๋ฉด์„œ ๋ฐ•์Šค ํ•˜๋‚˜ ํ•˜๋‚˜์˜ ๋ชจ์–‘์„ ๊ฒฐ์ •ํ•œ๋‹ค.

์†์„ฑ ์„ค๋ช… ์†์„ฑ๊ฐ’
order ์•„์ดํ…œ๋“ค์˜ ๋ฐฐ์น˜ ์ˆœ์„œ  
flex-basis ํ”Œ๋ ‰์Šค ์•„์ดํ…œ์˜ ๊ธฐ๋ณธ ํฌ๊ธฐ ์„ค์ •
flex-direction์ด row๋ฉด ๋„ˆ๋น„, column์ด๋ฉด ๋†’์ด.
๊ธฐ๋ณธ๊ฐ’ auto
ex) 0, 50%, 300px, 10rem, content
flex-grow - ์•„์ดํ…œ์ด flex-basis์˜ ๊ฐ’๋ณด๋‹ค ์ปค์งˆ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ
- ์•„์ดํ…œ๋“ค์˜ flex-basis๋ฅผ ์ œ์™ธํ•œ ์—ฌ๋ฐฑ ๋ถ€๋ถ„์„ flex-grow์— ์ง€์ •๋œ ์ˆซ์ž์˜ ๋น„์œจ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ€์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
๊ธฐ๋ณธ๊ฐ’ 0
flex-shrink - ์•„์ดํ…œ์ด flex-basis์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์•„์งˆ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ
- flex-shrink: 0; ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์•„์ดํ…œ์˜ ํฌ๊ธฐ๊ฐ€ flex-basis๋ณด๋‹ค ์ž‘์•„์ง€์ง€ ์•Š๋Š”๋‹ค.
๊ธฐ๋ณธ๊ฐ’ 1
flex flex-grow, flex-shrink, flex-basis๋ฅผ ํ•œ ๋ฒˆ์— ์“ธ ์ˆ˜ ์žˆ๋Š” ์ถ•์•ฝํ˜• ์†์„ฑ  
align-self ํ•ด๋‹น ์•„์ดํ…œ์˜ ์ˆ˜์ง์ถ• ์•„์ดํ…œ ์ •๋ ฌ
๊ธฐ๋ณธ์ ์œผ๋กœ align-items์˜ ์„ค์ •์„ ์ƒ์† ๋ฐ›์ง€๋งŒ, align-self๊ฐ€ ์šฐ์„ ์ ์œผ๋กœ ์„ค์ •๋œ๋‹ค.
auto(๊ธฐ๋ณธ๊ฐ’)
stretch

flex-start | flex-end | center
baseline
 z-index Z์ถ• ์ •๋ ฌ. ์ˆซ์ž๊ฐ€ ํด ์ˆ˜๋ก ์œ„๋กœ ์˜ฌ๋ผ์˜จ๋‹ค.   ๊ธฐ๋ณธ๊ฐ’ 0

 

 

2) Flex ์‚ฌ์šฉํ•˜๊ธฐ

ํ”Œ๋ ‰์Šค ์ปจํ…Œ์ด๋„ˆ์˜ display์†์„ฑ์— flex ๋˜๋Š” inline-flex๋ฅผ ์ง€์ •ํ•˜๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

<!doctype>
<html>
<head>
    <meta charset="utf-8">
    <style>
        .container{
            background-color: skyblue;
            height:300px;
            display:flex;  /*ํ”Œ๋ ‰์Šค ์‚ฌ์šฉ*/
            flex-direction:row; /*๊ธฐ๋ณธ๊ฐ’ row*/
        }
        .item{
            background-color: purple;
            color:white;
            border:1px solid white;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
    </div>
</body>
</html>