본문 바로가기
Programming Step/CSS

CSS Flexbox 정리

by eclipse7727 2021. 6. 20.

1. Flex가 필요한 이유

일반적으로 웹페이지의 레이아웃은 display, float 등과 같은 속성을 사용해 구현한다.

하지만 이 속성을 사용하면 구현 방법이 복잡하고 레이아웃을 표현하는데 한계가 있었다.

css3에 추가된 레이아웃인 flexbox를 이용하면 가로 및 세로의 사이즈를 따로 계산하지 않고도 간결하게 레이아웃을 표현할 수 있다.

 

2. flex 기본 요소

2.1 Container와 Items

flex는 크게 Container와 Items로 나뉜다.

 

2.2 주축(main-axis)과 교차축(cross-axis)

주축과 교차 축으로 설명하는 요소들이 많으므로 알아두는것이 좋다.

2.3 flex-start 와 flex-end

주 축이나 교차 축의 시작하는 지점과 끝나는 지점을 지칭한다.

 

3. Flex Container

3.1 Container 기본요소

 

속성 의미
display Flex Container를 정의
justify-content 주 축(main-axis)의 정렬 방법을 설정
align-content 교차 축(cross-axis)의 정렬 방법을 설정
flex-direction Flex Items의 주 축(main-axis)을 설정
flex-wrap Flex Items의 여러 줄 묶음(줄 바꿈) 설정
flex-flow flex-direction와 flex-wrap의 단축 속성
align-items 교차 축(cross-axis)에서 특정 Items의 정렬 방법을 설정

 

3.2 Display

먼저 display 속성으로 flex 컨테이너라는 것을 정의한다.

1
2
3
.container {
  display: flex; /* or inline-flex */
}
cs

 

flex Block 특성의 Flex Container를 정의
inline-flex Inline 특성의 Flex Container를 정의

 

inline 특성과 Block특성에 대해 알아보려면 공식문서를 들어가보자.



3.3 justify-content 속성 

주축의 요소들을 정렬하는데 사용한다.

 

flex-start : 요소들을 컨테이너의 왼쪽으로 정렬한다.

 

flex-end : 요소들을 컨테이너의 오른쪽으로 정렬한다.

 

center : 요소들을 컨테이너의 가운데로 정렬한다.

 

space-between : 요소들 사이에 동일한 간격을 둔다.

 

space-around : 요소들 사이에 동일한 간격을 두고 , 좌우 끝에 요소 사이 간격의 반만 둔다.

 

 

space-evenly : 요소들과 좌우 끝의 간격을 일정하게 둔다.

3.4 align-contents 속성

교차 축 정렬 방법을 설정한다.

 

의미 기본값
stretch Container의 교차 축을 채우기 위해 Items를 늘림 stretch
flex-start Items를 시작점(flex-start)으로 정렬  
flex-end Items를 끝점(flex-end)으로 정렬  
center Items를 가운데 정렬  
space-between 시작 Item은 시작점에, 마지막 Item은 끝점에 정렬되고 나머지 Items는 사이에 고르게 정렬됨  
space-around Items를 균등한 여백을 포함하여 정렬  

 

3.5 flex-direction 속성

Items의 주 축을 설정한다.

 

의미  기본 값
row Items를 수평축(왼쪽에서 오른쪽으로)으로 표시  row
row-reverse Items를 row의 반대 축으로 표시   
column Items를 수직축(위에서 아래로)으로 표시  
column-reverse Items를 column의 반대 축으로 표시  

3.6 flex-wrap 속성

flex 요소들을 한줄에 강제 또는 컨테이너 안에서 여러줄로 나누어 표현할 수 있는지 여부를 설정한다.

 

nowrap: 모든 요소들을 한 줄에 정렬합니다. / default값 이다.

 

wrap: 요소들을 여러 줄에 걸쳐 정렬합니다.

 

wrap-reverse: 요소들을 여러 줄에 걸쳐 반대로 정렬합니다.

 

3.7 flex-flow 속성

flex-direction, flex-wrap을 간략화한 속성이다

