이 포스트는 S1 Unit 6. HTML/CSS 활용에서 다뤘던 flexbox의 내용을 보다 자세히 정리하기 위하여 작성했습니다.
지난 Unit 5에서 간단하게 다루었던 개념이다. display:flex와 관련된 속성을 이용해 웹 레이아웃을 효과적으로 구성할 수 있다.
flexbox는 레이아웃을 효과적으로 배치하기 위한 CSS 개념이다.
이 방법을 알면 큰 틀에 여러 요소를 배치할 수 있는데
사용하기 위해 몇가지 개념을 알아야 한다.
flexbox는 큰 틀에 여러 요소를 배치하기 위해 사용하는 CSS이다.
'큰 틀'을 flex-container (부모 요소)
그 안의 '여러 요소'들을 flex-item (자식 요소)이라고 한다.
그리고 flex와 관련된 CSS를 이해하기 위해서는 아래의 flexbox 모델을 알아야 한다.
각 위치의 이름을 잘 알아두어야 한다. main axis, main start, main end, cross axis, cross start, cross end 등은 각각 레이아웃 배치나 정렬시 기준이 될 수 있다.
처음의 설명과 이미지를 토대로 flex의 기본 개념에 대해 정리하면 아래와 같다.
이미지 출처, 내용 참고: https://developer.mozilla.org/ko/docs/Learn/CSS/CSS_layout/Flexbox
기본 개념을 알았으면, 배치할 부모 요소와 자식 요소를 가지고 본격적으로 사용할 일만 남았다.
flexbox를 적용하는 제일 쉬운 방법은 그저 부모 요소에 display:flex를 선언하면 된다.
.flex-container{ display:flex; }
그리고 메인 축, 교차 축과 관련해 각각의 부모 요소와 자식 요소에 원하는 CSS를 적용하면 된다.
적용되는 CSS를 정리하면 다음과 같다.
정리한 내용대로 2번부터는 부모 요소, 자식 요소 각각의 관련된 CSS를 좀 더 자세히 알아보고자 한다.
설명에 앞서 다음의 codepen 자료를 참고하여 직접 확인해보면 이해가 빠르다.
출처: [Flexbox playground] https://codepen.io/enxaneta/pen/adLPwv
부모 요소에 적용할 수 있는 관련 CSS에 대해 알아보자.
속성 | 설명 | 속성값 |
---|---|---|
flex-direction | 기본 축 방향 설정 | row, row-reverse, column, column-reverse |
flex-wrap | 줄(행) 배치 설정 | nowrap, wrap, wrap-reverse |
justify-content | 수평 정렬 설정(기준: 기본 축) | flex-start, flex-end, center, space-between, space-around |
align-items | 수직 정렬 설정(기준: 교차 축) | stretch, flex-start, flex-end, center, baseline |
align-content | 수직 정렬 설정(기준: 교차 축) | stretch, flex-start, flex-end, space-between, space-around |
flex-direction은 기본 축(main axis)의 방향을 정한다.
속성값: row, row-reverse, column, column-reverse
flex-wrap은 자식 요소가 많을 경우 1줄 또는 여러줄로 배치할 때 사용한다.
속성값: nowrap, wrap, wrap-reverse
기본 축을 기준으로 자식 요소를 수평 정렬하는 방법이다.
속성값: flex-start, flex-end, center, space-between, space-around
아래의 그림을 보면 좀 더 이해가 쉽다.
이미지 출처: https://htmlcss.jp/css/justify-content.html
교차 축을 기준으로 자식 요소를 수직 정렬하는 방법이다.
속성값: stretch, flex-start, flex-end, center, baseline
아래의 이미지를 보면 좀 더 이해가 쉽다.
이미지 출처: https://css-tricks.com/almanac/properties/a/align-items/
교차 축을 기준으로 자식 요소를 수직 정렬하는 방법이다.
속성값: stretch, flex-start, flex-end, space-between, space-around
아래의 이미지를 보면 좀 더 이해가 쉽다.
이미지 출처: https://css-tricks.com/almanac/properties/a/align-content/
이번에는 자식 요소에 적용할 수 있는 관련 CSS에 대해 알아보자.
속성 | 설명 |
---|---|
order | 배치 순서 |
flex-grow | 너비 설정(기본값 0, 양의 정수값) |
flex-shrink | 너비 축소 설정(기본값 1, 양의 정수값) |
flex-basis | 너비 값(기본값 auto/ px,% 사용가능) |
align-self | 개별 수직 정렬(기본값 auto/기준: 교차축/부모 요소의 align-items보다 우선) |
개별 자식 요소의 배치 순서를 바꿀 수 있다.
기본값은 0으로 양의 정수값을 사용한다.
HTML 코드를 변경하지 않고 요소를 재배치할 수 있으며 기본 배치 순서는 flex container에 추가된 순서다.
개별 자식 요소 너비의 비율을 설정할 수 있다.
기본값 0으로 양의 정수값이다.
정수값을 이용해 너비를 비율처럼 설정할 수 있다.
개별 자식 요소 너비의 비율을 축소 설정할 수 있다.
기본값 1로 양의 정수값이다.
만약 값이 0일 경우 요소 원래의 너비를 유지하게 된다.
개별 자식 요소의 너비 값을 설정할 수 있다.
기본값은 auto로 px,%를 사용해 원하는 값으로 설정할 수 있다.
개별 자식 요소의 수직 정렬을 설정할 수 있다.
기본값 auto로 기준은 교차축이다.
부모 요소의 align-items보다 우선하여 적용된다.
flex-direction, flex-wrap 속성을 동시에 쓸 수 있다.
기본값은 flex-flow: row nowrap;
flex-grow, flex-shrink, flex-basis 속성을 동시에 쓸 수 있다.
기본값은 flex: 0 1 auto;
.flex-container {
flex-flow: <flex-direction> || <flex-wrap>;
}
.flex-item {
flex: none | auto | [ <flex-grow> <flex-shrink>? || <flex-basis> ];
}
flex 축약형은 속성값을 하나만 쓸 경우 아래 표와 같은 의미를 가진다.
flex | flex-grow | flex-shrink | flex-basis |
---|---|---|---|
기본값 | 0 | 1 | auto |
none | 0 | 0 | auto |
auto | 1 | 1 | auto |
양의 정수 | 양의 정수 | 1 | 0 |
참고 자료: