Dall's Green๐ŸŒฟ

[CSS] CSS Flex ์†์„ฑ ์ •๋ฆฌ ๋ณธ๋ฌธ

HTML, CSS

[CSS] CSS Flex ์†์„ฑ ์ •๋ฆฌ

JDall 2023. 5. 20. 15:00

์ผ๋ฐ˜์ ์œผ๋กœ ์›นํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ์€ css์˜ display, float, position ๋“ฑ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์†์„ฑ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ ˆ์ด์•„์›ƒ์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ต‰์žฅํžˆ ๋ณต์žกํ•ด์ง„๋‹ค.


์ด๋Ÿฌํ•œ ๋ณต์žกํ•œ ๋ ˆ์ด์•„์›ƒ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋‚˜์˜จ ๊ฒƒ์ด css3์— ์ถ”๊ฐ€๋œ flexbox์ด๋‹ค. flexbox๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์š”์†Œ์˜ ํฌ๊ธฐ์™€ ์ˆœ์„œ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

# flex (flexbox)

flexbox๋Š” viewport๋‚˜ ์š”์†Œ์˜ ํฌ๊ธฐ๊ฐ€ ๋ถˆ๋ช…ํ™•ํ•˜๊ฑฐ๋‚˜ ๋™์ ์œผ๋กœ ๋ณ€ํ•  ๋•Œ์—๋„ ํšจ์œจ์ ์œผ๋กœ ์š”์†Œ๋ฅผ ๋ฐฐ์น˜, ์ •๋ ฌ, ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ flexbox๋Š” ๋ณต์ˆ˜์˜ ์ž์‹ ์š”์†Œ์ธ flex item๊ณผ ๊ทธ ์ƒ์œ„ ๋ถ€๋ชจ ์š”์†Œ์ธ flex container๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

 

 

.flex_container {
  display: flex;
}

 

display: flex ์†์„ฑ์ด ์ ์šฉ๋œ ์š”์†Œ๋Š” flex container๊ฐ€ ๋˜๊ณ , flex contatiner์˜ ์ž์‹ ์š”์†Œ๋Š” ์ž๋™์ ์œผ๋กœ flex item์ด ๋œ๋‹ค.

์ด๋Ÿฌํ•œ flex item๋Š” ์ฃผ์ถ•(main axis)์— ๋”ฐ๋ผ ์ •๋ ฌ๋œ๋‹ค. ์ฃผ์ถ•์˜ ๋ฐฉํ–ฅ์€ flex container์˜ flex-direction ์†์„ฑ์œผ๋กœ ๊ฒฐ์ •ํ•˜๋Š”๋ฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” row ์†์„ฑ์œผ๋กœ ์ง€์ •์ด ๋˜์–ด ์žˆ๋‹ค.

 

# ๋ถ€๋ชจ ์š”์†Œ์™€ ์ž์‹ ์š”์†Œ ์†์„ฑ ๊ตฌ๋ถ„

flexbox์˜ ์ „์ฒด์ ์ธ ์ •๋ ฌ๊ณผ ํ๋ฆ„ ์†์„ฑ์€ ๋ถ€๋ชจ์ธ flex container์— ์ •์˜ํ•˜๊ณ ํฌ๊ธฐ๋‚˜ ์ˆœ์„œ์— ๊ด€๋ จ๋œ ์†์„ฑ์€ ์ž์‹ ์š”์†Œ์— ํ•ด๋‹นํ•˜๋Š” flex-item์— ์ •์˜ํ•œ๋‹ค

 

์ด๊ฒƒ์„ ๋ถ„๋ฆฌํ•ด์„œ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค!

  • flex container ์†์„ฑ: flex-direction, flex-wrap, justify-content, align-items, align-content
  • flex item ์†์„ฑ: flex, flex-grow, flex-shrink, flex-basis, order

์ด๋Ÿฌํ•œ flexbox๋Š” internet explorer 10 ์ด์ƒ์ด ์ง€์›ํ•œ๋‹ค. ์ง€์›์„ ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๋„ ์žˆ๋Š”๋ฐ, ๋Œ€์ฒด์ ์œผ๋กœ ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €๋Š” flexbox๋ฅผ ์ง€์›ํ•œ๋‹ค.

