`width: 100%`나 `auto`는 컨테이너를 기준으로 크기가 정해지는 "외재적(extrinsic)" 크기입니다. 반대로 `min-content`·`max-content`·`fit-content()`는 안의 내용물만 보고 크기를 정하는 "내재적(intrinsic)" 크기입니다 — 그래서 컨테이너가 좁아져도 그 값 자체는 바뀌지 않고, 대신 컨테이너보다 넓으면 그냥 넘칩니다(overflow).
`min-content`는 줄바꿈이 허용되는 한 가장 좁게 줄어든 너비로, 실질적으로 "가장 긴 단어 하나가 줄바꿈 없이 들어가는 너비"입니다. `max-content`는 그 반대로 아예 줄바꿈을 하지 않았을 때의 너비, 즉 한 줄로 쭉 펼쳤을 때의 폭입니다. `fit-content(L)`은 그 둘 사이를 `L`이라는 상한으로 자르는 값으로, `clamp(min-content, L, max-content)`와 같은 동작을 합니다.
아래 데모에서 같은 문장을 4가지 폭 규칙으로 나란히 두면, `width: 100%`짜리 파란 박스만 컨테이너를 따라 계속 줄어들고 나머지 셋은 자기 크기를 고집하다가 컨테이너가 그보다 좁아지는 순간 테두리를 뚫고 나갑니다(주황 테두리로 표시). 이게 "내재적 크기는 컨테이너 사정을 봐주지 않는다"는 뜻입니다.
언제 쓰나
버튼처럼 "내용보다 넓어지면 안 되는" 요소에는 `width: fit-content`가 유용합니다. `max-content`는 표의 열 너비처럼 절대 줄바꿈되면 안 되는 텍스트에, `min-content`는 카드가 줄어들 수 있는 최소 한계를 잴 때 씁니다.