CSS 플렉스 블록 압축 조절

기본적으로 모든 요소는 요소의 너비에 비례하여 조각이 떼어집니다. 그러나 특정 요소에서 더 크거나 작은 조각이 떼어지도록 할 수 있습니다. 이를 위해 특별한 속성인 flex-shrink가 존재합니다.

이 속성은 위에서 언급한 공식에 따라 요소에서 떼어낼 조각을 계산할 때 요소의 너비에 곱해지는 가중치입니다. 예를 들어, 요소의 너비가 200px이고 flex-shrink 값이 3라면, 요소의 가중 (즉, 가중치가 곱해진) 너비는 다음과 같습니다:

200px * 3 = 600px

flex-shrink를 고려한 공식은 다음과 같습니다: 음의 자유 공간 * (요소의 가중 너비 / 모든 요소의 가중 너비 합).

예제를 살펴보겠습니다. 4개의 요소가 있다고 가정합니다. 첫 번째 요소의 너비는 400px이고 flex-shrink 값은 2입니다. 나머지 요소들의 너비는 200px이고, 그들의 flex-shrink 값은 1입니다. 부모의 너비는 900px라고 가정합니다.

요소들의 총 너비는 다음과 같습니다:

400px + 3 * 200px = 1000px

음의 자유 공간은 다음과 같습니다:

1000px - 900px = 100px

요소들의 총 가중 너비는 다음과 같습니다:

400px * 2 + 200px * 1 + 200px * 1 + 200px * 1 = 1400px

첫 번째 요소의 가중 너비는 다음과 같습니다:

400px * 2 = 800px

첫 번째 요소에서 떼어질 조각의 크기는 다음과 같습니다:

100px * (800px / 1400px) = 100px * 0.57 = 57.14px

요소의 너비는 다음과 같습니다:

400px - 57.14px = 342.86px ~ 343px

나머지 각 요소의 가중 너비는 다음과 같습니다:

200px * 1 = 200px

각 요소에서 떼어질 조각의 크기는 다음과 같습니다:

100px * (200px / 1400px) = 100px * 0.142 = 14.2px

요소의 너비는 다음과 같습니다:

200px - 14.2px = 185.8px ~ 186px
Задание 1

설명된 블록들을 구현하고 측정을 통해 요소들의 너비가 실제로 우리가 계산한 값과 동일한지 확인하세요.

Задание 2

블록들의 너비를 계산한 다음, 측정을 통해 계산을 검증하세요:

html<div class="parent">
  <div class="child elem1">1</div>
  <div class="child elem2">2</div>
  <div class="child elem3">3</div>
</div>
css.parent {
  display: flex;
  width: 200px;
  height: 200px;
  border: 1px solid red;
}
.child {
  height: 50px;
  border: 1px solid green;
}
.elem1 {
  width: 100px;
  flex-shrink: 2;
}
.elem2 {
  width: 100px;
  flex-shrink: 1;
}
.elem3 {
  width: 100px;
  flex-shrink: 1;
}
Задание 3

블록들의 너비를 계산한 다음, 측정을 통해 계산을 검증하세요:

html<div class="parent">
  <div class="child elem1">1</div>
  <div class="child elem2">2</div>
  <div class="child elem3">3</div>
</div>
css.parent {
  display: flex;
  width: 200px;
  height: 200px;
  border: 1px solid red;
}
.child {
  height: 50px;
  border: 1px solid green;
}
.elem1 {
  width: 100px;
  flex-shrink: 3;
}
.elem2 {
  width: 100px;
  flex-shrink: 2;
}
.elem3 {
  width: 100px;
  flex-shrink: 1;
}
Задание 4

블록들의 너비를 계산한 다음, 측정을 통해 계산을 검증하세요:

html<div class="parent">
  <div class="child elem1">1</div>
  <div class="child elem2">2</div>
  <div class="child elem3">3</div>
  <div class="child elem4">4</div>
</div>
css.parent {
  display: flex;
  width: 500px;
  height: 200px;
  border: 1px solid red;
}
.child {
  height: 50px;
  border: 1px solid green;
}
.elem1 {
  width: 300px;
  flex-shrink: 3;
}
.elem2 {
  width: 200px;
  flex-shrink: 2;
}
.elem3 {
  width: 200px;
  flex-shrink: 1;
}
.elem4 {
  width: 200px;
  flex-shrink: 1;
}