CSS : Flexbox

daymoon_ยท2022๋…„ 5์›” 17์ผ
0

CSS

๋ชฉ๋ก ๋ณด๊ธฐ
6/18
post-thumbnail

Flexbox

๐Ÿ“Œ ์ฐธ๊ณ ์ž๋ฃŒ
1๋ถ„์ฝ”๋”ฉ Flex
MDN Flexbox

ํ”Œ๋ ‰์Šค ๋ฐ•์Šค๋Š” ํ–‰ ๋˜๋Š” ์—ด์„ ์ฃผ์ถ•์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์š”์†Œ๋ฅผ ๋ฐฐ์น˜ ๋ฐ ์ •๋ ฌํ•˜๋Š” 1์ฐจ์› ๋ ˆ์ด์•„์›ƒ ๋ฐฉ์‹์ด๋‹ค.

โœ… Flex ์†์„ฑ

  • ํ”Œ๋ ‰์Šค ์ปจํ…Œ์ด๋„ˆ : ์ปจํ…Œ์ด๋„ˆ์— ์ ์šฉํ•˜๋Š” ์†์„ฑ โ–ถ ๋ ˆ์ด์•„์›ƒ์„ ๊ฒฐ์ •
  • ํ”Œ๋ ‰์Šค ์•„์ดํ…œ : ์•„์ดํ…œ์— ์ ์šฉํ•˜๋Š” ์†์„ฑ โ–ถ ํ”Œ๋ ‰์Šค ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ํ”Œ๋ ‰์Šค ๋ฐ•์Šค ๋ฐฉ์‹์œผ๋กœ ๋ฐฐ์น˜๋˜๋Š” ์š”์†Œ

โœ… flexbox ์ง€์ •

  • flexbox๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์ง€์ •ํ•  ์š”์†Œ์— ์†์„ฑ๊ฐ’์„ ์ง€์ •
/* ๊ธฐ๋ณธ : ์ธ๋ผ์ธ ๋ ˆ๋ฒจ ์š”์†Œ */
display: flex;

/* ์ธ๋ผ์ธ ๋ธ”๋ก ๋ ˆ๋ฒจ ์š”์†Œ */
display: inline-flex;

โœ… flexbox ์ถ•

  • ์ฃผ์ถ•(๋ฉ”์ธ์ถ•) ๊ธฐ๋ณธ๊ฐ’ : ์„ธ๋กœ(์—ด, column)
  • ๊ต์ฐจ์ถ• ๊ธฐ๋ณธ๊ฐ’ : ๊ฐ€๋กœ(ํ–‰, row)

ํ”Œ๋ ‰์Šค ์ปจํ…Œ์ด๋„ˆ ์ ์šฉ ์†์„ฑ

โš™๏ธ flex-direction

  • ๋ฐฐ์น˜ ๋ฐฉํ–ฅ ์„ค์ •
  • ๋ฉ”์ธ ์ถ•์„ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ (๊ฐ€๋กœ? ์„ธ๋กœ?)
.container {
	/* ๊ฐ€๋กœ */
	flex-direction: row;
    /* ์„ธ๋กœ */
	flex-direction: column;
    
    /* ์—ญ์ˆœ ๊ฐ€๋กœ (๋’ค์—์„œ ๋ถ€ํ„ฐ) */
	flex-direction: row-reverse;
    /* ์—ญ์ˆœ ์„ธ๋กœ (๋’ค์—์„œ ๋ถ€ํ„ฐ) */
	flex-direction: column-reverse;
}

โš™๏ธ flex-wrap

  • ํ”Œ๋ ‰์Šค ์•„์ดํ…œ๋“ค์„ ๊ฐ•์ œ๋กœ ํ•œ ์ค„์— ๋ฐฐ์น˜ํ•  ๊ฒƒ์ธ์ง€, ์—ฌ๋Ÿฌํ–‰์œผ๋กœ ํ‘œํ˜„ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์„ค์ •
