CSS Flexbox

시간배분을 잘못하고, 나중에 봐도 괜찮았을 애니메이션부분을 한번 보느랴(다 이해하지도, 정리하지도 못했다.) 입안이 부르텄다. 체력적인 한계는 무한인데 내입안은 무한이 아닌가보다. 잘먹고 잘자고 잘놀고의 법칙 중 세가지 다 못지키고 있다. 시간이 날 때 다른 방안을 연구해봐야겠다. 일단은 지금은 현재 할 수 있는일에 집중하기 위해 달리자.

1. Flexbox

최근에 추가된 개념으로 동적인 뷰를 구성할 수 있게한다.

2. Flex Model

  • main axis: 기본방향 왼쪽에서 오른쪽
  • cross axis

3. Flex Direction

방향

  • default: row
  • value
    • row: 기본값, 좌로붙어 좌에서 우로 정렬
    • row-reverse: 우로붙어 우에서 좌로 정렬
    • column: 위로붙어 상하로변경 상에서 하로 정렬
    • column-reverse: 아래로붙어 상하로변경 하에서 상으로 정렬

      다른 설정을 하지않은 기본값을 가정할 때, 크기의 경우 부모뷰의 크기가 자식들을 다 담고도 남으면 자식뷰들은 정해진 뷰만 출력. 부모뷰의 크기가 자식들을 다 담지 못할 때는 스크롤에 따라서 부모뷰는 줄어들게된다.

4. Justify Content

주축을 기준으로 요소와 컨텐츠를 어떻게 배치할지 결정하는 속성

  • default: flex-start
  • value
    • flex-start
    • flex-end
    • center
    • space-between: 0-1-1-0 부모안에서 요소끼리 공간을 동일하게 나눠서 배치
    • space-around: 0.5-1-1-0.5 부모와의 공간에서 공백을 절반 나누어 배치
    • space-early: 1-1-1-1 부모와의 공간에서도 공백을 요소끼리와 동일하게 나누어 배치

5. Flex Wrap

부모를 넘어설 때 새로운 행이나 열로 요소를 정렬함.

  • default: nowrap
  • value
    • nowrap: 부모를 넘어설때 정해준 규칙에 따라 공간을 나눠가짐.
    • wrap: 좌에서 우로, 상에서 하로
    • wrap-reverse: 우에서 좌로, 하에서 우로

6. Align Items

교차축의 시작점을 기준으로 아이템을 정렬한다.

  • default: flex-start
  • value
    • flex-start
    • flex-end
    • center: 요소들의 크기가 제각각이라도 제각각의 센터를 부모의 센터로 맞춘다.
    • baseline: font의 기준선에 맞추서 정렬한다.

7. Align Content

행이나 열이 여러개일때 교차축을 기준으로 정렬한다.
flex-wrap을 적용하지 않은 채 행이나 열이 단 하나라면 적용되지 않는다.

8. Align Self

Align Content와 비슷하지만 flex 컨테이너에서 두개의 요소에 개별로 사용한다. flex 컨테이너 자체가 아닌 개별 요소에 적용할 때 사용한다.
교차축을 기준으로 배열된 단일 요소의 위치를 바꿀 수 있다.

9. Flex Sizing Properties

9.1. Flex Basis

요소가 배치되기 전에 요소의 최초 크기를 결정한다. 플렉스 컨테이너에 추가되기 전 시작점과 같은 것이다.

9.2. Flex Grow

공간이 있을 때 요소가 그 공간을 얼마나 차지할지 결정한다.

<!-- 각요소마다 flex-grow값이 없음(초기값 0) -->
|---|-a-|-b-|-c-|-d-|---|

<!-- a에 flex-grow: 1; -->
|----a-|-b-|-c-|-d-|---|

<!-- d에 flex-grow: 1; -->
|----a-|-b-|-c-|-d----|
  • 남는공간을 나눠가진다.
  • flex-wrap이 설정되 있을때 지정된 크기 이하로 작아지면 flex-wrap설정에 따라 행이나 열이 밀려서 바뀐다.
  • min-width, max-width, min-height, max-height

9.3. Flex Shrink

컨테이너에 충분한 공간이 없을 때, 요소들이 줄어드는 비율을 정한다.

  • 몇 px까지 줄도록하는게 아니라, 다른 요소에 비해 얼마나 더 줄어들지 설정한다.

9.4. Flex Shorthand

축약법

/* Keyword values */
flex: auto;
flex: initial;
flex: none;

/* one value, unitless number: flex-grow */
flex: 2;

/* one value, width/height: flex-basis */
flex: 10em;
flex: 30%;
flex: min-content;

/* two values: flex-grow | flex-basis */
flex: 1 30px;

/* two values: flex-grow | flex-shrink */
flex: 2 2;

/* Three values: flex-grow | flex-shrink | flex-basis */
flex: 2 2 10%;

/* Global values */
flex: inherit;
flex: initial;
flex: unset;

참조

MDN:CSS/Flexbox
MDN:CSS/Value & Unit
MDN:CSS/FlexibleBox
MDN:CSS/FlexibleBox Layout & Other Layout Methods
MDN:CSS/grid