Тип данных <calc-keyword> CSS данных представляет хорошо определённые константы, такие как e и pi. Вместо того, чтобы авторы вручную набирали несколько цифр этих математических констант или вычисляли их, несколько из них предоставляются CSS напрямую для удобства.
Синтаксис
Тип <calc-keyword> определяет числовые константы, которые могут быть использованы в математических функциях CSS.
Значения
e-
Основание натурального логарифма, приблизительно равное
2.7182818284590452354. pi-
Отношение окружности круга к его диаметру, приблизительно равное
3.1415926535897932. -
infinity&-infinity -
Бесконечное значение, используемое для обозначения наибольшего/наименьшего возможного значения.
NaN-
Значение, представляющее «Не число» (canonical casing).
Примечания
Сериализация аргументов внутри calc() следует стандарту IEEE-754 для вычислений с плавающей запятой, что означает, что нужно учитывать несколько случаев, касающихся констант, таких как infinity и NaN:
-
Деление на ноль вернёт положительное или отрицательное
infinityв зависимости от знака числителя. -
Сложение, вычитание или умножение
infinityна что-либо вернётinfinity, если не будет произведеноNaN(см. ниже). -
Любая операция с хотя бы одним
NaNаргументом вернётNaN. Это означает, что0 / 0,infinity / infinity,0 * infinity,infinity + (-infinity), иinfinity - infinityвсе вернутNaN. -
Положительный и отрицательный ноль являются возможными значениями (
0⁺и0⁻). Это имеет следующие последствия:- Умножение или деление, которое даёт ноль с ровно одним отрицательным аргументом (
-5 * 0или1 / (-infinity)) или отрицательный результат от комбинаций в других математических функциях, вернёт0⁻. -
0⁻ + 0⁻или0⁻ - 0вернут0⁻. Все остальные сложения или вычитания, которые привели бы к нулю, вернут0⁺. - Умножение или деление
0⁻на положительное число (включая0⁺) вернёт отрицательный результат (либо0⁻или-infinity), в то время как умножение или деление0⁻на отрицательное число вернёт положительный результат.
- Умножение или деление, которое даёт ноль с ровно одним отрицательным аргументом (
Примеры того, как эти правила применяются, показаны в разделе Бесконечность, NaN и деление на ноль.
Примечание: Редко требуется использовать infinity в качестве аргумента в calc(), но это можно использовать для избежания жёстко заданных «волшебных чисел» или для обеспечения того, что определённое значение всегда больше другого значения. Это может быть полезно, если необходимо сделать очевидным, что свойство имеет «наибольшее возможное значение» для этого типа данных.
Формальный синтаксис
Описание
Математические константы могут быть использованы только внутри математических функций CSS для вычислений. Математические константы не являются ключевыми словами CSS, но если они используются вне вычисления, они обрабатываются как любое другое ключевое слово. Например:
-
animation-name: pi;относится к анимации под названием «pi», а не кpiчисловой константе. -
line-height: e;недействительно, ноline-height: calc(e);действительно. -
rotate(1rad * pi);не сработает, потому чтоrotate()не является математической функцией. Используйтеrotate(calc(1rad * pi));
В математических функциях <calc-keyword> значения оцениваются как значения <number>, поэтому e и pi действуют как числовые константы.
Как infinity, так и NaN, являются немного разными, они считаются вырожденными числовыми константами. Хотя технически они не являются числами, они действуют как значения <number>, поэтому для получения бесконечной <length>, например, требуется выражение, подобное calc(infinity * 1px).
Значения infinity и NaN включены в основном для упрощения сериализации и повышения ясности, но могут быть использованы для обозначения «наибольшего возможного значения», поскольку бесконечное значение ограничено допустимым диапазоном. Вряд ли это будет разумным, но при использовании бесконечности намного проще, чем просто вставлять огромные числа в таблицу стилей или жёстко задавать магические числа.
Все константы нечувствительны к регистру, за исключением NaN, что делает calc(Pi), calc(E) и calc(InFiNiTy) допустимыми:
e -e E pi -pi Pi infinity -infinity InFiNiTy NaN
Следующие являются недействительными:
nan Nan NAN
Примеры
Использование e и pi в calc()
Следующий пример демонстрирует, как использовать e внутри calc() для вращения элемента с экспоненциально возрастающим углом. Второй блок демонстрирует, как использовать pi внутри функции sin().
<div id="wrapper">
<div class="container">
<div id="e"></div>
<input type="range" min="0" max="7" step="0.01" value="0" id="e-slider" />
<label for="e-slider">e:</label>
<span id="e-value"></span>
</div>
<div class="container">
<div id="pi"></div>
<input type="range" min="0" max="1" step="0.01" value="0" id="pi-slider" />
<label for="pi-slider">pi:</label>
<span id="pi-value"></span>
</div>
</div>
// sliders
const eInput = document.querySelector("#e-slider");
const piInput = document.querySelector("#pi-slider");
// spans for displaying values
const eValue = document.querySelector("#e-value");
const piValue = document.querySelector("#pi-value");
eInput.addEventListener("input", function () {
e.style.transform = "rotate(calc(1deg * pow(" + this.value + ", e)))";
eValue.textContent = e.style.transform;
});
piInput.addEventListener("input", function () {
pi.style.rotate = "calc(sin(" + this.value + " * pi) * 100deg)";
piValue.textContent = pi.style.rotate;
});
Бесконечность, NaN и деление на ноль
Следующий пример демонстрирует вычисленное значение свойства width при делении на ноль, а затем, как сериализация с различными calc() константами выглядит в консоли:
<div></div>
div {
height: 50px;
background-color: red;
width: calc(1px / 0);
}
const div = document.querySelector("div");
console.log(div.offsetWidth); // 17895698 (infinity clamped to largest value for width)
function logSerializedWidth(value) {
div.style.width = value;
console.log(div.style.width);
}
logSerializedWidth("calc(1px / 0)"); // calc(infinity * 1px)
logSerializedWidth("calc(1px / -0)"); // calc(-infinity * 1px)
logSerializedWidth("calc(1px * -infinity * -infinity)"); // calc(infinity * 1px)
logSerializedWidth("calc(1px * -infinity * infinity)"); // calc(-infinity * 1px)
logSerializedWidth("calc(1px * (NaN + 1))"); // calc(NaN * 1px)
Спецификации
Данные спецификаций для css.types.calc-keyword не найдены.
Проверьте наличие проблем на этой странице или внесите вклад в отсутствующие spec_url в mdn/browser-compat-data. Также убедитесь, что спецификация включена в w3c/browser-specs.
Совместимость с браузерами
См. также
© 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/calc-keyword