CSS样式表width常忽略使用的fit-content/max-content/min-content属性值
前言
记录一下CSS3 中 width属性相关的值.通过在浏览器中输入width, 弹窗具有以下如属性

这里主要对fill-available, fit-content, min-content, max-content几个属性展开说明
1. fill-available(默认)
1.1 fill-available 属性值的理解
fill-available属性值比较容易理解, 充分利用可用空间, 当我们编写一个没有其他样式的<div>元素, 此时该元素的width表现就是fill-availabel, 自动填满空间.
也就是我们常说的盒模型, 盒模型的margin, border, padding,content水平值的和为父元素的width属性值的100%
示例:
<style>
.wrap {
width: 500px;
height: 300px;
border: 4px solid #0daabe;
padding: 4px;
}
.item {
border: 4px solid #409eff;
background: #fe731a;
margin-bottom: 6px;
}
</style>
<div class="wrap">
<div class="item">敬天爱人</div>
<div class="item">心不唤物,物不至</div>
<div class="item">
你心中描画怎样的蓝图,决定了你将度过怎样的人生。强烈的意念,将作为现象显现——请你首先铭记这个“宇宙的法则
</div>
</div>
效果:

这种充分利用可用空间的行为就称为"fill-available"
1.2 使用场景
fill-available关键字使用的价值就在于, 当我们需要将一个inline-block元素, 向block元素一样具有100%自动填充时, 不用在修改display特性, 修改为block了, 修改display特性可能会带来一些其他问题
此时我们就可以让具有包裹性的inline-block元素具有了100%自动填充特性
示例: 我们以图片为例
<style>
.wrap {
width: 500px;
height: 500px;
border: 4px solid #0daabe;
padding: 4px;
}
.img {
}
</style>
<div class="wrap">
<img class="img" src="./1.jpg" alt="" />
</div>
效果:

如果此时图片使用fill-available, 测试图片就宽度就会自动填充空间, 同时并没有改变<img>元素的原始特性
.img {
width: -webkit-fill-available;
}
效果:

2. min-content
2.1 min-content 属性值理解
min-content宽度表示的并不是内部那个宽度小就是那个宽度. 而是,采用内部元素最小宽度值最大的那个元素的宽度作为最终容器的宽度。
首先,我们需要明白"最小宽度值"是什么意思.比如
- 图片元素的最小宽度值就是图片默认的宽度
- 文本元素, 如果全是中文, 最小宽度值就是一个中文的宽度; 如果包含英文, 英文单词默认不换行, 最小宽度就是英文单词中最长的宽度
<style>
.wrap {
width: 500px;
/* height: 300px; */
border: 4px solid #0daabe;
padding: 4px;
}
.item {
border: 4px solid #409eff;
background: #fe731a;
margin-bottom: 6px;
width: min-content;
}
</style>
<div class="wrap">
<div class="item">敬天爱人</div>
<div class="item">心不唤物,物不至helloworld</div>
</div>
效果:

2.2 使用场景
如果我们进行图文不仅时, 希望文字的宽度不要超过图片的宽度, 我们可以选择使用该属性
示例:
<style>
.wrap {
width: 500px;
/* height: 300px; */
border: 4px solid #0daabe;
padding: 4px;
}
.item {
border: 4px solid #409eff;
background: #fe731a;
margin-bottom: 6px;
width: min-content;
}
</style>
<div class="wrap">
<div class="item">
<img src="./1.jpg" alt="" />
你心中描画怎样的蓝图,决定了你将度过怎样的人生.强烈的意念,将作为现象显现请你首先铭记这个宇宙的法则
</div>
</div>
效果:

3. max-content
3.1 max-content 属性值的理解
max-content:简单理解就是假设我们的容器有足够的宽度,足够的空间
此时,所占据的宽度是就是max-content所表示的尺寸。
也就是说max-content会采用内部元素的宽度值最大的元素作为容器的宽度
- 如果为只有文本, 则文本不换行, 容器的最大宽度就是文本的宽度
- 如果有文本,图片, 选择最大元素宽度作为容器宽度
3.2 使用示例
当文本内容不换行为最大宽度, 此时容器宽度等于文本宽度
示例:
<style>
.wrap {
width: 500px;
border: 4px solid #0daabe;
padding: 4px;
}
.item {
border: 4px solid #409eff;
background: #fe731a;
margin-bottom: 6px;
width: max-content;
}
</style>
<div class="wrap">
<div class="item">
<img src="./1.jpg" alt="" />
<div>
你心中描画怎样的蓝图,决定了你将度过怎样的人生.强烈的意念,将作为现象显现请你首先铭记这个宇宙的法则
</div>
</div>
</div>
效果:

如果文字宽度小于图片宽度;容器最大宽度就是图片宽度:
效果:

4. fit-content
4.1 fit-content 属性值的理解
width:fit-content可以实现元素收缩效果, 表现和float, absolute, inline-block一样
虽然现在有这么多方式实现包裹性的特性. 但他们都是在不同的场景下使用. 同样的,我们需要关注的是在什么样场景下使用fit-content
4.2 使用场景
比如我们想实现水平居中, 其他包裹性元素会具有以下问题
float只能左浮动和右浮动, 肯定不行absolute绝对定位虽然可以实现水平居中, 但会脱离文档流是最大的弊病inline-block元素水平居中需要父元素额外的设置text-align:center
我们比较常用的水平居中, 也就是absolute和block元素的margin: auto了
但是block问题在于我们需要给元素添加固定宽度, 这就无法更加内容来自适应宽度
此时我们就可以使用fit-content, 在不修改block元素特性的情况下, 实现根据内容宽度自适应容器的宽度, 具有了包裹性
示例:
<style>
.wrap {
width: 500px;
/* height: 300px; */
border: 4px solid #0daabe;
padding: 4px;
}
.item {
border: 4px solid #409eff;
background: #fe731a;
margin-bottom: 6px;
width: fit-content;
margin: auto;
}
</style>
<div class="wrap">
<div class="item">
<img src="./1.jpg" alt="" />
<div>你心中描画怎样的蓝图</div>
</div>
</div>
效果:

4.3 与max-content区别
max-content 和 fit-content的区别
- 在元素没有超过父容器宽度是, 二者表现一致
- 如果元素超过了父容器宽度,
fit-content最大和父容器宽度一致, 而max-content会超出如容器
示例: fit-content
<style>
.wrap {
width: 500px;
border: 4px solid #0daabe;
padding: 4px;
}
.item {
border: 4px solid #409eff;
background: #fe731a;
margin-bottom: 6px;
width: fit-content;
}
</style>
<div class="wrap">
<div class="item">
<img src="./1.jpg" alt="" />
<div>
你心中描画怎样的蓝图,决定了你将度过怎样的人生.强烈的意念,将作为现象显现请你首先铭记这个宇宙的法则
</div>
</div>
</div>
效果:

如果修改使用max-content 效果可以参照上面max-content示例
5. 浏览器兼容性考虑
在使用fit-content属性时,我们还需要考虑浏览器的兼容性。目前,fit-content属性在各个主流浏览器已经得到广泛支持,包括Chrome、Firefox、Safari和Edge等。但是请注意,在一些老旧的浏览器版本中,可能不支持该属性或者只支持部分功能。
转载自:https://juejin.cn/post/7368712423794245641