display: flex; 를 자식 요소가 아닌 부모 요소에 적용해야 함을 이해한다.flex-direction 을 이용하여 요소를 정렬할 방향을 결정할 수 있다.justify-content 와 align-items 를 이용하여 수평-수직 정렬을 결정할 수 있다.flex-grow 를 이용하여 요소를 얼마나 늘릴 것인지 결정할 수 있다.flex-basis 를 이용하여 요소의 기본 크기를 결정할 수 있다.부모 박스 요소에 적용해 자식 박스의 방향과 크기를 결정하는 레이아웃 구성 방법요소의 정렬(=부모 요소에 적용하는 Flexbox 속성), 요소가 차지하는 공간(=자식 요소에 적용하는 Flexbox 속성)을 설정해줄 수 있습니다.row, column, row-reverse, column-reversenowrap, wrap, wrap-reverseflex-start, flex-end, center, space-between, space-aroundstretch, flex-start, flex-end, center, center, baseline실습과 연습을 통해서 직접 여러 속성들을 다뤄보면서 어떤 방식으로 정렬되는지 파악하는 것이 제일 좋습니다.
flex: <grow(팽창 지수)> <shrink(수축 지수)> <basis(기본 크기)>// 한 줄에 작성
flex: 0 1 auto;
// 여러 줄에 작성
flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;grow(팽창 지수) : 요소의 크기가 늘어나야 할 때 얼마나 늘어날 것인지 의미합니다.shrink(수축 지수) : 요소의 크기가 줄어들어야 할 때 얼마나 줄어들 것인지 의미합니다.grow 속성과 함께 사용하지 않는 게 좋기 때문에 보통은 shrink 속성은 기본값으로 둔 채 grow 속성에 변화를 주는 방식을 사용합니다.basis(팽창 지수) : 요소의 기본 크기는 얼마인지 의미합니다.auto 입니다.flex-grow 나 flex-shrink 에 의해 늘어나거나 줄어들기 전에 가지는 기본 크기입니다. flex-grow 가 0일 때, basis 크기를 지정하면 그 크기는 유지됩니다. (중요, 유일한 basis 속성 값 유지 조건, grow 의 값이 양수일 경우 같은 비율이더라도 basis 값이 적용되지 않을 수 있음)flex-basis : 50px 설정하면 box1 은 50픽셀을 유지합니다.width 와 flex-basis 를 동시에 적용하는 경우, flex-basis 우선 적용width 가 정확한 크기를 보장하지 않습니다.flex-basis를 사용하지 않는다면) 콘텐츠가 많아 자식박스가 넘치는 경우를 대비해, width 대신 max-width 를 쓸 수 있습니다.

// html
<!DOCTYPE html>
<html>
<head>
<title>Document</title>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<div class="layout layout1">
<div class="icon"></div>
<div class="icon"></div>
<div class="icon"></div>
</div>
<div class="layout layout2">
<div class="area area-in-layout2 area1"></div>
<div class="area area-in-layout2 area2"></div>
<div class="area area-in-layout2 area3"></div>
</div>
<div class="layout layout3">
<div class="area area-in-layout3 area4"></div>
<div class="area area-in-layout3 area5"></div>
</div>
</body>
</html>
// css
* {
box-sizing: border-box;
}
body {
margin: 0;
padding: 0;
display: flex;
}
.layout {
border: 2px solid red;
height: 99vh;
display: flex;
padding: 15px;
margin: 5px;
flex-direction: column;
align-items: center;
}
.icon {
border: 2px dotted tomato;
width: 5vw;
height: 5vw;
margin: 5px;
}
.area {
border: 2px dotted blue;
margin: 5px;
}
.layout1 {
width: 10vw;
}
.layout2 {
width: 25vw;
}
.layout3 {
width: 60vw;
}
.area-in-layout2 {
width: 20vw;
height: 100vh;
}
.area1 .area2 {
flex-grow: 1;
}
.area3 {
flex-basis: 40vh;
}
.area-in-layout3 {
width: 55vw;
height: 100vh;
}
.area4 {
flex-grow: 1;
}
.area5 {
flex-basis: 20vh;
}