CSS로 요소를 정렬하는 플렉스(flex) 속성에 대해 알아봅니다.
display: flex; 속성을 넣어준다..container {
display: flex;
}
.item-first {
width: 300px;
height: 300px;
}
.item-second {
width: 300px;
height: 300px;
}flex container
플렉스 컨테이너
display값을 flex로 지정한 부모요소를 지칭
flex items
플렉스 아이템
flex container의 자식요소들을 지칭
container에 부여하는 속성과 items에 부여하는 속성이 다르다.
Flex Container의 화면 출력(보여짐) 특성
display: flex; : flex container를 블록요소의 속성으로 정의하는 것.
컨테이너 자신은 블록요소처럼 수직으로 쌓임.기본적으로 가로너비 auto값이 지정되어 있음.
플렉스컨테이너로 사용된 요소는, 컨테이너 자신은 블록요소의 성격을 가지고 있어 수직으로 쌓이지만 자식요소가 수평정렬되는 특성을 가지게 됨.
display: inline-flex; : 인라인 요소와 같이 flex container 정의. 컨테이너가 왼쪽에서 오른쪽으로 수평정렬됨. 가로너비가 기본적으로 최소너비를 사용하려고 시도하기 때문에 자식요소의 크기만큼 줄어듦.
컨테이너에 주 축(main-axis)을 설정 (수평정렬/수직정렬 설정)
flex-direction: row; : 행축(수평)정렬 / (좌 → 우) / 기본값
flex-direction: row-reverse; : 수평 반대방향 정렬 / (우 → 좌)
flex-direction: column; : 열축(수직)정렬 / (상 → 하)
flex-direction: column-reverse; : 수직 반대방향 정렬 / (하 → 상)
시작점 start / 끝점 end / 교차축 cross-axis
flex items의 묶음(혹은 줄 바꿈처리)여부를 결정
flex-wrap: nowrap; : 묶음(줄바꿈)없음, 한줄로 정렬 / 기본값flex-wrap: wrap; : 아이템을 여러 줄로 묶음주 축의 정렬 방법. (flex에서는 대부분 수평정렬 할 때 사용함)
아이템의 순서는 바뀌지 않음.
flex-start : flex items를 시작점으로 정렬 (왼쪽정렬) / 기본값flex-end : flex items를 끝점으로 정렬 (오른쪽 정렬)center : flex items를 가운데 정렬아래는 잘 사용되지 않는 값들...
space-between : 각 flex item 사이를 균등하게 정렬space-around : 각 felx의 외부 여백을 균등하게 정렬교차 축의 '여러 줄' 정렬 방법 (대부분 수직정렬)
줄바꿈 상태여야 하니 flex-wrap 속성이 존재해야 하며, 정렬 가능한 빈 공간이 있어야 함
아이템이 한 줄일때는 효과 확인불가, 두 줄 이상일 때만 동작함.
조건을 갖추기가 까다롭기 때문에 활용도가 높지 않음.
stretch : flex items를 시작점으로 정렬 / 기본값
height가 지정되어있지 않으면 아이템들을 '한 줄에서' 최대한 늘려서 사용함.
height가 지정되어 있으면 줄이 넓더라도 아이템들은 위에 붙어있음
flex-start : 모든 아이템들을 시작점에 붙여서 정렬해줌
flex-end : 모든 아이템들을 끝점에 붙여서 정렬해줌
center : 모든 아이템들을 가운데에 모아서 정렬해줌
space-between / space-around
교차 축의 한 줄 정렬 방법.
align-content보다 많이 사용하게 됨
stretch : flex items를 교차 축으로 늘림flex-start : 한 줄에 대한 정렬을 만드는 것이기 때문에, 여러 줄이 있을 경우 첫 줄의 시작지점, 두번째 줄의 시작지점에 각각의 아이템들이 붙어있게 됨.flex-end : 한 줄에 대한 아래부분에 각각의 아이템들이 붙어있게 됨center : 가운데 정렬baseline : flex items를 각 줄의 문자 기준선(영어 소문자를 쓸 때 아래에 있는 기준선)에 정렬flex item이 정렬되는 순서를 정해줌
HTML의 구조를 바꾸지 않고도 요소의 순서를 필요에 따라 쉽게 바꿀 수 있게 함
0: 기본값, 순서 없음숫자 : 숫자가 작을수록 먼저(앞쪽에) 정렬됨ex) A B C D E 순서로 정렬된 요소들을,
.C order: -1;
.E order: 2;
.B order: 17;
로 설정했을 때, C A D E B 순서로 변경됨.
flex item의 증가 너비 비율.
기본 아이템 크기에서 입력한 비율만큼 증가시켜 줌.
컨테이너 내부에서 요소들이 차지하는 공간 외의 나머지 빈 공간을 채우기 위해, 각각의 요소들이 몇의 비율로 채워나갈것인지를 결정
0: 기본값숫자 : 증가비율ex) A B C 순서로 수평 정렬된 요소들을,
.A flex-grow: 1;
하나만 설정했을 때, 각각의 비율이 1:0:0 이므로
B와 C는 기존 크기 그대로 유지, A가 혼자 늘어나며 빈공간을 모두 채움
ex2) A B C
B flex-grow:2;
C flex-grow:1;
A B C의 비율이 0:2:1 이므로,
A는 기존 크기 그대로 유지하고 B와 C가 2:1 비율로 나눠서 나머지 공간을 차지하게 됨
flex item의 감소 너비 비율
요소의 크기가 원래 크기보다 작아지려고 할 때 적용
1 : Flex Container 너비에 따라 감소하는 비율 있음 (비율 적용) / 기본값 0 : 감소너비를 사용하지 않음. 컨테이너가 줄어도 요소의 너비 유지숫자 : 감소 비율ex) A B C
각각의 아이템에는 flex-shrink 기본값이 1로 지정되어 있기 떄문에
따로 설정하지 않았다면 컨테이너의 가로너비가 점점 줄어들면서 요소도 찌그러들게 됨
flex-shrink:0; 으로 지정했다면 요소 부분을 제외한 나머지 컨테이너 공간만 줄어듦
flex item의 공간 배분 전 기본 너비
auto : 글자 등, 요소의 content(내용) 너비 / 기본값단위 : px, em, rem 등 단위로 지정A { flex-basis: auto;
flex-grow: 1; }
B { flex-basis: auto;
flex-grow: ;}
C { flex-basis: auto;
flex-grow: ;}
일 때, 요소의 content 너비 밖의 '나머지 공간'을 1:1:2 의 비율로 나눠가짐.
A B C의 내용 텍스트 길이가 각각 다르다면,
실제 차지하고 있는 너비는 1:1:2가 아니게 됨.
때문에 내용 텍스트의 길이와 상관 없이 요소 전체의 넓이 비율을 1:1:2로 맞추기 위해서는
flex-basis:0; 을 지정해준다.
기본 너비가 없는 것이니 전체 요소의 실제 비율만 계산해 표시해준다.