.container {
	/* ๊ธฐ๋ณธ๊ฐ’ (์ค„๋ฐ”๊ฟˆ ์—†์Œ, ์•„์ดํ…œ๋“ค์ด ์‚์ ธ๋‚˜์˜ด) */
    flex-wrap: nowrap;
    /* ์ค„๋ฐ”๊ฟˆ (๋„˜์น˜๋ฉด ์•„๋ž˜๋กœ ์ค„๋ฐ”๊ฟˆํ•ด์„œ ์ถœ๋ ฅ) */
	flex-wrap: wrap;
    /* ์—ญ์ˆœ ์ค„๋ฐ”๊ฟˆ (์ค„๋ฐ”๊ฟˆ์„ ํ•˜์ง€๋งŒ ์—ญ์ˆœ์œผ๋กœ ๋ฐฐ์น˜) */
	flex-wrap: wrap-reverse;
}

โš™๏ธ flex-flow

  • flex-direction๊ณผ flex-wrap์„ ๋™์‹œ์— ์ ์šฉ
  • ์ž‘์„ฑ ์ˆœ์„œ : flex-direction flex-wrap
.container {
	/* flex-direction flex-wrap */
	flex-flow: row wrap;
}

โš™๏ธ justify-content

  • ํ”Œ๋ ‰์Šค ์•„์ดํ…œ๋“ค์ด ํ”Œ๋ ‰์Šค๋ฐ•์Šค ์ฃผ์ถ•์„ ๋”ฐ๋ผ ๋ฐฐ์น˜
  • ์š”์†Œ ์‚ฌ์ด์˜ ๊ณต๊ฐ„์„ ๋ถ„๋ฐฐํ•˜๋Š” ๋ฐฉ์‹์„ ๊ฒฐ์ •
.container {
	/* ์•„์ดํ…œ์„ ์‹œ์ž‘์  ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ */
	justify-content: flex-start;
    
    /* ์•„์ดํ…œ์„ ๋์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ */
	justify-content: flex-end;
    
    /* ์•„์ดํ…œ ๊ฐ€์šด๋ฐ ์ •๋ ฌ */
	justify-content: center;
    
    /* ์•„์ดํ…œ๋“ค ์‚ฌ์ด์— ๊ท ์ผํ•œ ๊ฐ„๊ฒฉ */
	justify-content: space-between;
    
    /* ์•„์ดํ…œ๋“ค ๋‘˜๋ ˆ์— ๊ท ์ผํ•œ ๊ฐ„๊ฒฉ */
	justify-content: space-around;
    
    /* ์•„์ดํ…œ๋“ค ์‚ฌ์ด์™€ ์–‘ ๋์— ๊ท ์ผํ•œ ๊ฐ„๊ฒฉ */
	justify-content: space-evenly;
}


โš™๏ธ align-items

  • ์ˆ˜์ง์ถ• ๋ฐฉํ–ฅ์œผ๋กœ ์•„์ดํ…œ์„ ์ •๋ ฌํ•˜๋Š” ์†์„ฑ
  • justify-content์™€ ์ˆ˜์ง ๋ฐฉํ–ฅ์˜ ์ •๋ ฌ
.container {
	/* ์•„์ดํ…œ๋“ค์„ ์ˆ˜์ง๋ฐฉํ–ฅ์œผ๋กœ ๋Š˜๋ฆผ */
	align-items: stretch;
    
    /* ์•„์ดํ…œ์„ ์‹œ์ž‘์  ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ */
	align-items: flex-start;
    
    /* ์•„์ดํ…œ๋“ค์„ ๋์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ */
	align-items: flex-end;
    
    /* ์•„์ดํ…œ๋“ค ๊ฐ€์šด๋ฐ ์ •๋ ฌ */
	align-items: center;
    
    /* ์•„์ดํ…œ๋“ค์„ ํ…์ŠคํŠธ ๋ฒ ์ด์Šค๋ผ์ธ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ */
	align-items: baseline;
}

