1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
---
title: clamp()
slug: Web/CSS/clamp()
translation_of: Web/CSS/clamp()
---
<div>{{CSSRef}}</div>
<div></div>
<p><strong><code>clamp()</code></strong> 函数的作用是把一个值限制在一个上限和下限之间,当这个值超过最小值和最大值的范围时,在最小值和最大值之间选择一个值使用。它接收三个参数:最小值、首选值、最大值。 <code>clamp()</code> 被用在 {{CSSxRef("<length>")}}、{{CSSxRef("<frequency>")}}、{{CSSxRef("<angle>")}}、{{CSSxRef("<time>")}}、{{CSSxRef("<percentage>")}}、{{CSSxRef("<number>")}}、{{CSSxRef("<integer>")}} 中都是被允许的。</p>
<p><code>clamp(MIN, VAL, MAX)</code> 其实就是表示 <code>{{CSSxRef("max", "max")}}(MIN, {{CSSxRef("min", "min")}}(VAL, MAX))</code></p>
<div>{{EmbedInteractiveExample("pages/css/function-clamp.html")}}</div>
<p>示例中 <code>clamp()</code> 用来设置随窗口大小改变的字体大小,但是无论窗口怎么改变,字体大小不会小于设置的最小值,也不会超过设置的最大值。这个效果和 <a href="https://css-tricks.com/snippets/css/fluid-typography/">Fluid Typography</a> 一致,但只用了一行代码,且不需要媒体查询语句。</p>
<h2 id="语法">语法</h2>
<p><code>clamp()</code> 函数接收三个用逗号分隔的表达式作为参数,按最小值、首选值、最大值的顺序排列。</p>
<p>当首选值比最小值要小时,则使用最小值。</p>
<p>当首选值介于最小值和最大值之间时,用首选值。</p>
<p>当首选值比最大值要大时,则使用最大值。</p>
<p>这个表达式可以是数学函数(参看 {{CSSxRef("calc")}} )、字面量或其它计算为有效的参数类型 (如{{CSSxRef("<length>")}}) 表达式,如 {{CSSxRef("attr", "attr()")}},或嵌套的 {{CSSxRef("min")}} 和 {{CSSxRef("max")}} 。作为数学表达式,你可以使用加减乘除运算而无需使用 <code>calc()</code> 函数。你也可以用括号来确定计算顺序。</p>
<p>表达式中的每一个值都可以用不同的单位。</p>
<h3 id="注意">注意</h3>
<ul>
<li>在自动和固定布局表格中,涉及到列、列组、行、行组、单元格的宽度和高度中如果有百分比数学表达式,<em>也许</em>会被视为指定了 <code>auto</code> 。</li>
<li>允许设置表达式的值为 <code>max()</code> 和 <code>min()</code> 。这些表达式是数学表达式,所以你可以进行加减乘除运算。</li>
<li>表达式可以是使用标准运算符优先规则组合 <code>+</code> 、<code>-</code> 、<code>* </code>、<code>/</code> 等运算符的值,确保在 <code>+</code> 、<code>-</code> 两侧各有一个空格。表达式中的操作数可以是 {{CSSxRef("<length>")}} 语法值。你可以给每一个值设置不同的单位。你还可以用括号来确定计算顺序。</li>
<li>Oftentimes you will want to use {{CSSxRef("min")}} and {{CSSxRef("max")}} within a <code>clamp()</code> function.你可能经常会在 <code>clamp()</code> 中使用 {{CSSxRef("min")}} 和 {{CSSxRef("max")}} 。</li>
</ul>
<h3 id="形式语法">形式语法</h3>
<pre class="syntaxbox notranslate">{{CSSSyntax}}</pre>
<h2 id="示例">示例</h2>
<h3 id="min_max_and_clamp_comparison">min, max, and clamp comparison</h3>
<p>这个示例中,我们用 <code><a href="/en-US/docs/Web/CSS/min">min()</a><font face="Arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">、</span></font></code><code><a href="/en-US/docs/Web/CSS/max">max()</a></code> 和 <code>clamp()</code> 实现一个简单的响应式效果。</p>
<p><code><a href="/en-US/docs/Web/HTML/Element/body"><body></a></code> 元素的 <code><a href="/en-US/docs/Web/CSS/width">width</a></code> 设置为 <code>min(1000px, calc(70% + 100px))</code>。其含义是宽度设置为 <code>1000px</code>,当 <code>calc(70% + 100px)</code> 比 <code>1000px</code> 小时,宽度为 <code>calc(70% + 100px)</code> 。 <code>min()</code> 允许你设置一个上限值。</p>
<p> <code><a href="/en-US/docs/Web/HTML/Element/p"><p></a></code> 元素的 <code><a href="/en-US/docs/Web/CSS/font-size">font-size</a></code> 设置为 <code>max(1.2rem, 1.2vw)</code>。其含义是 <code>font-size</code> 是 <code>1.2rem</code>,当计算出 <code>1.2vw</code> 比 <code>1.2rem</code> 大时,则 <code>font-size</code> 为 <code>1.2vw</code> 。 <code>max()</code> 允许你设置一个下限值。</p>
<p><code><a href="/en-US/docs/Web/HTML/Element/Heading_Elements"><h1></a></code> 元素的 <code>font-size</code> 设置为 <code>clamp(1.8rem, 2.5vw, 2.8rem)</code>.。其含义是 <code>font-size</code> 为 <code>1.8rem</code>,当计算出 <code>2.5vw</code> 比 <code>1.8rem</code> 大时,<code>font-size</code> 为 <code>2.5vw</code>,同时,当 <code>2.5vw</code> 计算出来的值比 <code>2.8rem</code> 大时,<code>font-size</code> 为 <code>2.8rem</code>。<code>clamp()</code> 允许你设置一个上限值和下限值。</p>
<p>感兴趣可以在 <a href="https://mdn.github.io/css-examples/min-max-clamp/">GitHub</a> 上查看源码</p>
<h4 id="HTML">HTML</h4>
<pre class="brush: html notranslate"><h1>Simple responsive test</h1>
<p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. In orci orci, eleifend id risus nec, mattis rutrum velit. Suspendisse fringilla egestas erat eu convallis. Phasellus eu velit ut magna dapibus elementum cursus at ligula. Ut tempus varius nibh, nec auctor sapien iaculis sit amet. Fusce iaculis, libero quis elementum viverra, nulla ante accumsan lectus, sit amet convallis lacus ipsum vel est. Curabitur et urna non est consectetur pulvinar vel id risus. Ut vestibulum, sem in semper aliquet, felis arcu euismod sapien, ac imperdiet massa nisl quis sem. Vestibulum ac elementum felis, in tempor velit. Pellentesque purus ex, mattis at ornare quis, porta condimentum mi. Donec vestibulum ligula vel nulla blandit, quis euismod nulla vestibulum. Suspendisse potenti. Nunc neque mauris, tempor sed facilisis at, ultrices eget nulla. Pellentesque convallis ante nec augue porttitor, id tempus ante luctus.</p>
<p>Integer rutrum sollicitudin tellus, quis cursus nulla scelerisque nec. Nunc eu facilisis lorem. Maecenas faucibus sapien eleifend, semper tellus at, pharetra quam. Cras feugiat vulputate tortor at rhoncus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam non felis quis sem lobortis sodales vel id libero. Phasellus sit amet placerat lorem. </p></pre>
<h4 id="CSS">CSS</h4>
<pre class="brush: css notranslate">html {
font-family: sans-serif;
}
body {
margin: 0 auto;
width: min(1000px, calc(70% + 100px));
}
h1 {
letter-spacing: 2px;
font-size: clamp(1.8rem, 2.5vw, 2.8rem);
}
p {
line-height: 1.5;
font-size: max(1.2rem, 1.2vw);
}</pre>
<h2 id="规范">规范</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName("CSS4 Values", "#calc-notation", "clamp()")}}</td>
<td>{{Spec2('CSS4 Values')}}</td>
<td>Initial definition.</td>
</tr>
</tbody>
</table>
<h2 id="浏览器兼容性">浏览器兼容性</h2>
<p>{{Compat("css.types.clamp")}}</p>
<h2 id="继续阅读">继续阅读</h2>
<ul>
<li>{{CSSxRef("calc")}}</li>
<li>{{CSSxRef("max")}}</li>
<li>{{CSSxRef("min")}}</li>
<li><a href="/en-US/docs/Learn/CSS/Introduction_to_CSS/Values_and_units">CSS Values</a></li>
</ul>
|