본문 바로가기

flex

1. 유연한 레이아웃을 위한 flex

Flexbox는 현대 웹 디자인에서 가장 많이 사용하고 강력한 레이아웃 도구 중 하나입니다. 1차원적 레이아웃(행 또는 열)을 쉽게 만들 수 있으며, 요소들의 크기와 순서를 동적으로 조절할 수 있습니다.

속성적용 대상설명
display: flex컨테이너플렉스 컨테이너 생성
flex-direction컨테이너주축 방향 설정
justify-content컨테이너주축 정렬
align-items컨테이너교차축 정렬
gap컨테이너아이템 간격
flex-wrap컨테이너줄 바꿈 설정

1.1 flex를 적용하는 방법

부모 요소를 display: flex로 설정하면 자식 요소들이 flex item이 되어 flexbox 레이아웃을 사용할 수 있습니다. 부모 요소를 flex-container 자식 요소를 flex-item 이라고 부릅니다. 이를 통해 자식들을 배치하고 정렬할 수 있습니다.

.container {
  display: flex;
}

1.2 주축의 방향

flex-direction은 주축의 방향을 설정합니다. 기본값은 row입니다.

.container {
  flex-direction: row | row-reverse | column | column-reverse;
}
값방향설명
row→기본값. 왼쪽에서 오른쪽
row-reverse←오른쪽에서 왼쪽
column↓위에서 아래
column-reverse↑아래에서 위

1.3 주축의 아이템 정렬

주축을 기준으로 배열의 위치를 조절하거나 아이템 간의 설정을 할 수 있습니다.

.container {
  justify-content: flex-start | flex-end | center | space-between | space-around
    | space-evenly;
}
값설명
flex-start시작점에 정렬
flex-end끝점에 정렬
center가운데 정렬
space-between아이템 사이에 동일한 간격
space-around아이템 주변에 동일한 간격
space-evenly시작, 끝, 아이템 사이 모두 동일한 간격

아래 예제에서 justify-content 속성을 사용해 아이템을 다양한 방식으로 배치해 보세요.

<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
</div>
.container {
  display: flex;
  justify-content: space-between;
  background-color: #f0f0f0;
  padding: 10px;
}
.item {
  background-color: #4967d8;
  color: white;
  padding: 10px;
  text-align: center;
  border-radius: 5px;
}

1.4 align-items

align-items는 교차축을 기준으로 정렬합니다.

.container {
  align-items: stretch | flex-start | flex-end | center | baseline;
}
값설명
stretch기본값. 교차축을 채우기 위해 늘림
flex-start시작점에 정렬
flex-end끝점에 정렬
center가운데 정렬
baseline텍스트의 기준선에 정렬

이 속성을 이용하여 A 박스를 아래와 같이 배치해 보세요. 이 박스를 배치하는 방법은 한가지가 아닙니다. 다양한 방법으로 실습해 보세요.

<div class="wrap">
  <div class="blue">A</div>
</div>
.wrap {
  background-color: gainsboro;
  width: 240px;
  height: 240px;
}

.wrap > div {
  color: white;
  line-height: 70px;
  text-align: center;
  font-size: 20px;
  width: 70px;
  height: 70px;
}

.blue {
  background-color: #4967d8;
}
  • 정답
    /* 추가 */
    .wrap {
      display: flex;
      flex-direction: row-reverse;
      align-items: center;
    }
    

1.5 gap

아이템 사이의 간격을 설정할 때 사용 할 수 있는 속성입니다.

.container {
  gap: 10px; /* 모든 방향 */
  gap: 10px 20px; /* 행 열 */
}

1.6 flex-wrap

한 줄에 배치되게 할 것인지, 가능한 영역 내에서 여러 행으로 나누어 표현할 것인지 결정합니다.

2. flex의 다양한 활용

basecamp에서 다루는 flex는 기초적인 내용입니다. 이를 이용해 다양한 레이아웃을 만들 수 있습니다. 제주 코딩 베이스캠프 페이지에 접속하여 flex를 활용한 다양한 레이아웃을 확인해 보세요. 더 많은 flex 속성을 알고 싶다면 아래 링크를 참고하세요.

제주 코딩 베이스캠프
Flexbox | MDN flexngrid Flexbox Froggy