Flex란 요소들을 웹 페이지에 배치시키위해 탄생한 기능이다.
기본적으로 Flex는 container와 item들로 구성되어 동작한다.
Container : Flex로 설정할 상위요소로 자식요소들은 기본적으로 수평 정렬 된다.
Item: Container의 모든 자식 요소들은 자동적으로 Flex-item으로 설정된다.
Flex-Wrap : item들이 container의 1줄 영역에서 넘치는 것을 대비해 여러줄에 item을 배치할지 결정하는 property
Main axis: Item을 정렬하는 데 있어서 기준이 되는 방향으로 flex-direction에 따라 결정된다.
justify-content | align-content | align-items |
---|---|---|
주축으로 item들을 정렬하는 property | 여러 줄에 대해 item들을 교차축으로 정렬하는 property로 wrap property를 설정해야 동작!1 | 1줄에 대해 교차축으로 item들을 정렬하는 property |
Flex는 주로 수평정렬에 쓰이기에 item속성에 소홀해 질 수 있지만 item 속성도 layout만큼이나 중요하다!
Flex-item의 초기 속성은 flex: 0 1 auto
flex-grow | flex-shrink | flex-basis | |
---|---|---|---|
default value | 0 | 1 | Auto |
visible actions | 브라우저 크기가 커짐에 반응 X | 브라우저 크기가 작아짐에 반응 O | 일반 width처럼 동작하지만 inline이 된 것처럼 줄바꿈이 일어나지 않음 |
실제 행동 | container 내부의 여백을 차지하도록 item이 커지지 않음 | Container < item일 때, item을 축소 O | width값 ?? auto와 같이 동작 |
Flex-grow : item이 container에서 남은 영역에 대해 차지하는 정도/비율을 지정하는 property
Flex-shirnk : container의 영역보다 item의 크기가 커진 경우 overflow 하지 않도록 해당 item의 크기를 축소하는 property로 해당 비율에 따라 item 크기의 줄어드는 정도가 결정된다.
grow와 shrink는 크기 자체가 아니라 비율을 설정한 것!!
Flex-basis : Flex Item의 크기를 결정하는 속성으로 width와 비슷하게 동작한다.
1) Flex로 설정한 경우 초기의 item들은 위처럼 같은 column으로 정렬되지 않는 상태
< 다른 example >
.child { flex: 1 }
.child:last-child { flex: 3; background-color: green; }
flex-grow | flex-shrink | flex-basis |
---|---|---|
1 | 1 | 0 (not auto!!) |
Think Flex as abbrivation of "Flexible"