๐Ÿ‘Š๐Ÿป CSS : Flexbox์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

๊ฒฝ์ดยท2022๋…„ 2์›” 10์ผ
post-thumbnail

โญ Flex ๋ž€?

Flex๋Š” ํ–‰๊ณผ ์—ด ํ˜•ํƒœ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์‰ฝ๊ฒŒ ๋ฐฐ์น˜ํ• ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. Flexbox ๋‚˜ Flexible Box ๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค. flexbox๋Š” Flex Container์™€ Flex Item์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค. Flex์˜ ์†์„ฑ๋“ค์€ ์ปจํ…Œ์ด๋„ˆ์— ์ ์šฉํ•˜๋Š” ์†์„ฑ, ์•„์ดํ…œ์— ์ ์šฉํ•˜๋Š” ์†์„ฑ ์ด ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ Flex์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์ „์ฒด ๊ณต๊ฐ„์ด๊ณ , ์„ค์ •๋œ ์†์„ฑ์— ๋”ฐ๋ผ ๊ฐ๊ฐ์˜ ์•„์ดํ…œ๋“ค์ด ์–ด๋– ํ•œ ํ˜•ํƒœ๋กœ ๋ฐฐ์น˜๋˜๋Š” ๊ฒƒ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด๋œ๋‹ค.

โญ Flex container์˜ ์†์„ฑ

โœ” display: flex;

display: flex; ๋Š” ๋‚ด๊ฐ€ ์ด container๋ฅผ flex๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋ผ๊ณ  ์„ ์–ธํ•ด์ฃผ๋Š” ์—ญํ• ์ด๋‹ค.

.container {
	display: flex;
}

flex์˜ item๋“ค์€ ๊ฐ€๋กœ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐฐ์น˜๋˜๊ณ , ์ž์‹ ์ด ๊ฐ€์ง„ ๋‚ด์šฉ๋ฌผ์˜ width๋งŒํผ๋งŒ ์ฐจ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค. height๋Š” container์˜ ๋†’์ด๋งŒํผ ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ item์ด ๋ฐฐ์น˜๋œ ๋ฐฉํ–ฅ์˜ ์ถ•์„ ๋ฉ”์ธ์ถ•(Main Axis), ๋ฉ”์ธ์ถ•๊ณผ ์ˆ˜์ง์ธ ์ถ•์„ ๊ต์ฐจ์ถ•(Cross Axis)์ด๋ผ๊ณ  ํ•œ๋‹ค.

โœ” flex-direction ๋ฐฐ์น˜ ๋ฐฉํ–ฅ ์„ค์ •

flex-direction ์€ item๋“ค์ด ๋ฐฐ์น˜๋˜๋Š” ์ถ•์˜ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ์ด๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ row์ด๋‹ค.

.container {
	flex-direction: row;
	/* flex-direction: column; */
	/* flex-direction: row-reverse; */
	/* flex-direction: column-reverse; */
}

โœ” flex-wrap ์ค„๋„˜๊น€ ์ฒ˜๋ฆฌ ์„ค์ •

container ๊ฐ€ ๋” ์ด์ƒ item๋“ค์„ ํ•œ ์ค„์— ๋‹ด์„ ๊ณต๊ฐ„์ด ์—†์„ ๋•Œ, item์˜ ์ค„๋ฐ”๊ฟˆ์„ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ์ด๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ nowrap์ด๋‹ค.

.container {
	flex-wrap: nowrap;
	/* flex-wrap: wrap; */
	/* flex-wrap: wrap-reverse; */
}

โœ” flex-flow

flex-direction๊ณผ flex-wrap์„ ํ•œ๊บผ๋ฒˆ์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ถ• ์†์„ฑ์ด๋‹ค. flex-direction๊ณผ flex-wrap ์ˆœ์œผ๋กœ ํ•œ ์นธ ๋„์–ด์ฃผ๊ณ  ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