- 공백문자를 이용하여 두 속성의 값들을 인자로 받습니다

- flex-flow <flex-direction> <flex-wrap>

- ex) flex-flow column wrap

 

3.8 align-items

세로선 상의 여분이 있는 경우 flex 컨테이너 사이에 간격을 조절합니다.

- align-content를 사용하여 여러 줄 사이의 간격을 지정할 수 있다.

- flex-start: 여러줄을 컨테이너의 꼭대기에 정렬합니다.

- flex-end: 여러줄을 컨테이너의 바닥에 정렬합니다.

- center: 여러줄을 세로선 상의 가운데에 정렬합니다.

 

- stretch: 여러줄을 컨테이너에 맞도록 늘립니다.



4. Flex Items 

4.1 Items 기본요소

 

속성 의미
order Flex Item의 순서를 설정
flex flex-grow, flex-shrink, flex-basis의 단축 속성
flex-grow Flex Item의 증가 너비 비율을 설정
flex-shrink Flex Item의 감소 너비 비율을 설정
flex-basis Flex Item의 (공간 배분 전) 기본 너비 설정
align-self 교차 축(cross-axis)에서 Item의 정렬 방법을 설정

 

4.2. order 속성

flex 요소의 순서를 지정한다.

- order : <integer> (... -1, 0 (default), 1, ...)

ex) 

1
order : -1 0 1 1 17;
cs

 

4.3 flex

Item의 너비 (증가, 감소, 기본)를 설정하는 단축 속성이다.

 

의미 기본값
flex-grow Item의 증가 너비 비율을 설정 0
flex-shrink Item의 감소 너비 비율을 설정 1
flex-basis Item의 (공간 배분 전) 기본 너비 설정 auto

 

flex : <증가> <감소> <기본px> ;

1
2
3
4
.item {
  flex : 1 1 20px
  flex : 1 30px // <증가> <감소 없음>
}
cs

4.3.1 flex-grow

Item의 증가 너비 비율을 설정

flex로 사용을 권장함.

각각의 flex-grow 값이 1 2 1 / 1 3 2 였을 시 아래와 같다.

 

 

4.3.2 flex-shrink

Item의 감소 너비 비율을 설정

width, height, flex-basis 등으로 지정된 너비가 지정된 경우 상위 요소 너비에 영향을 받는다.

Container의 너비가 줄어 Item의 너비에 영향을 미치면 영향을 미치기 시작한 지점부터 줄어든 거리만큼 비율에 맞춰 감소한다.

 

왼쪽 첫 번째 Item은 90px의 2/3인 60px 만큼 너비가 감소하고,

왼쪽 두 번째 Item은 90px의 1/3인 30px 만큼 너비가 감소합니다.

 

오른쪽 첫 번째 Item은 90px의 4/5인 72px 만큼 너비가 감소하고,

오른쪽 두 번째 Item은 90px의 1/5인 18px 만큼 너비가 감소합니다. 

4.3.3 flex-basis

Item의 (공간 배분 전) 기본 너비 설정

<주의사항> flex에서 flex-basis의 값을 생략하면 값이 default값인 auto가 아닌 0으로 설정 되며 크기가 달라질 수 있다.

 

4.4 align-self 속성

지정된 align-items의 값을 무시하고 flex 요소를  교차 축 에서 정렬한다.

 

의미 기본 값
stretch Container의 교차 축을 채우기 위해 Items를 늘림 stretch
flex-start Items를 각 줄의 시작점(flex-start)으로 정렬  
flex-end Items를 각 줄의 끝점(flex-end)으로 정렬  
center Items를 가운데 정렬  
baseline Items를 문자 기준선에 정렬  

 



[1]~[4] https://heropy.blog/2018/11/24/css-flexible-box/

[1]~[4] https://developer.mozilla.org/en-US/docs/Web/CSS

[1]~[4] https://flexboxfroggy.com/#ko

 

 

반응형

'Programming Step > CSS' 카테고리의 다른 글

CSS - 3D 윷 제작  (0) 2021.06.21

댓글