What is the difference between CSS fit-content and max-content?
CssWidthCss Problem Overview
I'm following this article https://css-tricks.com/almanac/properties/w/width/ to try to understand how this rules work.
I have this example:
*{margin:0; padding:0}
.box{
background: lightgreen;
margin: 0 auto;
width: -webkit-fit-content;
width: -moz-fit-content;
width: fit-content;
}
<div class="box">
<img src="https://tyrannyoftradition.files.wordpress.com/2012/05/cutest-kitten-hat-ever-13727-1238540322-17.jpg" alt="" />
<figure>Yes, put some text here that is wider than the image above to try some new rules</figure>
</div>
The article says that fit-content
can be used to center a div of unknown width with margin: x auto;
But if you change fit-content
for max-content
in this example, this is working anyway and they seem to behave always in the same way.
Does anyone know what is the difference between this two rules and in which cases should I use one or the other?
Css Solutions
Solution 1 - Css
fit-content uses max-content, unless available < max-content
, then it uses available. Unless available < min-content
, then it uses min-content.
Solution 2 - Css
In a few words width: fit-content;
means :
"Use the space you can (available) but never less than your min-content
and never more than your max-content
"
Solution 3 - Css
As you can see it here https://developer.mozilla.org/en-US/docs/Web/CSS/width the max-width simply sets the size based on the space its children needs regardless if it's available or not, while the fit-width checks if the space the children needs using max-width is available and if not, it uses the min-width instead. For further reading about the difference between max-width and min-width see http://dev.w3.org/csswg/css-sizing/#block-intrinsic.
Solution 4 - Css
the one scenario in which max-content and fit-content don't behave the same way is when you set a 'max-width' property on the element, and the viewport size is narrower than the max-width value. in this case the 'max-content' value will result in a layout in which the text will be cut arbitrarily (and the only way to see the entire text is to scroll horizontally). using the 'fit-content' value, on the other hand, will ignore the max-width property and adjust the text nicely inside the viewport.
Solution 5 - Css
It seems these two codes are the same:
.fit-content {
width: fit-content;
}
// is same as
.fit-content {
width: max-content;
max-width: 100%;
min-width: min-content;
}
In my experience I either go with width: fit-content
or width: max-content; max-width: 100%
. The latter is for cases when the element shouldn't have a min-width. Also the latter is equal to width: fit-content; max-width: 100%