โš™๏ธ align-content

  • flex-wrap: wrap;์ด ์„ค์ •๋œ ์ƒํƒœ์—์„œ, ์•„์ดํ…œ๋“ค์˜ ํ–‰์ด 2์ค„ ์ด์ƒ ๋˜์—ˆ์„ ๋•Œ์˜ ์ˆ˜์ง์ถ• ๋ฐฉํ–ฅ ์ •๋ ฌ์„ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ
.container {
	flex-wrap: wrap;
    
    /* ์—ฌ๋Ÿฌ ํ–‰ ์ •๋ ฌ ์†์„ฑ */
	align-content: stretch;
	align-content: flex-start;
	align-content: flex-end;
	align-content: center;
	align-content: space-between;
	align-content: space-around;
	align-content: space-evenly;
}

ํ”Œ๋ ‰์Šค ์•„์ดํ…œ ์ ์šฉ ์†์„ฑ

โš™๏ธ flex-basis

  • Flex ์•„์ดํ…œ์˜ ๊ธฐ๋ณธ ํฌ๊ธฐ๋ฅผ ์„ค์ •
  • flex-direction์ด row์ผ ๋•Œ ๋„ˆ๋น„, column์ผ ๋•Œ๋Š” ๋†’์ด
.item {
	/* ๊ธฐ๋ณธ๊ฐ’ */
	flex-basis: auto;
    
    /* ์†์„ฑ ๋ถ€์—ฌ */
	flex-basis: 0; 
	flex-basis: 50%; 
	flex-basis: 300px;
	flex-basis: 10rem; 
	flex-basis: content;
}

โš™๏ธ flex-grow

  • 0๋ณด๋‹ค ํฐ ๊ฐ’์ด ์„ธํŒ…์ด ๋˜๋ฉด ํ•ด๋‹น ์•„์ดํ…œ์ด ์œ ์—ฐํ•œ(flexible) ๋ฐ•์Šค๋กœ ๋ณ€ํ•œ๊ณ  ์›๋ž˜์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ปค์ง€๋ฉฐ ๋นˆ ๊ณต๊ฐ„์„ ๋ฉ”์šฐ๊ฒŒ ๋œ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์€ 0, ๋”ฐ๋กœ ์ ์šฉํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์•„์ดํ…œ์ด ๋Š˜์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ฆ‰, flex-babis๋ฅผ ์ œ์™ธํ•œ ์—ฌ๋ฐฑ ๋ถ€๋ถ„์„ flex-grow์— ์ง€์ •๋œ ์ˆซ์ž์˜ ๋น„์œจ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ€์ง„๋‹ค.
.item {
	flex-grow: 1;
	
    
    /* ๊ธฐ๋ณธ๊ฐ’ */
    flex-grow: 0;
    
    
    /* 1:2:1์˜ ๋น„์œจ๋กœ ์„ธํŒ…ํ•  ๊ฒฝ์šฐ */
    .item:nth-child(1) { flex-grow: 1; }
    .item:nth-child(2) { flex-grow: 2; }
    .item:nth-child(3) { flex-grow: 1; }
}

โš™๏ธ flex-shrink

  • flex-grow์™€ ์Œ์„ ์ด๋ฃจ๋Š” ์†์„ฑ
  • flex-babis์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์•„์งˆ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ฒฐ์ •
  • 0๋ณด๋‹ค ํฐ ๊ฐ’์ด ์„ธํŒ…์ด ๋˜๋ฉด ํ•ด๋‹น ์•„์ดํ…œ์ด ์œ ์—ฐํ•œ(flexible) ๋ฐ•์Šค๋กœ ๋ณ€ํ•˜๊ณ  flex-shrink๋ณด๋‹ค ์ž‘์•„์ง„๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์ด 1์ด๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์„ธํŒ…ํ•˜์ง€ ์•Š์•„๋„ ์•„์ดํ…œ์ด flex-babis๋ณด๋‹ค ์ž‘์•„์งˆ ์ˆ˜ ์žˆ๋‹ค.
