clamp() CSS-Funktion
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2020 browserübergreifend verfügbar.
Die clamp() CSS Funktion klemmt einen Wert innerhalb eines Bereichs von Werten zwischen einem definierten Mindest- und Höchstwert. Die Funktion nimmt drei Parameter: einen Mindestwert, einen bevorzugten Wert und einen maximal zulässigen Wert.
Probieren Sie es aus
font-size: clamp(1rem, 2.5vw, 2rem);
font-size: clamp(1.5rem, 2.5vw, 4rem);
font-size: clamp(1rem, 10vw, 2rem);
<section class="default-example" id="default-example">
<div class="transition-all" id="example-element">
The font-size of this text varies depending on the base font of the page,
and the size of the viewport.
</div>
</section>
Beachten Sie, dass die Verwendung von clamp() für Schriftgrößen, wie in diesen Beispielen, es Ihnen ermöglicht, eine Schriftgröße festzulegen, die mit der Größe des Viewports wächst, jedoch nicht unter eine Mindestgröße oder über eine maximale Größe hinausgeht. Es hat denselben Effekt wie der Code im Fluid Typography, jedoch in einer Zeile und ohne die Verwendung von Media-Queries.
Syntax
/* Static values */
width: clamp(200px, 40%, 400px);
width: clamp(20rem, 30vw, 70rem);
width: clamp(10vw, 20em, 100vw);
/* Calculated values */
width: clamp(min(10vw, 20rem), 300px, max(90vw, 55rem));
width: clamp(100px, calc(30% / 2rem + 10px), 900px);
Parameter
Die Funktion clamp(min, val, max) akzeptiert drei durch Kommas getrennte Ausdrücke als Parameter.
min-
Der Mindestwert ist der kleinste (negativste) Wert. Dies ist die untere Schranke im Bereich der zulässigen Werte. Wenn der bevorzugte Wert kleiner als dieser Wert ist, wird der Mindestwert verwendet.
val-
Der bevorzugte Wert ist der Ausdruck, dessen Wert verwendet wird, solange das Ergebnis zwischen den Mindest- und Höchstwerten liegt.
max-
Der Höchstwert ist der größte (positivste) Ausdruckswert, dem der Wert der Eigenschaft zugewiesen wird, wenn der bevorzugte Wert größer als diese obere Schranke ist.
Die Ausdrücke können mathematische Funktionen sein (siehe calc() für mehr Informationen), literale Werte, andere Ausdrücke, die zu einem gültigen Argumenttyp ausgewertet werden (wie <length>), oder verschachtelte min() und max() Funktionen. Für mathematische Ausdrücke können Sie Addition, Subtraktion, Multiplikation und Division ohne die Verwendung der calc()-Funktion selbst verwenden. Sie können auch Klammern verwenden, um die Reihenfolge der Berechnungen festzulegen.
Sie können unterschiedliche Einheiten für jeden Wert in Ihren Ausdrücken und unterschiedliche Einheiten in jeder mathematischen Funktion verwenden, die ein beliebiges der Argumente bildet.
Beachten Sie die folgenden Aspekte bei der Arbeit mit der Funktion:
- Mathematische Ausdrücke, die Prozentsätze für Breiten und Höhen auf Tabellenspalten, Tabellenspalten-Gruppen, Tabellenzeilen, Tabellenzeilen-Gruppen und Tabellenzellen sowohl in automatisch als auch in festen Layout-Tabellen beinhalten, können behandelt werden, als ob
autoangegeben wurde. - Es ist erlaubt,
max()undmin()-Funktionen als Ausdruckswerte zu verschachteln, wobei die inneren wie grundlegende Klammern behandelt werden. Die Ausdrücke sind vollständige mathematische Ausdrücke, sodass Sie direkte Addition, Subtraktion, Multiplikation und Division ohne die Verwendung dercalc()-Funktion selbst verwenden können. - Der Ausdruck kann Werte kombinieren, die die Operatoren Addition (
+), Subtraktion (-), Multiplikation (*) und Division (/) verwenden, unter Beachtung der Standardprioritätsregeln für Operatoren. Achten Sie darauf, auf jeder Seite der+und-Operanden ein Leerzeichen zu setzen. Die Operanden im Ausdruck können jeden<length>Syntaxwert sein. Sie können unterschiedliche Einheiten für jeden Wert in Ihrem Ausdruck verwenden. Sie können auch Klammern verwenden, um die Reihenfolge der Berechnungen festzulegen. - Oftmals werden Sie
min()undmax()innerhalb einerclamp()-Funktion verwenden wollen.
Rückgabewert
clamp(MIN, VAL, MAX) wird als max(MIN, min(VAL, MAX)) aufgelöst.
Basierend auf den angegebenen Parametern gibt die Funktion <length>, <frequency>, <angle>, <time>, <percentage>, <number> oder <integer> zurück.
Formale Syntax
<clamp()> =
clamp( [ <calc-sum> | none ] , <calc-sum> , [ <calc-sum> | none ] )
<calc-sum> =
<calc-product> [ [ '+' | '-' ] <calc-product> ]*
<calc-product> =
<calc-value> [ [ '*' | / ] <calc-value> ]*
<calc-value> =
<number> |
<dimension> |
<percentage> |
<calc-keyword> |
( <calc-sum> )
<calc-keyword> =
e |
pi |
infinity |
-infinity |
NaN
Beispiele
>Vergleich von min(), max() und clamp()
In diesem Beispiel haben wir eine Webseite, die min(), max() und clamp() verwendet, um Größen responsiv einzustellen.
Das Beispiel passt die Größen von Seitenelementen in dreierlei Hinsicht an:
- die Längen der Textzeilen
- die Schriftgröße des Absatztextes
- die Schriftgröße des Überschriftentextes
In allen drei Fällen verwendet die Seite eine Kombination aus viewport-relativen Einheiten (vw und <percentage>), um eine Größe festzulegen, die mit der Viewport-Breite variiert, und einen Wert, der nicht viewport-relativ ist (rem und px), um Mindest- und/oder Höchstgrößen zu implementieren.
Das Beispiel ist unter https://mdn.github.io/css-examples/min-max-clamp/ verfügbar. Öffnen Sie es in einem neuen Fenster und versuchen Sie, die Fensterbreite anzupassen.
Die Zeilenlänge (gesteuert durch die width des <body>-Elements) wird zunehmen, wenn die Fensterbreite zunimmt, jedoch nur bis zu einem bestimmten Punkt (1000px), und darüber hinaus wird sie nicht weiter zunehmen. Wir verwenden min(), um eine maximale Zeilenlänge festzulegen: sie kann unter 1000px gehen, aber nicht darüber. Dies ist hilfreich, da lange Zeilen schwerer lesbar sind, daher möchten wir oft begrenzen, wie lang eine Zeile sein kann. Um dies zu erreichen, verwenden wir min(1000px, calc(70% + 100px)): wenn das Ergebnis der prozentbasierten Berechnung über 1000px geht, wechseln wir zum festen 1000px-Wert.
Die Größe des Absatztextes, gesteuert durch die font-size des <p>-Elements, nimmt ab, wenn das Fenster schmaler wird, jedoch nur bis zu einem bestimmten Punkt, und darüber hinaus (der Punkt, an dem 1.2vw kleiner als 1.2rem ist) wird es nicht kleiner: es bleibt bei 1.2rem. Wir verwenden max(), um eine minimale Schriftgröße festzulegen: die Schrift kann über 1.2rem wachsen, aber niemals darunter. Dies ist hilfreich, weil wirklich kleiner Text schwer lesbar ist. Um dies zu erreichen, verwenden wir max(1.2rem, 1.2vw). Das bedeutet, dass die font-size auf 1.2rem festgelegt wird, es sei denn, der berechnete Wert von 1.2vw ist größer als der von 1.2rem, in diesem Fall wird sie stattdessen auf 1.2vw festgelegt.
Die Größe des Überschriftentextes, gesteuert durch die font-size des <h1>-Elements, hat einen viewport-relativen Wert mit sowohl einem maximalen als auch einem minimalen Schwellenwert. Um dies zu erreichen, verwenden wir clamp(1.8rem, 2.5vw, 2.8rem). Der viewport-relative Wert ist 2.5vw, aber er wird zwischen 1.8rem und 2.8rem geklemmt, also:
- wenn der berechnete Wert von
2.5vwkleiner als1.8remist, wird1.8remverwendet - wenn der berechnete Wert von
2.5vwgrößer als2.8remist, wird2.8remverwendet.
Dies verhindert, dass der Überschriftentext in einem sehr schmalen Fenster zu klein oder in einem sehr breiten Fenster zu groß wird.
HTML
<h1>Basic 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>
CSS
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);
}
Barrierefreiheit
Wenn clamp() zum Steuern der Textgröße verwendet wird, stellen Sie sicher, dass der maximal zulässige Wert eine relative Längeneinheit ist, die nicht weniger als doppelt so groß ist wie der minimal zulässige Wert, zum Beispiel:
font-size: clamp(1rem, 2.5vw, 2rem);
Dies hilft zu gewährleisten, dass die Textgröße beim Zoomen der Seite auf mindestens 200 % skaliert werden kann.
Spezifikationen
| Spezifikation |
|---|
| CSS Values and Units Module Level 4> # funcdef-clamp> |