#1. Flex

1. Flex 속성의 개념

1) Flex 속성이란?

  • Flexible Box 또는 Flexbox 라고 부른다.
  • display 속성에 flex 값이 명시되어 있을 경우 사용할 수 있는 속성들을 뜻한다. (display: flex;)
  • float 속성이나 inline-block 속성의 단점을 보완하여 레이아웃 배치 전용 기능으로 고안되었다.
  • IE(Internet Explorer)에서는 지원하지 않기 때문에 IE를 고려해야 하는 프로젝트에서는 사용해서는 안된다.
  • 컨테이너에 적용하는 속성과 아이템에 적용하는 속성으로 나눈다.

 

2) 메인축과 교차축

  • 메인축(Main-axis) : 아이템들이 배치된 방향의 축
  • 교차축(Cross-axis) : 메인축과 수직인 축

아이템들이 가로로 배치될 때는 가로 방향이 메인축
아이템들이 세로로 배치 될 때는 세로 방향이 메인축

 

2. 컨테이너(부모)에 적용하는 속성

1) display 속성

- 1. flex

  • 컨테이너 내의 아이템들을 가로로 배치한다.
  • 컨테이너 자체의 넓이는 block의 특성을 유지함
  • 아이템들은 자신이 가진 넓이 만큼만 넓이를 차지한다.
  • 높이는 컨테이너의 높이 만큼 늘어난다. (아이템의 높이가 아닌 부모의 높이 만큼 설정)
    • 높이가 알아서 늘어나는 특징은 컬럼 레이아웃을 만들 때 편리
  • 정렬 속성을 통해 높이를 어떻게 처리할지도 조정할 수 있다.
  • 내용 만큼의 높이를 설정하고 싶다면 컨테이너에게 높이를 지정하지 않아야 한다.
display: flex;

flex

- 2. inline-flex

  • 컨테이너의 넓이가 아이템들 만큼만 설정된다.
  • 부모에게 높이가 설정되어 있다면 동작하지 않는다.
  • 그외 특성은 flex와 동일.
display: inline-flex;

inline-flex

 

※ 기본적으로 부모에 display: flex (또는 inline-flex) 가 적용되어 있어야 아래 속성들을 사용할 수 있다.

2) flex-direction (배치방향 설정)

-1. row

  • 왼쪽을 기준으로 정렬하고, 가로배치 한다.
  • 아이템들은 순서배치.
flex-direction: row;

row

-2. row-reverse

  • 오른쪽을 기준으로 정렬하고, 가로배치 한다.
  • 아이템들은 역순배치.
flex-direction: row-reverse;

row-reverse

-3. column

  • 상단을 기준으로 정렬하고, 세로배치 한다.
  • 아이템들은 순서배치.
flex-direction: column;

column

-4. column-reverse

  • 하단을 기준으로 정렬하고, 세로배치 한다.
  • 아이템들은 역순배치.
flex-direction: column-reverse;

column-reverse

 

3) flex-wrap (줄바꿈 속성)

-1. nowrap

  • 줄바꿈을 하지 않고, 아이템의 크기가 컨테이너에 맞게 강제로 축소된다.
flex-wrap: nowrap;

nowrap

-2. wrap

  • 아이템의 크기를 줄이지 않고 줄바꿈을 한다.
  • float나 inline-block과 비슷하게 동작한다.
flex-wrap: wrap;

wrap

-3. wrap-reverse

  • wrap 처럼 줄바꿈을 하지만, 아이템의 행을 역순으로 배치한다.
flex-wrap: wrap-reverse;

wrap-reverse

 

4) flew-flow

  • flex-direction 속성과 flex-wrap 속성을 일괄 지정하기 위한 단축 속성이다.
  • flex-direction, flex-wrap 순으로 한 칸 띄우고 명시한다.
flex-flow: row nowrap;

row nowrap

 

5) justify-content (가로정렬)

-1. flex-start

  • 아이템들을 시작점으로 정렬한다. (기본왼쪽)
  • 만약 flex-direction이 row값일 경우 왼쪽, column인 경우 위쪽을 시작점으로 한다.
