선택자 {display: flex;}
display
에 flex
를 설정해 주면 코드의 자식 요소가 가로 정렬로 바뀌게 됩니다.
정확히 말하자면 수평된 주축을 기점으로 시작점에서 끝점 방향으로 자식 요소들이 정렬하게 됩니다.
여기서 flex를 설정해준 코드는 flex container
, 설정해준 코드의 자식 요소는 flex items
로 불립니다.
inline-flex
는 flex container
를 block요소 처럼 세로로 쌓이는게 아닌 inline 요소의 특징처럼 가로로 쌓이게 만들 수 있습니다.
display:flex
와의 차이점은 이러한 정렬 요소가 있습니다.
💡 flex container
가 inline 요소처럼 정렬되는 것이지 그 안에 자식 요소인 flex items
는 관계가 없다.
종류 | 사용 가능한 속성 |
---|---|
flex container | flex-flow |
flex-direction | |
flex-wrap | |
justify-content | |
align-content | |
align-items | |
flex items | order |
flex | |
flex-grow | |
flex-shrink | |
flex-basis | |
align-self |
주 축을 설정해 줍니다.
기본 속성값은row
입니다.
row | row-reverse | colum | column-reverse |
---|---|---|---|
좌측 > 우측 | 우측 > 좌측 | 위 > 아래 | 아래 > 위 |
행(수평 정렬) | 행(수평 정렬) | 열(수직 정렬) | 열(수직 정렬) |
시작점과 끝점이 반대로 바뀜 | 시작점과 끝점이 반대로 바뀜 |
💡 reverse로 시작점과 끝점이 반대로 바뀌면 flex items
의 정렬 순서도 1, 2, 3이 아닌 3, 2, 1순으로 정렬이 된다.
flex items
의 줄 바꿈 여부를 결정해 줍니다.
기본 속성값은nowrap
입니다.
그냥display:flex
를 적용하면 기본값인nowrap
때문에items
들의 가로사이즈가 부모 사이즈를 초과해도 화면에 줄 바꿈 없이 구겨지면서 꽉 채워진다.
하지만wrap
으로 설정을 해주면 부모 사이즈에items
들이 다다랐을 때 아래로 줄 바꿈이 된다.
nowrap | wrap |
---|---|
줄 바꿈 없음 | 여러 줄로 바꿔줌 |
nowrap
적용 화면 (items
가 구겨진다.)
wrap
적용 화면 (줄 바꿈이 되었다.)
주 축의 정렬 방법입니다.
기본 속성값은flex-start
입니다.
💡 주 축이 바뀌는게 아니기 때문에 itmes
들의 순서는 바뀌지 않는다!
flex-start | flex-end | center | space-between | space-around |
---|---|---|---|---|
items를 시작점으로 정렬 | items를 끝점으로 정렬 | items를 가운데 정렬 | 각 items 사이를 균등하게 정렬 | 각 items의 외부 여백을 균등하게 정렬 |
교차 축(수직)의 여러 줄 정렬 방법입니다.
기본 속성값은stretch
입니다.
💡
1. stretch
에서 items
의 height
값이 없다면 items
들이 화면의 세로값을(height:auto) 꽉 채워서 출력이 됩니다.
2. align-content
는 items
가 flex-wrap:wrap
을 통해서 두 줄 이상일 때 작동을 합니다.
그리고 flex container
안에 빈 여백이 있어야 작동합니다.
3. 여러 줄을 한 번에 정렬 시키기 용이합니다.
stretch | flex-star | flex-end | center | space-between | space-around |
---|---|---|---|---|---|
items를 시작점으로 정렬 | items를 시작점으로 정렬 | items를 끝점으로 정렬 | items를 가운데 정렬 | 각 items 사이를 균등하게 정렬 | 각 items의 외부 여백을 균등하게 정렬 |
교차 축(수직)의 한 줄 정렬 방법입니다.
기본 속성값은stretch
입니다.
💡
한 줄씩 정렬하는 방법이기 때문에 flex-wrap:wrap
을 통하여 items
가 여러 줄로 구성되었다면, 각 줄마다 시작점과 끝점이 존재하고 그 점을 기준으로 속성을 넣을 수 있습니다.
wrap
적용 후 align-items
를 사용했을 때 시작점과 끝점이 한 줄마다 생기는 화면
stretch | flex-star | flex-end | center | baseline |
---|---|---|---|---|
items를 시작점으로 정렬 | items를 시작점으로 정렬 | items를 끝점으로 정렬 | items를 가운데 정렬 | 각 items 사이를 각 줄의 문자 기준선(baseline)에 정렬 |
flex items
의 정렬 순서를 정해줍니다.
기본 속성값은0
입니다.
💡 HTML
구조를 바꾸지 않고 items
들의 순서를 그때그때 바꿀 수 있다는 장점이 있습니다.
0 | 숫자 |
---|---|
정렬 순서가 정해지지 않음 | 숫자가 작을 수록 먼저 정렬(음수도 가능합니다.) |
flex items
의 증가 너비 비율을 설정해 줍니다.
기본 속성값은0
입니다.
💡
1. flex-grow
를 items
들 중 한개에만 값을 주게 된다면 flex container
를 차치하는 너비값에서 다른 items
들의 너비값을 제외한 여백을 해당 비율로 채우게 됩니다.
2. 비율은 items
안에 있는 내용들의 너비를 포함하지 않고 계산이 되기 때문에, 내용들의 너비를 무시하기 위해서 아래에 나올 flex-basis: 0 ;
을 사용해줘야 한다.
첫 번째 items
에만 flex-grow: 1 ;
로 값을 할당한 화면.
0 | 숫자 |
---|---|
증가하는 비율이 정해지지 않음(없음) | 증가 비율을 정해줌 |
flex items
의 감소 너비 비율을 설정해 줍니다.
기본 속성값은1
입니다.
💡 flex-shrink: 0 ;
을 입력해 주면, 감소하는 비율이 없기 때문에 flex container
가 줄어도 items
의 너비는 줄지 않기 때문에 items
가 구겨지지 않고 화면에 짤리는 듯이 보인다.
웹사이트 반응형을 개발할 때 유용한 코드가 될 것 같습니다.
1 | 숫자 |
---|---|
flex container 너비가 줄여지면 items 의 너비가 구겨지면서 감소 | 감소 비율을 정해줌 |
flex-items
의 공간 배분 전 기본 너비를 말합니다.
기본 속성갑은auto
입니다.
💡 items
의 비율을 일정하게 사용하기 위해서 flex-basis
를 그냥 사용하게 되면 items
에 들어있는 내용들, 즉 텍스트나 이미지 등의 너비 영향을 받아서 비율이 망가지게 된다.
이러한 현상에는 flex-basis
의 값을 0
으로 설정해준다면 내용의 너비는 무시한 체 items
가 각각 일정한 비율을 가질 수 있다.
auto | 단위 |
---|---|
요소의 내용(content) 너비 | px, em, rem 등 단위로 지정해줌 |