이 글은 flexbox로 만들 수 있는 10가지 레이아웃 을 읽고 이해한 부분을 요약, 정리한 글입니다. 모든 이미지, 내용 출처는 flexbox로 만들 수 있는 10가지 레이아웃와 MDN Web Docs를 참고하였습니다.
프론트엔드 개발자라면 display: flex;
속성은 정말 많이 사용하고 있을 것이다. 레이아웃을 쉽게 할 수 있는 방법이니까. 가로축 중앙 정렬을 위해서
display: flex;
justify-content: center;
align-items: center;
아래와 같은 속성을 많이 사용하고 있을 것이다. 그럼 Flexbox가 정확히 어떻게 구성되는지 알아보자.
부모 요소가 flex-container
, 자식 요소를 flex-item
이라고 한다. 각각에 해당하는 속성은 다음과 같다.
flex-direction, flex-wrap, justify-content, align-items, align-content
flex, flex-grow, flex-shrink, flex-basis, order
flex-grow, flex-shrink, flex-basis
아까 말했듯이, 부모는 flex-container
, 자식은 flex-item
으로 명명하겠다. 그럼 다음과 같은 코드를 잠시 보자.
.flex_container {
display: flex;
flex-direction: column;
height: 100%;
}
.flex_item {
flex: 1; /* flex: 1 1 0 */
overflow: auto;
}
부모 코드는 대부분 알 거라고 생각한다. 그렇다면 아래 속성에서 flex: 1
은 대체 뭘 의미하는걸까? 다음 그림을 보자.
사실 flex:1
속성은 뒤의 두 속성, flex-shrink
와 flex-basis
가 생략된 속성이다. flex
속성은 다음과 같이 3가지로 이루어지는데,
flex-grow
flex-grow
속성은 flex item
의 확장에 관련된 속성이다.
0과 양의 정수를 속성값에 사용한다. 속성값이 0이면 flex container
의 크기가 커져도 flex item
의 크기가 커지지 않고 원래 크기로 유지된다. flex container
의 크기가 커질 때 flex item
의 크기도 커지게 하려면 1 이상의 값을 속성값으로 설정한다. 속성값이 1 이상이면 flex item
의 원래 크기에 상관없이 flex container
를 채우도록 flex item
의 크기가 커진다.
flex-shrink
flex-shrink 속성은 flex item의 축소에 관련된 속성이다. 0과 양의 정수를 속성값에 사용한다. 기본값은 1이다.
속성값이 0이면 flex container
의 크기가 flex item
의 크기보다 작아져도 flex item
의 크기가 줄어들지 않고 원래 크기로 유지된다. 속성값이 1 이상이면 flex container
의 크기가 flex item
의 크기보다 작아질 때 flex item
의 크기가 flex container
의 크기에 맞추어 줄어든다.
flex-basis
flex-basis
속성은 flex item
의 기본 크기를 결정하는 속성이다. 기본값은 auto
다.
flex-basis
속성의 값을 auto
로 설정하면 flex item
은 상대적 flex item(relative flex item)이 되어 콘텐츠의 크기를 기준으로 크기가 결정된다.
은 주축을 기준으로 flex item
을 수직으로 정렬한다.
둘의 차이점은
align-items
속성은 한 줄로 나열되어 있을 때 사용된다는 것이다!align-content
는 여러 줄일 때다!
주의점:
justify-content
,align-items
,align-content
등은 모두 '주축'을 기준으로 정렬한다. 따라서flex-direction: column
으로 주축 방향을 전환한다면, 정렬 기준도 전환된다는 점을 유의하자.
flex-auto
flex-auto
속성은 유동적으로 크기가 변하는 박스를 만들 때 유용하게 사용된다. flex: auto
속성은 flex: 1 1 auto
속성과 같다. flex container
의 크기가 커지면 flex item
의 크기도 커지고, flex container
의 크기가 작아지면 flex item
의 크기도 작아진다. flex container
의 크기에 영향을 받는 반응형 flex item
을 만들고 싶다면 flex: auto
속성을 사용한다.
만약 아래 이미지처럼 비율이 유지되는 flex-item
을 적용하고 싶다면 flex-basis: 33.3%
를 적용하도록 하자.