flex layout은 요소들이 포함된 큰 박스에 flex를 선언하고, 안에 있는 요소들에게는 유연하게 배치하는 속성들을 부여하여 레이아웃을 잡는 것입니다.
display: flex;
위의 구문은 해당 요소에 flex로 레이아웃을 설계한다고 선언한다는 뜻입니다.
flex 속성
부모 요소인 flex container 와 자식 요소인 flex item이 있습니다.
container가 flex의 영향을 받는 전체 공간이고, 설정된 속성에 따라 각각의 item들이 어떤 형태로 배치되는 것이라고 생각하시면 됩니다.
flex container
: 컨테이너에 적용하는 속성
- display
- flex-direction
- flex-wrap
- flex-flow
- justify-content
- align-items
- align-content
flex-direction
자식 요소를 나열하는 방향을 지정하는 속성입니다.
속성 값 | 속성 설명 |
column | 위에서 아래로 나열 |
column-reverse | 아래에서 위로 나열 |
row (기본값) | 좌측에서 우측으로 나열 |
row-reverse | 우측에서 좌측으로 나열 |
justify-content
공간이 남을 때, 즉 flex-grow : 0; 일 때 자식 요소들을 가로 정렬하는 속성입니다.
속성 값 | 속성 설명 |
flex-start (기본값) | 시작쪽으로 정렬 (보통 왼쪽, flex-direction: row-reverse 일 때는 오른쪽) |
flex-end | 끝쪽으로 정렬 (보통 오른쪽, flex-direction: row-reverse 일 때는 왼쪽) |
center | 중앙으로 정렬 |
space-between | 양쪽 정렬 |
space-around | 요소 좌우 동일 간격 |
flex-wrap
flex 자식 요소들의 줄바꿈 방식을 지정하는 속성입니다.
속성 값 | 속성 설명 |
wrap | 자식 요소들이 많으면 다음 줄로 넘침 |
nowrap (기본) | 자식 요소들이 많아도 한줄 안에 배치됨 |
wrap-reverse | 자식 요소들이 많으면 다음 위 줄로 넘침 |
flex-flow
flex-direction과 flex-wrap을 나란히 붙여 하나의 속성처럼 쓸 수 있습니다.
그러므로 기본값은 flex-flow:row nowrap;입니다.
align-items
자식 요소들을 세로 정렬하는 속성입니다.
속성 값 | 속성 설명 |
flex-start | 시작쪽으로 정렬 (보통 위쪽, flex-direction: column-reverse일 때는 아래쪽) |
flex-end | 끝쪽으로 정렬 (보통 아래쪽, flex-direction: column-reverse일 때는 위쪽) |
center | 세로 중앙 정렬 |
baseline | 글자의 baseline 기준으로 정렬 |
stretch (기본값) | 부모 요소의 세로 크기를 따라 확장됨 |
align-content
flex-wrap: wrap;일 경우 여러 줄을 세로로 정렬하는 속성입니다.
속성들은 align-items의 속성들과 같습니다.
flex item
: item에 적용하는 속성
- flex-grow
- flex-shrink
- flex-basis
- flex
- align-self
- order
flex-grow
자식 요소가 적거나 그 크기가 작아 공간이 남을 때 항목의 크기를 늘려 채워주는 방법을 정의합니다.
속성 값 | 속성 설명 |
0 | (기본값) |
1 | 항목들이 모두 1이면 같은 크기임 |
양수 | 값을 높게 줄수록 더 늘어남 공간이 부족할 때는 어떤 값도 무의미 |
flex-shrink
자식 요소가 많거나 그 크기가 커서 공간이 부족할 때 각 항목의 크기를 줄여 채워주는 방법을 정의합니다.
속성 값 | 속성 설명 |
0 | 공간이 부족해도 항목의 크기를 줄일 수 없음 |
1 | (기본값) - 자식 요소들이 많아서 컨테이너를 넘치면 안 넘치게 알아서 좁아짐 |
양수 | 값을 높게 줄수록 더 좁아짐. (내부적으로 수축지수가 자동 계산됨) 공간이 남을 때는 어떤 값도 무의미 |
flex-shrink 속성의 기본값은 '1'이기 때문에 자식 요소는 기본적으로 좁아집니다.
flex-basis
flex 자식 요소들의 초기 길이를 지정하는 속성입니다.
flex에서는 width 속성을 주지않고, 대신 flex-basis를 사용합니다.
속성 값 | 속성 설명 |
auto | (기본값) |
50px, 100px, ... | 원하는 가로 크기를 부여함 |
자식 요소들이 늘어나지도 줄어들지도 않고 원래의 크기 (100px) 를 가지기 원한다면 flex : 0 0 100px로 지정합니다.
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: 1; 이런 식으로 flex-basis를 생략해서 쓰면 flex-basis의 값은 0이 됩니다.
order
자식 요소들의 순서를 바꿔주는 속성입니다. 몇 번째에 배치할지 순서를 지정합니다.
속성 값 | 속성 설명 |
0 (기본값) | 순서를 바꾸지 않음 |
양수 | 원하는 순서를 지정 |
음수 | 좌측으로 자리를 바꾸는 횟수 |
align-self
자식 요소 중 선택된 항목에 대해서만 세로로 다시 정렬하는 속성입니다.
.item {
align-self: auto;
/* align-self: strech; */
/* align-self: flex-start; */
/* align-self: flex-end; */
/* align-self: center; */
/* align-self: baseline; */
}
기본값은 auto로, 속성들은 align-items의 속성들과 같습니다.