.container {
	flex-flow: row wrap;
	/* ์•„๋ž˜์˜ ๋‘ ์ค„์„ ์ค„์—ฌ ์“ด ๊ฒƒ */
	/* flex-direction: row; */
	/* flex-wrap: wrap; */
}

โœ” justify-content ๋ฉ”์ธ์ถ• ๋ฐฉํ–ฅ ์ •๋ ฌ

๋ฉ”์ธ์ถ• ๋ฐฉํ–ฅ์œผ๋กœ item๋“ค์„ ์ •๋ ฌํ•˜๋Š” ์†์„ฑ์ด๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ flex-start ์ด๋‹ค.

.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 ์ˆ˜์ง์ถ• ๋ฐฉํ–ฅ ์ •๋ ฌ

์ˆ˜์ง์ถ• ๋ฐฉํ–ฅ์œผ๋กœ item๋“ค์„ ์ •๋ ฌํ•˜๋Š” ์†์„ฑ์ด๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ stretch์ด๋‹ค.

.container {
	align-items: stretch;
	/* align-items: flex-start; */
	/* align-items: flex-end; */
	/* align-items: center; */
	/* align-items: baseline; */
}

Tipโ—โ—

justify-content: center;
align-item: center;

๋ฅผ ํ•ด์ฃผ๋ฉด, item์„ ํ•œ๊ฐ€์šด๋ฐ์— ๋†“์„ ์ˆ˜ ์žˆ๋‹ค.

โœ” align-content ์—ฌ๋Ÿฌ ํ–‰ ์ •๋ ฌ

flex-wrap: wrap;์ด ์„ค์ •๋œ ์ƒํƒœ์—์„œ, item๋“ค์˜ ํ–‰์ด 2์ค„ ์ด์ƒ ๋˜์—ˆ์„ ๋•Œ์˜ ์ˆ˜์ง์ถ• ๋ฐฉํ–ฅ ์ •๋ ฌ์„ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ์ด๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ stretch์ด๋‹ค.

.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 item์˜ ์†์„ฑ

โœ” flex-basis ์œ ์—ฐํ•œ ๋ฐ•์Šค์˜ ๊ธฐ๋ณธ ์˜์—ญ

flex-basis๋Š” item์˜ ๊ธฐ๋ณธ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•œ๋‹ค. (flex-direction์ด row์ผ ๋•Œ๋Š” ๋„ˆ๋น„, column์ผ ๋•Œ๋Š” ๋†’์ด) flex-basis์˜ ๊ฐ’์œผ๋กœ๋Š” width๋‚˜ height์— ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ข… ๋‹จ์œ„๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ณ , ๊ธฐ๋ณธ๊ฐ’ auto๋Š” ํ•ด๋‹น item์˜ width๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค. content๋Š” ์ปจํ…์ธ ์˜ ํฌ๊ธฐ๋กœ width๋ฅผ ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์™€ ๊ฐ™๋‹ค.

.item 
	flex-basis: auto; /* ๊ธฐ๋ณธ๊ฐ’ */
	/* flex-basis: 0; */
	/* flex-basis: 50%; */
	/* flex-basis: 300px; */
	/* flex-basis: 10rem; */
	/* flex-basis: content; */
}

โœ” flex-grow ์œ ์—ฐํ•˜๊ฒŒ ๋Š˜๋ฆฌ๊ธฐ

flex-grow๋Š” item์ด flex-basis์˜ ๊ฐ’๋ณด๋‹ค ์ปค์งˆ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ์ด๋‹ค. 0๊ณผ 0๋ณด๋‹ค ํฐ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฉฐ, ๊ธฐ๋ณธ๊ฐ’์€ 0์ด๋‹ค. flex-grow์— ๋“ค์–ด๊ฐ€๋Š” ์ˆซ์ž์˜ ์˜๋ฏธ๋Š” item๋“ค์˜ flex-basis๋ฅผ ์ œ์™ธํ•œ ์—ฌ๋ฐฑ ๋ถ€๋ถ„์„ 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-shrink๋Š” flex-grow์™€ ์Œ์„ ์ด๋ฃจ๋Š” ์†์„ฑ์œผ๋กœ item์ด flex-basis์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์•„์งˆ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. 0๊ณผ 0๋ณด๋‹ค ํฐ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฉฐ, ๊ธฐ๋ณธ๊ฐ’์€ 1์ด๋‹ค. flex-shrink๋ฅผ 0์œผ๋กœ ์„ธํŒ…ํ•˜๋ฉด **item์˜ ํฌ๊ธฐ๊ฐ€ flex-basis๋ณด๋‹ค ์ž‘์•„์ง€์ง€ ์•Š๊ธฐ** ๋•Œ๋ฌธ์— ๊ณ ์ •ํญ์˜ ์ปฌ๋Ÿผ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

