前言
记录一下CSS3
中 width
属性相关的值.通过在浏览器中输入width
, 弹窗具有以下如属性
这里主要对fill-available
, fit-content
, min-content
, max-content
几个属性展开说明
1. fill-available(默认)
1.1 fill-available 属性值的理解
fill-available
属性值比较容易理解, 充分利用可用空间, 当我们编写一个没有其他样式的
width
表现就是fill-availabel
, 自动填满空间.
也就是我们常说的盒模型, 盒模型的margin
, border
, padding,content
水平值的和为父元素的width
属性值的100%
示例:
.wrap {
width: 500px;
height: 300px;
border: 4px solid #0daabe;
padding: 4px;
}
.item {
border: 4px solid #409eff;
background: #fe731a;
margin-bottom: 6px;
}
敬天爱人
心不唤物,物不至
你心中描画怎样的蓝图,决定了你将度过怎样的人生。强烈的意念,将作为现象显现——请你首先铭记这个“宇宙的法则
效果:
这种充分利用可用空间的行为就称为"fill-available"
1.2 使用场景
fill-available
关键字使用的价值就在于, 当我们需要将一个inline-block
元素, 向block
元素一样具有100%
自动填充时, 不用在修改display
特性, 修改为block
了, 修改display
特性可能会带来一些其他问题
此时我们就可以让具有包裹性的inline-block
元素具有了100%
自动填充特性
示例: 我们以图片为例
.wrap {
width: 500px;
height: 500px;
border: 4px solid #0daabe;
padding: 4px;
}
.img {
}
效果:
如果此时图片使用fill-available
, 测试图片就宽度就会自动填充空间, 同时并没有改变元素的原始特性
.img {
width: -webkit-fill-available;
}
效果:
2. min-content
2.1 min-content 属性值理解
min-content
宽度表示的并不是内部那个宽度小就是那个宽度. 而是,采用内部元素最小宽度值最大的那个元素的宽度作为最终容器的宽度。
首先,我们需要明白"最小宽度值"
是什么意思.比如
- 图片元素的最小宽度值就是图片默认的宽度
- 文本元素, 如果全是中文, 最小宽度值就是一个中文的宽度; 如果包含英文, 英文单词默认不换行, 最小宽度就是英文单词中最长的宽度
示例:
.wrap {
width: 500px;
/* height: 300px; */
border: 4px solid #0daabe;
padding: 4px;
}
.item {
border: 4px solid #409eff;
background: #fe731a;
margin-bottom: 6px;
width: min-content;
}
敬天爱人
心不唤物,物不至helloworld
效果:
2.2 使用场景
如果我们进行图文不仅时, 希望文字的宽度不要超过图片的宽度, 我们可以选择使用该属性
示例:
.wrap {
width: 500px;
/* height: 300px; */
border: 4px solid #0daabe;
padding: 4px;
}
.item {
border: 4px solid #409eff;
background: #fe731a;
margin-bottom: 6px;
width: min-content;
}
你心中描画怎样的蓝图,决定了你将度过怎样的人生.强烈的意念,将作为现象显现请你首先铭记这个宇宙的法则
效果:
3. max-content
3.1 max-content 属性值的理解
max-content
:简单理解就是假设我们的容器有足够的宽度,足够的空间
此时,所占据的宽度是就是max-content
所表示的尺寸。
也就是说max-content
会采用内部元素的宽度值最大的元素作为容器的宽度
- 如果为只有文本, 则文本不换行, 容器的最大宽度就是文本的宽度
- 如果有文本,图片, 选择最大元素宽度作为容器宽度
3.2 使用示例
当文本内容不换行为最大宽度, 此时容器宽度等于文本宽度
示例:
.wrap {
width: 500px;
border: 4px solid #0daabe;
padding: 4px;
}
.item {
border: 4px solid #409eff;
background: #fe731a;
margin-bottom: 6px;
width: max-content;
}
你心中描画怎样的蓝图,决定了你将度过怎样的人生.强烈的意念,将作为现象显现请你首先铭记这个宇宙的法则
效果:
如果文字宽度小于图片宽度;容器最大宽度就是图片宽度: 效果:
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元素特性的情况下, 实现根据内容宽度自适应容器的宽度, 具有了包裹性
示例:
.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;
}
你心中描画怎样的蓝图
效果:
4.3 与max-content区别
max-content
和 fit-content
的区别
- 在元素没有超过父容器宽度是, 二者表现一致
- 如果元素超过了父容器宽度,
fit-content
最大和父容器宽度一致, 而max-content
会超出如容器
示例: fit-content
.wrap {
width: 500px;
border: 4px solid #0daabe;
padding: 4px;
}
.item {
border: 4px solid #409eff;
background: #fe731a;
margin-bottom: 6px;
width: fit-content;
}
你心中描画怎样的蓝图,决定了你将度过怎样的人生.强烈的意念,将作为现象显现请你首先铭记这个宇宙的法则
效果:
如果修改使用max-content
效果可以参照上面max-content
示例
5. 浏览器兼容性考虑
在使用fit-content
属性时,我们还需要考虑浏览器的兼容性。目前,fit-content
属性在各个主流浏览器已经得到广泛支持,包括Chrome
、Firefox
、Safari
和Edge
等。但是请注意,在一些老旧的浏览器版本中,可能不支持该属性或者只支持部分功能。
这是一个从 https://juejin.cn/post/7368712423794245641 下的原始话题分离的讨论话题