Baseline | Widely available
Chrome, Edge, Firefox, Safari에서 지원돼요.
이 기능은 잘 확립되어 있고 많은 기기와 브라우저 버전에서 작동해요. 2020년 1월부터 모든 브라우저에서 사용 가능했어요.
max-content 크기 조정 키워드는 요소의 최대 고유 크기를 나타내요. 이 키워드는 소프트 래핑 없이 콘텐츠를 표시하는 데 필요한 가장 큰 크기로 요소를 확장해요. 텍스트 콘텐츠의 경우, 이 키워드는 오버플로우를 일으키더라도 콘텐츠를 전혀 래핑하지 않아요.
interpolate-size 프로퍼티와 calc-size() 함수를 사용하면 max-content로 또는 max-content에서 애니메이션을 활성화할 수 있어요.
이 친구는 한마디로 "내가 가진 내용물이 가질 수 있는 최대 너비에 딱 맞춰라!"라고 주문하는 거예요. 텍스트라면 줄 바꿈을 전혀 하지 않고 한 줄로 길게 늘어뜨렸을 때의 너비가 되겠죠? 하나씩 자세히 살펴봅시다!
/* 크기 조절 속성에서 사용되는 경우 */
width: max-content;
inline-size: max-content;
height: max-content;
block-size: max-content;
/* 그리드 트랙에서 사용되는 경우 */
grid-template-columns: 200px 1fr max-content;
max-content를 사용하면 박스가 어떻게 반응하는지 직접 확인해 볼까요?
<div id="container">
<div class="item">Item</div>
<div class="item">
내용이 더 많은 아이템입니다. 이 아이템은 고정된 너비의 박스를 넘치게(overflow) 될 거예요.
</div>
</div>
/* 부모 컨테이너는 200px로 고정되어 있어요 */
#container {
background-color: #8cffa0;
padding: 10px;
width: 200px;
}
/* 아이템의 너비를 max-content로 설정합니다 */
.item {
width: max-content;
background-color: #8ca0ff;
padding: 5px;
margin-bottom: 1em;
}

부모 박스의 너비가 200px밖에 안 되는데도, max-content가 적용된 파란색 박스는 텍스트를 한 줄로 다 보여주기 위해 부모를 뚫고 오른쪽으로 길게 삐져나온 걸 볼 수 있을 거예요. 이게 바로 max-content의 특징이랍니다.
그리드 레이아웃에서 max-content는 특정 열이 내용물 중 가장 긴 것에 딱 맞춰지도록 할 때 정말 유용해요.
<div id="container">
<div>Item</div>
<div>내용이 좀 더 많은 아이템입니다.</div>
<div>유연한 아이템 (Flexible item)</div>
</div>
#container {
display: grid;
/* 첫 번째와 두 번째 열은 내용물 최대 너비에 맞추고, 세 번째 열은 남은 공간을 다 채워요 */
grid-template-columns: max-content max-content 1fr;
grid-gap: 5px;
box-sizing: border-box;
height: 200px;
width: 100%;
background-color: #8cffa0;
padding: 10px;
}
#container > div {
background-color: #8ca0ff;
padding: 5px;
}

그리드 예제를 보면, 첫 번째 열은 'Item'이라는 짧은 단어에 딱 맞게 좁아지고, 두 번째 열은 긴 문장에 맞춰서 넓게 잡히는 걸 볼 수 있죠? 이렇게 max-content를 쓰면 콘텐츠가 잘리지 않으면서도 공간을 효율적으로 쓸 수 있어요.
max-content는 앞서 배운 fit-content나 다음에 배울 min-content와 비교해서 공부하면 훨씬 이해가 빨라요.
실무에서는 텍스트가 예상보다 길어질 경우 레이아웃이 완전히 깨져버릴 수 있기 때문에, max-content를 쓸 때는 항상 부모 요소의 너비나 overflow 처리를 어떻게 할지 함께 고민해야 한답니다.