.item {
	flex-basis: 150px;
    
     /* ๊ธฐ๋ณธ๊ฐ’ */
	flex-shrink: 1;
}

โš™๏ธ flex

  • flex-grow, flex-shrink, flex-babis๋ฅผ ํ•œ ๋ฒˆ์— ์“ธ ์ˆ˜ ์žˆ๋Š” ์ถ•์•ฝํ˜• ์†์„ฑ
.item {
	flex: 1;
	/* flex-grow: 1; flex-shrink: 1; flex-basis: 0%; */
	flex: 1 1 auto;
	/* flex-grow: 1; flex-shrink: 1; flex-basis: auto; */
	flex: 1 500px;
	/* flex-grow: 1; flex-shrink: 1; flex-basis: 500px; */
}

โš™๏ธ align-self

  • ํ•ด๋‹น ์•„์ดํ…œ์˜ ์ˆ˜์ง์ถ• ๋ฐฉํ–ฅ ์ •๋ ฌ
  • ๊ธฐ๋ณธ๊ฐ’์€ auto๋กœ, ๊ธฐ๋ณธ์ ์œผ๋กœ align-items์„ค์ •์„ ์ƒ์† ๋ฐ›๋Š”๋‹ค.
  • align-self๋Š” align-items๋ณด๋‹ค ์šฐ์„ ๊ถŒ์„ ๊ฐ€์ง„๋‹ค.
.item {
	align-self: auto;
	align-self: stretch;
	align-self: flex-start;
	align-self: flex-end;
	align-self: center;
	align-self: baseline;
}

โš™๏ธ order

  • ๊ฐ ์•„์ดํ…œ๋“ค์˜ ์‹œ๊ฐ์  ๋‚˜์—ด ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ
  • ์ž‘์€ ๊ฐ’์ผ ์ˆ˜๋ก ๋จผ์ € ๋ฐฐ์น˜
  • ์‹œ๊ฐ์  ์ˆœ์„œ์ผ๋ฟ, HTML ์ฐจ์ œ์˜ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฏ€๋กœ ์ ‘๊ทผ์„ฑ ์ธก๋ฉด์—์„œ ์‚ฌ์šฉ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
.item:nth-child(1) { order: 3; } /* A */
.item:nth-child(2) { order: 1; } /* B */
.item:nth-child(3) { order: 2; } /* C */

โš™๏ธ z-index

  • z-index๋กœ Z์ถ• ์ •๋ ฌ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ˆซ์ž๊ฐ€ ํด ์ˆ˜๋ก ์œ„๋กœ ์˜ฌ๋ผ์˜จ๋‹ค.
  • position์—์„œ์˜ z-index๋ž‘ ๋˜‘๊ฐ™๋‹ค.
.item:nth-child(2) {
	z-index: 1;
	transform: scale(2);
}
/* z-index๋ฅผ ์„ค์ • ์•ˆํ•˜๋ฉด 0์ด๋ฏ€๋กœ, 1๋งŒ ์„ค์ •ํ•ด๋„ ๋‚˜๋จธ์ง€ ์•„์ดํ…œ์„ ๋ณด๋‹ค ์œ„๋กœ ์˜ฌ๋ผ์˜จ๋‹ค */

๐Ÿ—“๏ธ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€

โœ… 2022.05.18

  • CSS: Flex ๋ถ„ํ•  ๋ฐ ์žฌ์ •๋ฆฌ

โœ… 2022.05.29

  • flex ์ฝ”๋“œ ์ฃผ์„ ์ˆ˜์ •
profile
๋ฏธ์ง€์˜ ๊ณต๊ฐ„๐ŸŒ™

0๊ฐœ์˜ ๋Œ“๊ธ€