justify-content: flex-start;

flex-start

-2. flex-end

  • 아이템들을 끝나는점으로 정렬한다.
  • 만약 flex-direction이 row값일 경우 오른쪽, column인 경우 아래쪽을 끝나는 점으로 한다.
justify-content: flex-end;

flex-end

-3. center

  • 아이템들을 가운데로 정렬한다.
justify-content: center;

center

-4. space-between

  • 아이템들의 사이에 균일한 간격을 준다.
justify-content: space-between;

space-between

-5. space-around

  • 아이템들의 둘레에 균일한 간격을 준다.
  • 각 아이템들에게 padding 값을 준 것과 비슷한 효과.
justify-content: space-around;

space-around

-6. space-evenly

  • 아이템들의 사이와 양 끝에 균일한 간격을 준다.
  • IE와 Edge에서는 지원되지 않는다.
justify-content: space-evenly;

space-evenly

 

6) align-items (세로정렬)

-1. stretch

  • 아이템들이 세로축 방향으로 끝까지 늘어난다.
align-items: stretch;

stretch

-2. flex-start

  • 아이템들을 시작점으로 정렬한다.
  • flex-direction이 row일 때는 위, column일 때는 왼쪽을 시작점으로 한다.
align-items: flex-start;

flex-start

-3. flex-end

  • 아이템들을 끝으로 정렬한다.
  • flex-direction이 row일 때는 아래, column일 때는 오른쪽을 시작점으로 한다.
align-items: flex-end;

flex-end

-4. center

  • 아이템들을 가운데로 정렬한다.
align-items: center;

center

-5. baseline

  • 아이템들을 텍스트의 베이스라인 기준으로 정렬한다.
align-items: baseline;

baseline

 

7) align-content

  • flex-wrap: wrap 이 지정된 상태에서 아이템들의 행이 2줄 이상 되었을 때 수직축 방향 정렬을 결정하는 속성이다.

-1. stretch

  • 아이템들이 세로축 방향으로 끝까지 늘어난다.
align-content: stretch;

stretch

-2. flex-start

  • 아이템들을 시작점(위)으로 정렬한다.
align-content: flex-start;

flex-start

-3. flex-end

  • 아이템들을 끝(아래)으로 정렬한다.
align-content: flex-end;

flex-end

-4. center

  • 아이템들을 가운데로 정렬한다.
align-content: center;

center

-5. space-between

  • 아이템들의 사이에 균일한 간격을 준다.
align-content: space-between;

space-between

-6. space-around

  • 아이템들의 둘레에 균일한 간격을 준다.
  • 각 아이템들에게 padding 값을 준 것과 비슷한 효과.
align-content: space-around;

space-around

-7. space-evenly

  • 아이템들의 사이와 양 끝에 균일한 간격을 준다.
  • IE와 Edge에서는 지원되지 않는다.
align-content: space-evenly;

space-evenly

 

3. 아이템에 적용하는 속성

1) flex-basis (유연한 박스의 기본 영역)

  • flex-basis는 flex 아이템의 기본 크기를 설정한다. (flex-direction이 row일 때는 너비, column 일  때는 높이)
  • flex-basis의 값으로는 width, height 등에 사용하는 각종 단위의 수(px, %, rem, em)가 들어갈 수 있으며 기본값 auto는 해당 아이템의 width 값을 사용한다.

 

2) flex-grow (유연하게 늘리기)

  • flex-grow는 아이템이 flex-basis의 값 보다 커질 수 있는지를 결정하는 속성이다.
  • 값으로는 숫자값이 들어가는데, 몇이든 일단 0보다 큰 값이 세팅되면 해당 아이템이 유연한 박스로 변하고, 원래의 크기보다 커지며 빈 공간을 메우게 된다.
  • 기본값이 0이기 때문에 따로 적용하기 전 까지는 아이템이 늘어나지 않는다.

 

