clamp()
Базовая линия Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2020 года.
Функция clamp() CSS функция ограничивает среднее значение в диапазоне значений между определённым минимальным и максимальным значениями. Функция принимает три параметра: минимальное значение, предпочтительное значение и максимальное значение.
Попробуйте
Обратите внимание, что использование clamp() для размеров шрифтов, как в этих примерах, позволяет устанавливать размер шрифта, который увеличивается с размером области просмотра, но не уменьшается ниже минимального размера шрифта или выше максимального размера шрифта. Он имеет тот же эффект, что и код в Жидкая типографика, но в одной строке и без использования медиа-запросов.
Синтаксис
/* 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);
Параметры
Функция clamp(min, val, max) принимает три выражения, разделённые запятыми, в качестве параметров.
min-
Минимальное значение — наименьшее (самое отрицательное) значение. Это нижняя граница диапазона допустимых значений. Если предпочтительное значение меньше этого значения, используется минимальное значение.
val-
Предпочтительное значение — выражение, значение которого будет использоваться, если результат находится между минимальным и максимальным значениями.
max-
Максимальное значение — наибольшее (самое положительное) значение выражения, которому будет присвоено значение свойства, если предпочтительное значение больше этой верхней границы.
Выражения могут быть математическими функциями (см. calc() для получения дополнительной информации), литеральными значениями, другими выражениями, которые приводят к типу данных, допустимому в качестве аргумента (например, <length>), или вложенными функциями min() и max(). Для математических выражений можно использовать сложение, вычитание, умножение и деление без использования самой функции calc(). Также можно использовать скобки для определения порядка вычислений, если это необходимо.
Для каждого значения в выражениях можно использовать различные единицы измерения, а также разные единицы в любой математической функции, входящей в состав любого из аргументов.
При работе с функцией следует учитывать следующие моменты:
- Математические выражения, включающие проценты для ширины и высоты столбцов таблицы, групп столбцов таблицы, строк таблицы, групп строк таблицы и ячеек таблицы в таблицах с автоматическим и фиксированным макетом, могут обрабатываться так, как если бы было указано
auto. - Разрешено вкладывать функции
max()иmin()как значения выражений, в этом случае внутренние функции рассматриваются как простые скобки. Выражения представляют собой полные математические выражения, поэтому можно использовать непосредственное сложение, вычитание, умножение и деление без использования самой функции calc(). - Выражение может представлять собой значения, объединяющие операторы сложения (
+), вычитания (-), умножения (*) и деления (/), используя стандартные правила приоритета операторов. Не забудьте поставить пробел с каждой стороны операндов+и-. Операнды в выражении могут быть любым значением синтаксиса<length>. Для каждого значения в выражении можно использовать разные единицы измерения. Также можно использовать скобки для определения порядка вычислений, если это необходимо. - Часто необходимо использовать функции
min()иmax()внутри функцииclamp().
Возвращаемое значение
clamp(MIN, VAL, MAX) разрешается как . max(MIN, min(VAL, MAX))
В зависимости от указанных параметров функция возвращает <length>, <frequency>, <angle>, <time>, <percentage>, <number> или <integer>.
Формальный синтаксис
<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
Примеры
Сравнение min(), max() и clamp()
В этом примере веб-страница использует min(), max() и clamp() для задания размеров отзывчиво.
Пример изменяет размеры элементов страницы тремя способами:
- длину строк текста
- размер шрифта абзацев
- размер шрифта заголовков
Во всех трёх случаях страница использует комбинацию единиц, относительных к области просмотра (vw и <percentage>), для задания размера, изменяющегося в зависимости от ширины области просмотра, и значения, которое не является относительным к области просмотра (rem и px) для реализации минимальных и/или максимальных размеров.
Пример находится по адресу https://mdn.github.io/css-examples/min-max-clamp/. Откройте его в новом окне и попробуйте изменить ширину окна.
Длина строки (контролируемая шириной width элемента <body>) будет увеличиваться по мере увеличения ширины окна, но только до определённого момента (1000px), и за этим моментом она больше не будет увеличиваться. Мы используем min() для задания максимальной длины строки: она может быть меньше 1000px, но не будет больше. Это полезно, потому что длинные строки сложнее читать, поэтому мы часто хотим ограничить их длину. Для этого мы используем min(1000px, calc(70% + 100px)): когда результат расчёта на основе процентов превышает 1000px, мы переключаемся на фиксированное значение 1000px.
Размер шрифта абзаца, контролируемый размером шрифта font-size элемента <p>, уменьшается по мере сужения окна, но только до определённого момента, и за этим моментом (в момент, когда 1.2vw меньше 1.2rem) он больше не уменьшается: он остаётся 1.2rem. Мы используем max() для задания минимального размера шрифта: размер шрифта может быть больше 1.2rem, но никогда не будет меньше. Это полезно, потому что очень мелкий текст сложно читать. Для этого используется max(1.2rem, 1.2vw). Это означает, что font-size будет установлено на 1.2rem, если вычисленное значение 1.2vw больше, чем 1.2rem, в этом случае оно будет установлено на 1.2vw вместо этого.
Размер шрифта заголовка, контролируемый размером шрифта font-size элемента <h1>, имеет относительное к области просмотра значение с максимальным и минимальным порогами. Для этого используется clamp(1.8rem, 2.5vw, 2.8rem). Значение, относительное к области просмотра, — 2.5vw, но оно ограничено между 1.8rem и 2.8rem, поэтому:
- если вычисленное значение
2.5vwменьше1.8rem, то используется1.8rem - если вычисленное значение
2.5vwбольше2.8rem, то используется2.8rem.
Это предотвращает слишком маленький размер шрифта заголовка в очень узком окне или слишком большой в очень широком окне.
HTML
<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>
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);
}
Спецификации
| Спецификация |
|---|
| CSS Values and Units Module Level 4 # calc-notation |
Совместимость браузеров
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
clamp |
79 | 79 | 75 | 66 | 13.1 | 79 | 79 | 57 | 13.4 | 12.0 | 79 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/clamp