flexbox는 행과 열 형태로 항목 무리를 배치하는 일차원 레이아웃 메서드이다. 항목은 부족한 공간에 맞추기 위해 축소되거나 여분의 공간을 채우기 위해 변형된다.
main axis
cross axis

만약 flex-direction : column이라면 주축은 y축이 되고 교차축은 x축이 된다.
또한 reverse이면 flex-start는 flex-end처럼, flex-end는 flex-start처럼 반대로 적용이 된다.

display : 블록과 인라인요소 중 어느 쪽으로 처리할지와 함께, flow, grid, flex처럼 자식요소를 배치할 때 사용할 레이아웃을 설정한다.
display : flex로 하면 요소를 flex로 적용한다는 뜻이다.
outside : 외부 디스플레이 유형을 설정하는 키워드
inside : 요소의 내부 디스플레이 유형을 설정하는 키워드display : inline-flex 이렇게 적용을 하면 외부 디스플레이 유형은 inline 내부 디스플레이 유형은 flex로 적용가능하다. 밖에 요소들과의 관계와 안쪽 관계를 한번에 적용가능하다.
row : 한 행인 형식. 기본값
row-reverse : 한 행인 형식이고 역방향
column : 한 열인 형식. 내려가는 형식
column-reverse : 한 열인 방식이고 역방향
nowrap : 기본값이다. 줄바꿈 하지 않는다.
wrap : 영역을 초과할 경우 줄바꿈 한다.
위에 결과는 nowrap 즉, 기본값일 때 결과이다. 각 영역은 width가 50px이지만 전체 영역인 container가 160px이라 줄바꿈되어 2줄로 될 것 같지만 160px에 맞춰서 각 영역들 넓이가 적용이 된다. 즉, 선언한 50px값이 적용이 되지 않는다.
위에는 flex-wrap를 wrap로 적용한 결과이다. width 160px을 초과하여 2번째 줄에 item들이 나열된 것을 확인할 수 있다.
4번째와 5번째에 order : -1을 적용했을때 초기값이 0이기 때문에 4번째, 5번째 div가 1번째 div앞에 오게 된다. 6번째 div에는 -2를 적용했기 때문에 제일 작은 값이므로 제일 앞에 오게 된다. order는 값에 따라 정렬을 할 수 있다.
자식요소에 flex-grow : 1을 적용한 결과이다. 그러면 남은 결과를 자식들 끼리 1:1 비율로 나눠가진다는 뜻이다.
근데 위에 결과에서는 두번째 줄에만 나눠 가지는 이유는 flex-wrap을 적용하였기 때문이다.
즉, 첫번째 줄은 첫번째 줄 자식들끼리 남은 공간은 나눠 가지고 두번째 줄은 두번째 줄 자식들 끼리 남은 공간을 나눠 가지는 것이다.
flex는 주의해야하는 점이 있다.
만약, grow, shrink를 0, 1로 지정하면 basis는 지정하지 않았기 때문에 basis가 auto값이 되지 않는다.
따라서, 값을 입력한 키워드만 적용이 된다. 값을 두개만 입력하면 grow, shrink만 적용이 된다.
flex-start : 주축 시작이 되는 위치부터 정렬하겠다 라는 뜻이다.
flex-end : 끝에서부터 정렬하겠다 라는 뜻이다.
center : 가운데 정렬
space-between : 사이에 간격들이 동일하게 나누고 배치 첫번째와 마지막 요소는 딱 붙어있다.
space-around : 간격들이 동일하게 나누어 배치되고 첫번째와 마지막은 동일하게 나누어진 간격에 절반이 앞뒤에 공간이 생긴다.
wrap으로 적용하여 여러줄이면 사실상 각 줄의 영역을 container로 본다. 그래서 이 상태에서 align-items center를 하면 각각의 줄을 컨테이너로 보면 그 줄의 가운데에 배치하게 된다.
flex-start: 교차축에 첫번째에 위치하겠다.
flex-end : 교차축에 마지막에 위치하겠다.
center : 가운데에 정렬하겠다
align-items는 space-between, space-around 사용이 불가능하다.
align-items와 align-content가 헷갈리면 쉽게 여러줄이면 align-content를 사용하고 한줄이면 align-items를 사용한다고 생각하면 된다.
flex-start : 교차축 시작점에 딱 붙는다.
flex-end : 교차축 끝에 딱 붙는다.
center : 가운데에 정렬
align-content는 space-between과 space-around 사용이 가능하다.
뒤에 content가 붙으면 space-between과 space-around 사용이 가능하다고 생각해도 될 것 같다.
예시로
nth-child(4){
align-self : flex-grow
}
를 하게 된다면 그 요소만 시작점에 위치하게 된다.