(์ž์„ธํ•œ ๊ฒƒ์€ ๋ฐ‘์—..)

 

 

# ์ง€์ • ์†์„ฑ (ํ•„์ˆ˜!)

  • flex-direction: ๋‚ด๋ถ€ ์š”์†Œ๋“ค์˜ ์ •๋ ฌ ๋ฐฉํ–ฅ
.flex_container {
  display: flex;
  flex-direction: row;             /* ๊ฐ€๋กœ๋ฐฉํ–ฅ ์ •๋ ฌ (default) 
                                    default๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค. */
                  column;          /* ์„ธ๋กœ๋ฐฉํ–ฅ ์ •๋ ฌ */
                  row-reverse;     /* ๊ฐ€๋กœ๋ฐฉํ–ฅ์˜ ๋ฐ˜๋Œ€์—์„œ๋ถ€ํ„ฐ ์ •๋ ฌ */
                  column-reverse;  /* ์„ธ๋กœ๋ฐฉํ–ฅ์˜ ๋ฐ˜๋Œ€์—์„œ๋ถ€ํ„ฐ ์ •๋ ฌ */
}

 

 

# ๋ถ€๋ชจ ์š”์†Œ 4๊ฐ€์ง€

  • flex-wrap : ์ค„ ๋ฐ”๊ฟˆ ์„ค์ •, ์ž์‹ ์š”์†Œ๋“ค์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์ ธ์„œ ๊ฐœ์ˆ˜๊ฐ€ ๊ฝ‰ ์ฐผ์„ ๋•Œ ์ž๋™ ์ค„๋ฐ”๊ฟˆ์„ ํ•ด์ค€๋‹ค.
 .flex_container {
  display: flex;
  flex-wrap: nowrap        /* ํ•œ์ค„ ์ •๋ ฌ, default */
             wrap          /* ์—ฌ๋Ÿฌ์ค„ ๊ฑธ์ณ ์ •๋ ฌ */
             wrap-reverse  /* ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์—ฌ๋Ÿฌ์ค„ ๊ฑธ์ณ ์ •๋ ฌ */

 

  • justify-content: ๊ฐ€๋กœ์„  ์ƒ ์ •๋ ฌ
 .flex_container {
  display: flex;
  justify-content: flex-start    /* ์™ผ์ชฝ ์ •๋ ฌ */
                   flex-end      /* ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ */
                   center        /* ๊ฐ€์šด๋ฐ ์ •๋ ฌ */
                   space-between /* ํ™”๋ฉด์— ๋”ฑ๋งž๊ฒŒ ์ •๋ ฌ */
                   space-around  /* ์–‘๋ ๊ณต๊ฐ„์„ ์ผ์ •ํ•˜๊ฒŒ ๋„์–ด ์ •๋ ฌ */
                   space-evenly  /* ์–‘๋๊ณผ ๊ฐ€์šด๋ฐ ๊ณต๊ฐ„์ด ๋ชจ๋‘ ์ผ์ •ํ•˜๊ฒŒ ๋„์–ด ์ •๋ ฌ */

 

  • align-items: ์„ธ๋กœ์„  ์ƒ ์ •๋ ฌ
 .flex_container {
  display: flex;
  align-items: flex-start  /* ์œ„๋กœ ์ •๋ ฌ */
               flex-end    /* ์•„๋ž˜๋กœ ์ •๋ ฌ */
               center      /* ๊ฐ€์šด๋ฐ ์ •๋ ฌ */
               baseline    /* ๋ฐ‘๋ฉด ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ */
               stretch     /* ์ •ํ™•ํ•œ ๋†’์ด๊ฐ’์„ ์ฃผ๋ฉด ๋ณ€ํ•˜์ง€ ์•Š์œผ๋‚˜
                              ์ตœ์†Œ๋†’์ด๋ฅผ ์ฃผ๋ฉด container ์˜์—ญ๊นŒ์ง€ ์ •๋ ฌ */

 

  • align-content: (์„ธ๋กœ์„ ์ƒ ์ •๋ ฌ์—์„œ ์—ฌ๋ถ„์˜ ๊ณต๊ฐ„์ด ์žˆ๋‹ค๋ฉด) ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์ด ๊ฐ„๊ฒฉ์กฐ์ ˆ
 .flex_container {
  display: flex;
  align-content: flex-start    /* ์œ„๋กœ ์ •๋ ฌ */
                 flex-end      /* ์•„๋ž˜๋กœ ์ •๋ ฌ */
                 center        /* ๊ฐ€์šด๋ฐ ์ •๋ ฌ */
                 space-between /* ํ™”๋ฉด์— ์ผ์ •ํ•˜๊ฒŒ ์ •๋ ฌ */
                 space-around  /* ๋ผ์ธ์‚ฌ์ด์— ๋™์ผํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ๋„์–ด ์ •๋ ฌ */
                 strech        /* ์ค„์ด ๋Š˜์–ด๋‚˜ ๋‚˜๋จธ์ง€ ๊ณต๊ฐ„์„ ์ฐจ์ง€, default */

 

 

# ์ž์‹์š”์†Œ 5๊ฐ€์ง€

  • flex: flex-grow, flex-shrink, flex-basis์˜ ์ถ•์•ฝํ˜• ์†์„ฑ

        ์›๋ž˜ ๋‚ด๊ฐ€ ๊ฐ€์ง„ ๋ณธ์—ฐ์˜ ํฌ๊ธฐ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œํ‚จ๋‹ค. ๊ทธ๋ž˜์„œ ์ „์ฒด๊ฐ€ 1์˜ ๋น„์œจ ๊ท ๋“ฑํ•œ ๋น„์œจ๋กœ ๋‚˜๋ˆ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค!

 .flex_item {
  display: flex;
  flex: 1;          /* flex-grow: 1; flex-shrink: 1; flex-basis: 0%; */
        1 1 auto;   /* flex-grow: 1; flex-shrink: 1; flex-basis: auto; */
        1 500px;    /* flex-grow: 1; flex-shrink: 1; flex-basis: 500px; */
}

 

  • flex-grow: (0๋ณด๋‹ค ํฐ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฉด) ์œ ์—ฐํ•œ ๋ฐ•์Šค๋กœ ๋ณ€ํ•˜๊ณ  ์›๋ž˜์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ปค์ง€๋ฉฐ ๋นˆ ๊ณต๊ฐ„์„ ๋ฉ”์›Œ์ค€๋‹ค.
 .flex_item {
  display: flex;
  flex-grow: 1;  
  /* flex-grow: 0; , default */
}

 

  • flex-shrink: (0 ๋ณด๋‹ค ํฐ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฉด) ์œ ์—ฐํ•œ ๋ฐ•์Šค๋กœ ๋ณ€ํ•˜๊ณ  flex-basis๋ณด๋‹ค ์ค„์–ด๋“ ๋‹ค.
 .flex_item {
  display: flex;
  flex-shrink: 1;  
  /* flex-grow: 0; , default */
}

 

  • flex-basis: Flex ์•„์ดํ…œ์˜ ๊ธฐ๋ณธ ํฌ๊ธฐ ์„ค์ •

        flex-basis ๊ฐ’์ด ์ ์šฉ๋˜์–ด ์žˆ๋‹ค๋ฉด width, height ๊ฐ’์€ ๋ฌด์‹œ๋œ๋‹ค.

 .flex_item {
  display: flex;
  flex-basis: auto; /* default, ํ•ด๋‹น ์•„์ดํ…œ์˜ width ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค. */
	      0; 
	      50%;
              300px; 
	      10rem; 
	      content; 
}

 

  • order: ๋ฐฐ์น˜ ์ˆœ์„œ
 .flex_item {
  display: flex;
  order: 1; 
        /* -1(์™ผ์ชฝ), 0(default), 1(์˜ค๋ฅธ์ชฝ) */
}

 

 

# ๋๋งˆ์น˜๋ฉฐ..

์ •๋ง ์™ธ์›Œ์•ผ ํ• ๊ฒŒ ๋งŽ์•„์„œ ํ—ท๊ฐˆ๋ฆฌ๊ณ  ๋ณต์žกํ•˜๋‹ˆ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค...

ํ•œ๋ฒˆ ์ญ‰ ์ •๋ฆฌํ•ด ๋ณด๋‹ˆ ์ดํ•ด๊ฐ€ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๋‹ค์Œ์€ ์–ด๋–ค ๊ฑธ ์ •๋ฆฌํ•ด ๋ณผ๊นŒ!