DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!
CSS 中的 width
属性指定元素内容区域的宽度。此“内容”区域位于元素的 填充、边框 和 边距 内部 (盒子模型)。
.wrap {
width: 80%;
}
在上面的示例中,类名为 .wrap
的元素的宽度将是其父元素宽度的 80%。除了我们稍后将介绍的一些关键词外,可接受的值是任何 长度值。
宽度可以被密切相关的属性 min-width
和 max-width
覆盖。
.wrapper-1 {
width: 100%;
max-width: 320px; /* Will be AT MOST 320px wide */
}
.wrapper-2 {
width: 100%;
min-width: 20em; /* Will be AT LEAST 20em wide */
}
深入探讨
当使用百分比 (%) 设置宽度时,作者必须意识到百分比是基于元素的父元素,换句话说,是基于包含块的宽度。如果您的父元素设置为 480px(如我们的演示所示),则百分比基于该值。因此,在我们的例子中,480px 的 50% 让我们得到 240px 作为计算出的像素值。
请注意,width
应用于除 非替换 或 内联元素、表格行和 行组(即 thead
、tfoot
和 tbody
)之外的所有元素。在 HTML 如何定义非替换元素 和 CSS 如何定义它 之间似乎存在细微的差异,但我们指的是 CSS 的定义方式:内容未由标签本身定义的元素,例如带有 src
属性的 <img>
。
对于其包含块基于块容器元素的绝对定位元素,百分比是相对于该元素的填充框宽度计算的。
关键词值
使用一些特殊的关键词值,可以根据元素的内容定义宽度(和/或高度)。
min-content
min-content
值是如果利用了框中所有**软换行机会**,则可以容纳其内容的最小尺寸。
这种值最好的示例是正确编写的 figure
元素。
一旦我们对这个标记应用了一些基本样式,我们就会得到
如果我们希望该 figure 元素基本上与该图像的大小相同,以便文本在图像边缘处换行。我们可以将其左浮动或右浮动,因为浮动将表现出相同的收缩以适应行为,但如果我们想要将其居中呢?min-content
允许我们将其居中。
因为我们已将 min-content
分配给 figure
元素,所以在利用所有软换行机会(如单词之间的空格)的情况下,它采用它可以具有的最小宽度,以便内容仍然适合该框。
max-content
max-content
属性指的是如果未利用元素中的任何软换行机会,则框可以容纳其内容的最窄尺寸。
看看如果将其应用于我们简单的猫咪/figure 演示会发生什么。
因为标题比图像宽得多(它不利用任何软换行机会,例如单词之间的空格),这意味着它必须在一行上显示标题,因此 figure
与该行一样宽。
fill-available
???。人生一大谜团。
fit-content
fit-content
的值在行为上大致等同于 margin-left: auto
和 margin-right: auto
,除了它适用于未知宽度。
例如,假设我们需要将一个内联导航横跨页面居中。最佳选择是将 text-align: center
应用于 ul
,并将 display: inline-block
应用于 li
。这将为您提供如下内容
但是,蓝色背景(来自 ul
元素)会扩展到整个文档,因为 ul
是一个块级元素,这意味着它的宽度仅受其包含元素的限制。如果我们希望蓝色背景围绕列表项折叠怎么办?fit-content
可以解决!
使用 fit-content
和 margin: 1em auto
,这就像一个魅力一样,只有导航有彩色背景,而不是整个文档宽度。
如果您喜欢这种东西,您会很高兴知道定义 fit-content
长度大小的公式是
fit-content = min(max-content, max(min-content, fill-available))
这是一个很少使用的值,所以如果您想出了一个很棒的用例,请告诉我们!
浏览器支持
IE | Edge | Firefox | Chrome | Safari | Opera |
---|---|---|---|---|---|
全部 | 全部 | 全部 | 全部 | 全部 | 全部 |
Android Chrome | Android Firefox | Android 浏览器 | iOS Safari | Opera Mobile |
---|---|---|---|---|
全部 | 全部 | 全部 | 全部 | 全部 |
特殊的关键字值在 IE10 中似乎不起作用。
“百分比是根据该元素的内填充盒的宽度计算的”是什么意思?这意味着内填充会添加到您的百分比宽度中,还是包含在内?
图形内的图片坏了,Chris。
看起来Placekitten挂了,需要切换到其他东西。
你考虑过http://rdjpg.com吗?:P
你的示例在Google Chrome中有效,但在Windows 7上的IE11中无效。
非常感谢你!
Mark & Kim;根本不支持IE…目前
width:100%
我怎么错过了这些新的关键字值?
有没有人可以解释一下如何在不为父div(在本例中为figure)设置宽度的情况下实现相同的效果?我一直在尝试将其向左或向右浮动,但无法强制段落收缩以适应图像大小。如果我为div设置了200px的宽度,则问题会自行解决,但我不需要任何浮动。那么,如何在不指定figure的宽度的情况下仅使用浮动来实现相同的效果?
我认为我会在父div上使用flex属性,使其父级的宽度继承图片的宽度,并将图片设置为flex: 1。通常这样就可以了。
也许你在开玩笑说想知道fill-available的值是什么,因为它很明显,它的名字说明了一切。
如果你没有开玩笑,fill-available的作用是为元素提供尽可能多的宽度(或高度),而不会溢出其父元素,同时考虑边距和填充(即与100%宽度不同)。
我爱fill-available :)
width: fill-available;
width: -moz-fill-available;
width: -webkit-fill-available;
嘿,Miguel!你能举一个“fill-available”的真实例子吗?这听起来像是非常有用的东西,我刚刚听说过它!!
有人可以解释一下两者之间的区别吗?
img{width:100%;}
和
img{max-width:100%;}
这是生活中另一个伟大的谜团:)
我不知道你是否还在寻找答案,但根据我使用这两个的经验
width : 100% 将元素定义为已定义尺寸的父容器宽度的100%。
max-width: 100% 将元素的大小限制为低于或等于已定义尺寸的父容器宽度的100%。
换句话说,如果希望元素严格等于其父元素,则使用width;如果希望更灵活的显示并确保元素不会“超出范围”,则使用max-width。
你拯救了我的一天,谢谢!
除了回退css设置之外,是否有任何替代width:max-content可以在IE10+中使用?
我遇到一个问题,我使用了自定义CSS,当给div 100% 的宽度,然后添加填充时,它超出了div的宽度。
对于最后一个示例,我可以使用max-content和margin获得相同的效果。
ul { width: max-content; margin: 1em auto; }
“请注意,width适用于除非替换[…]之外的所有元素。” 你确定是指“非替换”吗?这将包括所有不是替换的元素,包括你我div、p等。我认为这是一个错误。
非/替换元素的相关CSS定义的链接是https://www.w3.org/TR/css-display-3/#replaced-element
也许这种误解是由于HTML规范对“替换元素”的定义与CSS不同造成的。这应该在文章中明确说明,因为关于CSS属性的文章自然会暗示使用CSS对事物的定义。
这非常有趣,Peter!这些定义及其包含的元素之间似乎确实存在差异。帖子已更新。感谢你的提醒!
嗨,谢谢你的教程
如何为同一父元素的左侧三列(像素)、中间(%)和右侧(像素)的宽度使用百分比和像素?
谢谢
..
像这样
..
‘
‘
‘
‘
‘
‘
‘
‘