3) flex-shrink (유연하게 줄이기)

  • flex-shrink는 아이템이 flex-basis의 값 보다 작아질 수 있는지를 결정한다.
  • 값으로는 숫자값이 들어가는데, 몇이든 일단 0보다 큰 값이 세팅되면 해당 아이템이 유연한 박스로 변하고 flex-basis보다 작아진다.
  • 기본값이 1이기 때문에 따로 세팅하지 않는다면 아이템이 flex-basis 보다 작아질 수 있다.

 

4) flex (축약형 속성)

  • flex-grow, flex-shrink, flex-basis를 한번에 쓸 수 있는 축약형 속성이다.
  • 이 세 속성들은 서로 관련이 깊기 때문에, 축약형으로 쓰는 경우가 많다.
  • 주의할 점은 flex:1 형식으로 flex-basis를 생략해서 쓰면 flex-basis의 값은 0이 된다.
/* 사용 예시 */

/* flex-grow: 1; flex-shrink: 1; flex-basis: 0; */
flex: 1;

/* flex-grow: 1; flex-shrink: 1; flex-basis: auto; */
flex: 1 1 auto;

/* flex-grow: 1; flex-shrink: 1; flex-basis: 500px; */
flex: 1 500px;

 

  • 1 : 2 : 1 비율 만들기
/* CSS */

<style>
  .container {
    box-sizing: border-box;
    display: flex;
    border: 2px dotted #06f;
    padding: 10px;
    width: 100%;
    height: 200px;
  }
  
  .item {
    border: 2px solid #f0f;
    padding: 10px;
    margin: 5px;
  }
  
  .flex1 {
    flex: 1 1 0;
  }
  
  .flex2 {
    flex: 2 1 0;
  } 
</style>
<!-- HTML -->

<body>
  <div class="container">
    <div class="item flex1">A</div>
    <div class="item flex2">B</div>
    <div class="item flex1">C</div>
  </div>  
</body>

1 : 2 : 1

※ 여백의 비가 아닌, 영역 자체를 원하는 비율로 분할할 때는 flex-basis를 0으로 하면 쉽게 처리할 수 있다.

 

5) order (배치순서)

  • 각 아이템들의 시각적 나열 순서를 결정한다.
  • 숫자값이 들어가며, 작은 숫자일 수록 먼저 배치된다.
  • 단순 시각적인 순서일 뿐, HTML 자체를 바꾸는 것은 아니므로 사용에 주의해야 한다.
/* CSS */

.item:nth-child(1) {
  order: 3;
}

.item:nth-child(2) {
  order: 1;
}

.item:nth-child(3) {
  order: 2;
}
<div class="item">A</div>
<div class="item">B</div>
<div class="item">C</div>

A에 3, B에 1, C에 2 를 지정

6) align-self (수직축으로 아이템 정렬)

  • align-items가 전체 아이템의 수직축 방향 정렬이라면, align-self는 해당 아이템의 수직축 방향 정렬이다.
  • 기본값은 auto이고, align-items 설정을 상속 받는다.
  • align-self는 align-items 보다 우선 적용된다.
  • auto 외의 나머지 값들은 align-items와 동일하다.
/* CSS */

.item:nth-child(1) {
  align-self: auto;
}

.item:nth-child(2) {
  align-self: stretch;
}

.item:nth-child(3) {
  align-self: flex-start;
}

.item:nth-child(4) {
  align-self: flex-end;
}

.item:nth-child(5) {
  align-self: center;
}

.item:nth-child(6) {
  align-self: baseline;
}
<div class="item">A</div>
<div class="item">B</div>
<div class="item">C</div>
<div class="item">D</div>
<div class="item">E</div>
<div class="item">F</div>

아이템들 각각에 적용된다

 

'국비수업 > HTML & CSS' 카테고리의 다른 글

[HTML & CSS] 클론코딩 연습5  (0) 2022.03.18
[HTML & CSS] 클론코딩 연습4  (0) 2022.03.17
[HTML & CSS] 클론코딩 연습3  (0) 2022.03.16
[HTML & CSS] 클론코딩 연습2  (0) 2022.03.16
[HTML & CSS] 클론코딩 연습1  (0) 2022.03.16

+ Recent posts