flexbox๋?
๊ธฐ์กด์ display๋ positon ๋ฑ์ ์ด์ฉํ ์น์ ๋ ์ด์์ ๊ฐ๋ฐ์ ์๊ฐํ ๋ถ๋ถ์ด ๋ง๊ณ ์ด๋ ์ ๋ ํ๊ณ๊ฐ ์กด์ฌํด์ ๊ฐ๋ฐํ๊ธฐ๊ฐ ์ด๋ ค์ ์ต๋๋ค. ์ด๋ฐ ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด์ flexbox ๊ฐ๋ ์ด ๋์ ๋์์ต๋๋ค. flexbox๋ฅผ ์ด์ฉํ๋ฉด ํน๋ณํ ๊ณ์ฐ ์์ด ์ฝ๊ฒ ์ ๋ ฌ์ ํ ์ ์๊ณ , ์ด๋ฅผ ํตํด ๋ ์ด์์์ ํธ๋ฆฌํ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
flexbox ๊ตฌ์ฑ
flex box๋ flex container(๋ถ๋ชจ ์์)์ flex item(์์ ์์)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. flexbox๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ถ๋ชจ ์์์ display: flex;๋ฅผ ์ถ๊ฐํ๋ฉด๋ฉ๋๋ค. flex ์์ฑ์ ์ถ๊ฐํ ์์๊ฐ flex container๊ฐ ๋๊ณ , ๊ทธ ์์ ์์๋ค์ด flex item์ด ๋ฉ๋๋ค.
.flex_container {
display: flex;
}
๋ถ๋ชจ ์์์ ์์ ์์์ ์์ฑ
flex container์ item์์ ์ธ ์ ์๋ ์์ฑ์ ์ข ๋ฅ๋ ๋ค๋ฆ ๋๋ค.
flex box๋ ๊ฐ๋ก ํน์ ์ธ๋ก์ ์ ํด๋ ๋ฐฉํฅ์ผ๋ก ํ๋กํผํฐ๋ฅผ ์ ๋ ฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ค์ํ ๋ ์ด์์์ ๋ง๋ค ์ ์์ต๋๋ค. ์์ธํ ์์ฑ์ ์ญํ ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
โ flex container์ ์์ฑ
flex-direction
: flex container ์์ item๋ค์ ๋ฐฉํฅ์ ์ ํจ
- row(default): ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ ๋ ฌ →
- row-reverse: ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ ๋ ฌ ←
- column: ์์ชฝ์์ ์๋์ชฝ์ผ๋ก ์ ๋ ฌ ↓
- column-reverse: ์๋์ชฝ์์ ์์ชฝ์ผ๋ก ์ ๋ ฌ ↑
.container {
flex-direction: row | row-reverse | column | column-reverse; /* default row */
}
flex-wrap
: flex item์ด flex container๋ฅผ ๋ฒ์ด๋ฌ์ ๋ ์ค์ ๋ฐ๊พธ๋ ์์ฑ
- nowrap(default): ๋ชจ๋ itme์ ํ ์ค์ ์ ๋ ฌ
- wrap: item์ด container๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ์ ๋ ฌ
- wrap-reverse: item์ด container๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ๋ฐ๋๋ก ์ ๋ ฌ
.container {
flex-wrap: nowrap | wrap | wrap-reverse; /* default nowrap */
}
justify-content
: flex-direction์ผ๋ก ์ ํด์ง ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์ํ์ผ๋ก item์ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ์ ํจ
- flex-start(default): item์ ์ผ์ชฝ์ ์์์ ์ผ๋ก ์ ๋ ฌ
- flex-end: item์ ์ค๋ฅธ์ชฝ์ ์์์ ์ผ๋ก ์ ๋ ฌ
- center: item์ ๊ฐ์ด๋ฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
- space-between: ์ฒซ ๋ฒ์งธ item์ ์์์ ์, ๋ง์ง๋ง item์ ๋์ ์ ๋ถ๊ณ ๋๋จธ์ง item ์ฌ์ด์ ๊ณต๊ฐ์ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐ
- space-around: ๋ชจ๋ item ์ฌ์ด์ ๊ท ๋ฑํ ๊ณต๊ฐ ๋ถ๋ฐฐ
๊ทธ๋ฆผ์์ ๋ณผ ์ ์๋ฏ์ด, ์ฒซ ๋ฒ์งธ item๊ณผ ์์์ ์ฌ์ด์๋ space๊ฐ 1์นธ์ด๊ณ , ์ฒซ ๋ฒ์งธ item๊ณผ ๋ ๋ฒ์งธ item ์ฌ์ด์๋ space๊ฐ 2์นธ์ด์ด์ space๊ฐ ๋ฌ๋ผ ๋ณด์ ๋๋ค. - space-evenly: ๋ชจ๋ item ์ฌ์ด์ ๊ท ๋ฑํ ๊ณต๊ฐ ๋ถ๋ฐฐ
.container {
justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly; /* default flex-start */
}
align-items
: flex-direction์ผ๋ก ์ ํด์ง ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์์ง์ผ๋ก item์ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ์ ํจ
- flex-start: item์ ์์ชฝ์ ์์์ ์ผ๋ก ์ ๋ ฌ
- flex-end: item์ ์๋์ชฝ์ ์์์ ์ผ๋ก ์ ๋ ฌ
- center: item์ ๊ฐ์ด๋ฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
- stretch(default): item์ ๋๋ ค์ ์ธ๋ก ํฌ๊ธฐ์ ๋ง์ถค
- baseline: baseline(๊ทธ๋ฆผ ์ฐธ์กฐ)์ ๋ง์ถฐ item ์ ๋ ฌ
.container {
align-items: stretch | flex-start | flex-end | center | baseline; /* default stretch */
}
align-content
: flex-direction์ผ๋ก ์ ํด์ง ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์์ง์ผ๋ก ์ฌ๋ฌ ์ค์ธ item์ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ์ ํจ
justify-content์ ๊ธฐ๋ฅ์ด ์ ์ฌํ๋ฏ๋ก ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ์ ๋์ฒดํฉ๋๋ค.
.container {
align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline; /* default stretch */
}
โ flex item์ ์์ฑ
flex-grow
: flex item์ ํ์ฅ๊ณผ ๊ด๋ จ๋ ์์ฑ, default 0
ํด๋น flex item์ด flex container ๋ด๋ถ์์ ์ผ๋งํผ์ ๊ณต๊ฐ์ ์ฐจ์งํด์ผ ํ๋์ง ๋น์จ์ ๋ํ๋ ๋๋ค. ๋ชจ๋ item์ flex-grow ์์ฑ์ด 1๋ก ๋์ด ์๋ค๋ฉด, container์ ๊ณต๊ฐ์ ๋ชจ๋ item์ ๋๊ฐ์ด ๋ถ๋ฐฐ๋ ๊ฒ์ ๋๋ค. ์์ ๊ทธ๋ฆผ์ ๋ ๋ฒ์งธ ์์์ ๊ฐ์ด flex-grow๋ฅผ ์ง์ ํ๋ฉด flex-grow ๊ฐ์ด 2์ธ item์ด ๋ค๋ฅธ item๋ณด๋ค ๊ณต๊ฐ์ 2๋ฐฐ ๋ ์ฐจ์งํฉ๋๋ค. ๊ฐ์๋ ์์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
.item {
flex-grow: 4; /* default 0 */
}
flex-shrink
: flex item์ ์ถ์์ ๊ด๋ จ๋ ์์ฑ, default 1
flex item์ด ์ผ๋ง๋ ๊ณต๊ฐ์ ์ ๊ฒ ์ฐจ์งํ๊ณ ์ถ์์ง๋ฅผ ๋ํ๋ผ ๋ ์ฌ์ฉํฉ๋๋ค. flex-grow์ ๋ฐ๋ ๊ฐ๋ ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
.item {
flex-shrink: 3; /* default 1 */
}
flex-basis
: flex item์ ๊ธฐ๋ณธ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํจ, defaul auto
๋จ์ ๊ณต๊ฐ์ด ๋ถ๋ฐฐ๋๊ธฐ ์ ์ item์ ๊ธฐ๋ณธ ์ฌ์ด์ฆ๋ฅผ ์ ํฉ๋๋ค. ๊ธธ์ด(%, rem, px) ๋๋ ํค์๋(auto, content)๋ก ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
.item {
flex-basis: | auto; /* default auto */
}
flex
: flex-grow, flex-shrink, flex-basis์ ์ถ์ฝํ
flex-grow, flex-shrink, flex-basis๋ฅผ ํ ๋ฒ์ ์ค์ ํ ์ ์๋ ์์ฑ์ ๋๋ค.
.item {
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}
Flex box๋ก ๋ ์ด์์ ๋ง๋ค๊ธฐ
โ HTML ์ฝ๋
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flexbox</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header class="header">
<h1>My Webpage</h1>
</header>
<nav class="nav">
<a href="">Home</a>
<a href="">About</a>
<a href="">Q&A</a>
</nav>
<div id="main">
<article class="content">
<h2>About me</h2>
<h3>Introduce: </h3>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Possimus sed ea dignissimos, reprehenderit quam voluptatum esse facere sit fuga dolores eaque, enim, aperiam doloribus ad eius nobis? Repellat, aliquid nulla?</p>
</article>
<aside class="aside">
<h2>AD</h2>
<p>Lorem, ipsum dolor sit ametetur adipisicing eue, suscipit exorum exc!</p>
</aside>
</div>
<footer class="footer">
<h2>Footer</h2>
</footer>
</body>
</html>
โ CSS ์ฝ๋
* { box-sizing: border-box; }
/* footer๋ฅผ ์น์ฌ์ดํธ ์๋์ชฝ์ ์์นํ๋๋ก ํ๊ธฐ ์ํด์ ์ค์ */
html, body {
height: 100%;
}
body {
margin: 0;
display: flex;
flex-direction: column;
}
a {text-decoration: none;}
a:link, a:visited, a:active { color: inherit; }
.header {
background-color: burlywood;
padding: 30px;
text-align: center;
}
.nav {
background-color: coral;
display: flex;
justify-content: flex-end;
}
.nav a {
padding: 8px;
margin-right: 20px;
}
#main {
display: flex;
flex-grow: 1; /* footer๋ฅผ ์น์ฌ์ดํธ ์๋์ชฝ์ ์์นํ๋๋ก ํ๊ธฐ ์ํด์ ์ค์ */
}
.content {
flex: 70%;
padding: 40px;
}
.aside {
background-color: lemonchiffon;
flex: 30%;
padding: 40px;
}
.footer {
background-color: lightskyblue;
padding: 30px;
text-align: center;
flex-shrink: 0; /* ์น์ฌ์ดํธ๋ฅผ ์ถ์ํด๋ footer๊ฐ ๊นจ์ง์ง์๋๋ก ํ๊ธฐ ์ํด์ ์ค์ */
}
โ ์คํ ๊ฒฐ๊ณผ
โ ์ฐธ๊ณ ์ฌ์ดํธ
flexbox๋ก ๋ง๋ค ์ ์๋ 10๊ฐ์ง ๋ ์ด์์
A Complete Guide to Flexbox | CSS - Tricks
'Client > CSS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CSS] transform์ ์์ฑ (translate, rotate, scale ๋ฑ) ๊ธฐ์ค์ ์ค์ ํ๊ธฐ - transform-origin (0) | 2020.06.26 |
---|---|
[CSS] Media Query (๋ฏธ๋์ด์ฟผ๋ฆฌ) ํ๋ฉด ์ฌ์ด์ฆ Breakpoints (0) | 2020.06.12 |
[CSS] z-index (์์์ ์์ ์์ ์ง์ ) (0) | 2020.06.12 |
[CSS] ๊ตฌ๊ธ ์น ํฐํธ(Google fonts) ์ฌ์ฉ ๋ฐฉ๋ฒ (0) | 2020.06.11 |
[CSS] Position ์์ฑ (static, relative, absolute, fixed) (0) | 2020.06.11 |