了解如何使用这些得到很好支持的 CSS 函数来控制元素大小、保持适当的间距,以及实现流式排版。
随着自适应设计变得更加细微,CSS 也在不断完善,以便为作者提供更大的控制权。min()
、max()
和 clamp()
函数现已在所有现代浏览器中受支持,是用于使网站和应用的编写更加动态和响应迅速的最新工具之一。您可以使用这些函数来控制元素的大小和调整大小、保持元素之间的间距,以及创建灵活、流畅的排版。
数学函数
CSS 值和单位级别 4calc()
、min()
、max()
和clamp()
允许使用包含加号 (+)、减号 (-)、乘号 (*) 和除号 (/) 的数学表达式作为组件值
浏览器支持
min()
max()
clamp()
用法
您可以在任何 CSS 表达式的右侧使用 min()
、max()
和 clamp()
,前提是这些值在该位置有意义。对于 min()
和 max()
,您需要提供一个值的参数列表,浏览器会确定哪个值最小或最大。例如,对于 width: min(1rem, 50%, 10vw)
,浏览器会计算这些相对单位中哪个最小,并将该值用作元素的宽度。
max()
函数对最大值也会执行相同的操作。
如需使用 clamp()
,请输入三个值:最小值、用于计算的理想值和最大值。
您可以在允许 <length>
、<frequency>
、<angle>
、<time>
、<percentage>
、<number>
或 <integer>
的任何位置使用这些函数。您可以将它们单独使用(如在 font-size: max(0.5vw, 50%, 2rem)
中)、与 calc()
一起使用(如在 font-size: max(calc(0.5vw - 1em), 2rem)
中)或组合使用(如在 font-size: max(min(0.5vw, 1em), 2rem)
中)。
以下是使用这些函数的一些示例。
理想宽度
根据 Robert Bringhurst 的《排版样式的要素》一书,对于采用衬线字体的文本大小设置的单列页面,“45 到 75 个字符的长度被广泛认为是令人满意的行长”。
为确保文本块的宽度保持在 45 到 75 个字符之间,请使用 clamp()
和 ch
(宽度为 0 的字符进度)单位:
p {
width: clamp(45ch, 50%, 75ch);
}
这样,浏览器便能确定段落的宽度。默认情况下,它会将宽度设置为 50%。如果 50% 小于 45ch
,则改用 45ch
作为宽度;如果 50% 大于 75ch
,则改用 75ch
。
您也可以只使用 min()
或 max()
来拆分此类数据。如果您希望元素始终采用 50%
宽度,并且在较大屏幕上,宽度不超过 75ch
,请使用 width: min(75ch, 50%);
设置最大尺寸。
同样,您可以使用 max()
函数设置清晰可辨文字的大小下限,如 width: max(45ch, 50%);
所示。在这里,浏览器会选择较大的值,这意味着元素必须为 45ch
或更宽。
管理内边距
您还可以使用 max()
设置最小内边距大小。此示例来自 CSS Tricks,其中读者 Caluã de Lacerda Pataca 分享了以下想法:让元素在较大的屏幕尺寸上具有额外的内边距,但在较小的屏幕尺寸上保持最小内边距。为此,请使用 calc()
或 max()
,并从元素两侧的边距最小值(calc((100vw - var(--contentWidth)) / 2)
或 max(2rem, 50vw - var(--contentWidth) / 2)
)中减去。在样式表中,它应如下所示:
footer {
padding: var(--blockPadding) max(2rem, 50vw - var(--contentWidth) / 2);
}
流体排版
为了支持流式排版,Mike Riethmeuller 推广了一种技术,即使用 clamp()
函数设置最小字体大小和最大字体大小,并允许在这些大小之间进行缩放。
在 clamp(),
设计字体缩放之前,需要复杂的样式字符串。现在,您可以让浏览器为您完成工作。设置可接受的最小字体大小(例如,标题的 1.5rem
)、最大字体大小(例如 3rem
)和理想字体大小(例如 5vw
)。现在,您只需使用很少的代码,即可让排版随页面的视口宽度进行缩放,直到达到最小值和最大值的限制:
p {
font-size: clamp(1.5rem, 5vw, 3rem);
}
更多资源
来自 @yer_a_wizard 的 Unsplash 用户封面图片。