通常,我们希望限制元素相对于其父元素的宽度,同时使其具有动态性。因此,有一个基础宽度或高度的能力,使其扩展的基础上,可用的空间。比如说,我们有一个按钮,它的宽度应该是最小的,不应该低于它的宽度。这就是最大和最小属性变得方便的地方。
在本文中,我们将详细介绍CSS的最大和最小宽度和高度属性,并使用可能的用例和技巧详细解释每一个属性。
width 属性首先要讨论的是与宽度相关的属性。我们有min-width
和max-width
,它们中的每一个都很重要,都有自己的用例。
设置min-width
的值时,其好处在于防止width
属性使用的值变得小于min-width
的指定值。 请注意,min-width
的默认值是auto
,它解析为0
。
让我们举一个基本的例子来说明这一点。
我们有一个按钮,里面有一个变化的文本。文本的范围可能从一个单词到多个单词。为了确保即使只有一个单词,它也有最小宽度,应该使用min-width
。
最小宽度为100px
,这样即使按钮的内容很短,比如Done
,或者只有一个图标,它仍然足够大,可以被注意到。在使用阿拉伯语等多语言网站时,这一点非常重要。 考虑以下来自Twitter的示例:
在以前的情况下,按钮上带有单词“تم”,表示完成。 按钮的宽度太小,因此在后面的案例中,我增加了它的最小宽度。
在内容较长的情况下,min-width
可以扩展按钮的宽度,而水平方向上的padding
应该被添加,以实现一个合适的外观按钮。
在设置max-width
值时,它的好处在于防止width
属性使用的值超过max-width
的指定值。max-width
的默认值是none
。
max-width
的常见且简单的用例是将其与图像一起使用。 考虑以下示例:
图像比它的父元素大。通过使用max-width: 100%
,图像的宽度不会超过其父图像的宽度。如果图像比父图像小,则max-width: 100%
不会对图像产生实际影响,因为它比父图像小。
当min-width
和max-width
都用于一个元素时,它们中的哪一个将覆盖另一个?换句话说,哪个优先级更高?
html
css
.sub {
width: 100px;
min-width: 50%;
max-width: 100%;
}
初始width
值为100px
,并在其上加上min-width
和max-width
值。 结果是元素宽度未超过其包含的块/父元素的50%
。
除了最小和最大宽度属性外,我们还具有与高度相同的属性。
min-height设置min-height
的值时,其好处在于防止使用的height
属性值变得小于min-height
的指定值。 请注意,最小高度的默认值为auto
,它解析为0
。
我们用一个简单的例子来演示一下。
我们有一个带有描述文本的部分。目标是为p
设置一个最小高度,这样它就可以处理短或长内容。考虑下面的基本情况
.sub {
display: flex;
align-items: center;
justify-content: center;
padding: 1rem;
min-height: 100px;
color: #fff;
background: #3c78dB;
}
最小高度为100px
,使用flexbox时,内容水平和垂直居中。 如果内容更长,会发生什么? 例如一段?
是的,你猜对了!p
的高度将展开以包含新内容。有了它,我们就可以构建灵活的组件,并对其内容做出响应。
事例源码:https://codepen.io/shadeed/pen/cfb600cf30acdae9cf6f9cb5347a37cf
max-height在设置max-height
值时,它的好处在于防止height
属性使用的值超过max-height
的指定值。注意,max-height
的默认值是none
。
考虑下面的示例,其中我为内容设置了max-height
。 但是,因为它大于指定的空间,所以会发生溢出。 因此,文本超出了其父边界。
我们将介绍min-width
,min-height
,max-width
和max-height
的一些常见和不常见的用例。
当有一个标签列表时,建议限制一个标签的最小宽度,这样如果它的内容很短,它的外观就不会受到影响。
通过具有这种灵活性,无论内容有多短,标签都将看起来不错。 但是,如果内容作者输入了一个非常长的标签名称,而他使用的内容管理系统没有标签的最大字符长度,将会发生什么情况呢? 我们也可以使用max-width
。
.c-tag {
display: inline-block;
min-width: 100px;
max-width: 250px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
/*Other styles*/
}
通过使用max-width
,标签宽度将被限制为特定值。 但是,这还不够,标签名称应被截断。
事例地址:https://codepen.io/shadeed/pen/320e42b7ad75c438a9e633417d737d16
按钮对于按钮的最小值和最大值有不同的用例,因为按钮组件有多种变体。考虑下面的图:
请注意,按钮的“Get”
宽度太小。 如果不设置最小宽度,则由于任何原因而没有文本时,情况可能会变得更糟。 在这种情况下,设置最小宽度很重要。
flexbox
将最小宽度设置为零
min-width
的默认值是auto
,它被计算为0
。当一个元素是一个flex
项时,min-width
的值不会计算为零。flex 项目的最小大小等于其内容的大小。
根据CSSWG:
默认情况下,flex
项目不会缩小到它们的最小内容大小(最长单词或固定大小元素的长度)以下。要更改此设置,请设置min-width
或 min-height
属性。
考虑下面的例子
这个人的名字有一个很长的单词,这导致了溢出和水平滚动。尽管如此,我还是在标题中添加了下面的CSS来截断它
.c-person__name {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
由于title
是flex
项目,因此解决方案是重置min-width
并将其强制为零。
.c-person__name {
/*Other styles*/
min-width: 0;
}
下面是修复后的样子
根据CSSWG:
在弹性项目的主轴上可见溢出的项目上,当在弹性项目的主轴min-size
属性中指定时,指定自动最小尺寸。
意味着,将overflow
设置为visible
值以外的值会导致min-width
被计算为0
,这解决了我们不设置min-width: 0
的问题。
事例源码:https://codepen.io/shadeed/pen/398ccffcd437a2fb042f5ce3bdd68c57
使用 flexbox 将最小高度设置为零虽然与min-width
相比,这是一个不太常见的问题,但是它可能发生。 只是为了确认,问题与不能少于其内容的弹性项目有关。 结果min-height
值被设置为与内容一样长。
考虑以下示例:
用红色表示的文本应该在父文本中裁剪。因为面板主体是一个flex
项目,所以它的min-height
与它的内容相等。为了防止这种情况,我们应该重新设置最小高度值。看看HTML和CSS是怎么样的。
HTML