개발(Web)/Web

[CSS] Flex Box - Flex Item

shinyelee 2022. 1. 14. 09:30

Making Layouts - Flex Box (2)

Flex Item

flexbox 정렬에 영향을 미치는 속성. flex container와 달리 부모(container)가 아니라 자식(item, box)에 직접 설정해야 한다. flex container에 대한 설명은 아래 링크에서 읽어보면 된다.

 

Flex Container

Flex Container 부모(container)가 display:flex일 때, 부모에게 설정하면 그 자식(box)의 정렬에 영향을 미치는 속성. flex-direction flex-wrap flex-flow flex-direction과 flex-wrap을 함께 사용할 때, fle..

shinye0213.tistory.com

align-self

align-items, align-content와 비슷하므로 자세한 설명은 생략. 말 그대로 self니까 부모가 아니라 자기 자신, box 하나 단위로 정렬한다는 게 가장 큰 차이점이다.

align-self: auto; (기본값) 1, 2, 4, 5번 box는 위치가 고정돼 있다. 가운데 3번 box 하나의 변화만 보면 된다.
align-self: flex-start;
align-self: flex-end;
align-self: center;
align-self: baseline;
align-self: stretch;


flex-grow

flex-grow는 box가 main axis 방향으로 늘어나는 정도를 의미한다. 각 box의 기본값은 0이며 보통 자연수 단위로 조정한다.
1번 box에 flex-grow: 1;을 적용하면 남는 공간을 1번 box 혼자서 다 채운다.
2번에도 flex-grow: 1;을 적용하면 남는 공간을 1번과 2번이 1:1의 비율로 나눠 갖는다.
여기서 5번이 flex-grow:5;가 되면 1번, 2번, 5번은 남는 공간을 각각 1:1:5 비율로 가져간다.

flex-shrink

flex-grow는 box가 main axis 방향으로 줄어드는 정도를 의미한다. 각 box의 기본값은 1이며 보통 자연수 단위로 조정한다.
3번 box에 flex-shrink: 3;을 적용했다. 해당값은 flex-grow처럼 상대적인 축소비인거지, 3번의 width가 다른 box의 1/3이 되는 게 아니다.
4번에 flex-shrink: 10;을 적용했다. 참고로 flex-shrink: 0;이면 box의 최소 width가 flex-basis값이 된다(더 안 줄어들고 잘림).

flex-basis

grow나 shrink되기 전 최초 크기. flex-direction이 column이 되면 가로-세로가 뒤바뀐다.

flex-basis: auto;는 기본값.
flex-basis: 0;은 width를 최소화하고 box 내 텍스트를 개행한다.
flex-basis: 200px;은 이미 지정한 box의 width: 100px;보다 우선한다.

flex (1)

flex를 잘 사용하면 flex-grow, flex-shrink, flex-basis 모두 코드 한 줄 안에 지정할 수 있다.

flex: flex-grow값 flex-shrink값 flex-basis값; 순으로 설정하면 된다.
flex-basis값이 0(기본값)이면 box의 width를 무시하고 부모 전체 width를 flex-grow 수치로 나눈다.


flex (2)

flex: none;과 flex: initial; 그리고 flex: auto;

flex: none;과 flex: initial;은 여백을 채우지 않는다는 공통점을 가진다.
부모의 width가 줄어들면 initial의 width도 줄어든다. 반면에 none은 잘려서 표현될지라도 width를 줄이지 않는다.
flex: auto;는 자동으로 여백을 균등하게 채운다.
부모의 width가 줄어들면 auto의 width도 같이 줄어든다.
flex: auto;는 여백을 채우고, flex: none;은 아무런 변화가 없다.
부모의 width가 줄어들면 auto의 width도 줄어든다. none은 width를 줄이지 않는다.
flex: auto;는 여백을 채우고, flex: initial;은 여백을 채우지 않는다.
부모의 width가 줄어들면 처음에는 auto의 width만 줄어들다가
auto와 initial의 width가 같아지면
auto와 initial 모두 width가 줄어든다.

단위 없는 양의 수를 사용함

각각 flex: 4; flex: 2; flex: 1;을 적용한 모습이다.
flex-shrink처럼 숫자만큼의 축소비를 유지하며 width를 줄인다.


order

HTML을 바꿀 수 없을 때, order를 사용하면 임의로 순서를 바꿀 수 있다. 기본값은 order: 0;이며 정수를 이용해 우선 순위를 정한다.
3번 box는 order: 1;이며 나머지 box들은 기본값(0)이다. order는 main axis 방향으로 box들을 order값(오름차순)으로 정렬한다.
2번 box에 order: 2;를 적용했다. order값 [0, 0, 0, 1, 2] 순으로 정렬하기 때문에 box 배열은 1번-4번-5번-3번-2번 순이 된다.
4번 box에 order: -1;을 적용했다. [-1, 0, 0, 1, 2] 순으로 정렬하면 4번-1번-5번-3번-2번 순이 된다.


(번외) Flexbox Froggy

flex container와 flex item을 제대로 이해했다면 아래 게임을 해 보자. 24레벨이 조금 어렵지만 할 수 있다!

 

Flexbox Froggy

A game for learning CSS flexbox

flexboxfroggy.com


참고

 

Flexbox playground

...

codepen.io

 

flex - CSS: Cascading Style Sheets | MDN

flex CSS 속성은 하나의 플렉스 아이템이 자신의 컨테이너가 차지하는 공간에 맞추기 위해 크기를 키우거나 줄이는 방법을 설정하는 속성입니다.

developer.mozilla.org

반응형

'개발(Web) > Web' 카테고리의 다른 글

[CSS] Grid Container  (0) 2022.01.16
[CSS] Grid Layout Module  (0) 2022.01.15
[CSS] Flex Box - Flex Container  (0) 2022.01.13
[CSS] Row와 Column, Main Axis와 Cross Axis  (0) 2022.01.12
[CSS] Display와 Floats  (0) 2022.01.11