Flexbox는 Box와 Item을 행, 열로 배치하는 유용한 기능이다. Flexbox만 잘 이해해도, 웹사이트의 레이아웃을 아주 쉽게 구성할 수 있다.
float는 이미지와 텍스트를 어떻게 배치할 것인지에 정의하기위해서 나타난 property. 예전에는 CSS에 레이아웃을 하는 기능이 없어서, 많은 사람들이 float을 사용해서, 박스들을 왼쪽, 오른쪽 나눠서 배치를 했는데, 이는 float 사용의 원래 목적에 어긋나는 행위였다. Flexbox의 등장으로 float은 원래 목적에 맞게 사용되게 되었다.
float: left;
float: none;
float: right;
Flexbox는 container, Box에 적용되는 속성 값이 존재하고, 각각의 item에 적용되는 속성 값이 존재한다.
Flexbox에는 중심축과 반대축이 있다.(main axis, cross axis) 개발자가 중심축을 수평이냐, 수직이냐에 두는 것에 따라서 반대축이 바뀐다.
height: 100%; %는 selector의 부모 높이의 100%를 채운다.
height: 100vh; vh는 부모에 상관 없이 item을 보이는 화면에 height의 100%를 다 쓰겠다.
* vh: Viewport Height | vw: Viewport width
CSS 이쁜 색을 사용하고 싶다면 Color tools방문해보자.
.container {
background: beige;
display: flex;
}
.container {
background: beige;
display: flex;
flex-direction: row;
}
.container {
background: beige;
display: flex;
flex-direction: row;
flex-wrap: nowrap
}
.container {
background: beige;
display: flex;
// flex-direction: column;
// flex-wrap: nowrap
flex-flow: column nowrap;
🔺 위에서는 flexbox로 보여주고(flex), 수평을 중심축으로 할 지, 수직을 중심축으로 할 지(flex-direction)결정하고, 한 줄에 가득차면, 다음 줄로 넘어가게 할건지, 안할 건지(flex-wrap)를 알아보았다.
.container {
padding-top: 100px;
background: beige;
height: 100vh;
display: flex;
}
.item {
width: 40px;
height: 40px;
border: 1px solid black;
}
.container {
display: flex;
}
.item1 {
background: #ef9a9a;
order: 2; // 순서가 2번 째로 바뀐다. 자주 쓰이지는 않음.
}
.item2 {
background: #f48fb1;
flex-grow: 1;
// item 크기보다 커지고,
// 페이지 공간을 메운다.
// flex-grow 기본값은 0
}
.item3 {
background: #ce93d8;
flex-grow: 2; //item3이 item1과 .item2보다
// 2배로 커지게 된다.
// 페이지 창을 줄이다보면 모든 item들이 본래 크기로 돌아왔다가 계속 작아진다.
}
.item1 {
background: #ef9a9a;
flex-basis: 60%; // .item1은 60% 공간을 차지한다.
}
.item2 {
background: #f48fb1;
flex-basis: 30%; // .item2은 30% 공간을 차지한다.
}
.item3 {
background: #ce93d8;
flex-basis: 10%; // .item3은 10% 공간을 차지한다.
}
.item1 {
background: #ef9a9a;
flex: 2 2 auto; // grow, shrink, basis를 한 줄에 작성 가능하다.
align-self: center; // .item1만 중심에 배치하고 싶다.
}
.item2 {
background: #f48fb1;
}
.item3 {
background: #ce93d8;
}