.item {
	flex-basis: 150px;
	flex-shrink: 1; /* ๊ธฐ๋ณธ๊ฐ’ */
}

.container {
	display: flex;
}
.item:nth-child(1) {
	flex-shrink: 0;
	width: 100px;
}
.item:nth-child(2) {
	flex-grow: 1;
}

โœ” flex ์œ ์—ฐํ•˜๊ฒŒ ์ค„์ด๊ธฐ

flex -grow flex-shrink flex-basis๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ถ• ์†์„ฑ์ด๋‹ค.

.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; */
}

๋งŒ์•ฝ, flex-basis๊ฐ’์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 0์œผ๋กœ ๋‘”๋‹ค๋ฉด ๊ธฐ๋ณธ ์ ์œ ํฌ๊ธฐ๊ฐ€ 0์ด ๋˜๊ณ , ๊ฒฐ๊ตญ ์ „์ฒด ํฌ๊ธฐ๋ฅผ 1:2:1 ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ€์ ธ์„œ ์˜์—ญ ์ž์ฒด์˜ ํฌ๊ธฐ๊ฐ€ ์ •ํ™•ํžˆ 1:2:1์ด ๋œ๋‹ค.

.item {
	flex: 1 1 0;
}
.item:nth-child(2) {
	flex: 2 1 0;
}

โœ” align-self ์ˆ˜์ง์ถ•์œผ๋กœ item์ •๋ ฌ

align-items์˜ item๋ฒ„์ „์œผ๋กœ ํ•ด๋‹น item์˜ ์ˆ˜์ง์ถ• ๋ฐฉํ–ฅ ์ •๋ ฌ์ด๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ auto๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ align-items ์„ค์ •์„ ์ƒ์†๋ฐ›๋Š”๋‹ค.

.item {
	align-self: auto;
	/* align-self: stretch; */
	/* align-self: flex-start; */   <-CCC ์„ค์ •
	/* align-self: flex-end; */
	/* align-self: center; */   <-BBB ์„ค์ • 
	/* align-self: baseline; */
}

โœ” order ๋ฐฐ์น˜ ์ˆœ์„œ

๊ฐ item๋“ค์˜ ์‹œ๊ฐ์  ๋‚˜์—ด ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. html ์ž์ฒด์˜ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ, ์‹œ๊ฐ์žฅ์• ์ธ๋ถ„๋“ค์ด ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๋กœ ํ™”๋ฉด์„ ์ฝ์„๋•Œ๋Š” ์˜๋ฏธ๊ฐ€ ์—†์–ด์ง€๋Š” ์†์„ฑ์ด๋ฏ€๋กœ ์ฃผ์˜ํ•œ๋‹ค.

.item:nth-child(1) { order: 3; } /* A */
.item:nth-child(2) { order: 1; } /* B */
.item:nth-child(3) { order: 2; } /* C */

โœ” z-index

์ˆซ์ž๊ฐ€ ํด์ˆ˜๋ก ์œ„๋กœ ์˜ฌ๋ผ์˜จ๋‹ค.

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

๐Ÿ“š Ref

https://studiomeal.com/archives/197

profile
์ด์‚ฌ์ค‘์ž…๋‹ˆ๋‹ค!๐ŸŒŸhttps://velog.io/@devkyoung2

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