Использование математических функций CSS
Математические функции CSS позволяют задавать значение свойства, например, height, animation-duration, или font-size элемента, в виде математического выражения.
Без использования математики встроенные единицы CSS, такие как rem, vw, и %, часто достаточно гибкие для стилизации HTML-элементов для достижения определенного пользовательского опыта.
Однако есть случаи, когда мы можем чувствовать ограничения, выражая стиль элемента с помощью единственного значения и единицы. Рассмотрим следующие примеры:
- Мы хотим установить высоту области содержимого равной "высоте viewport минус высота навигационной панели".
- Мы хотим сложить ширины двух элементов, чтобы определить ширину третьего элемента.
- Мы хотим предотвратить увеличение размера переменной
font-sizeнекоторого текста за определенный предел.
Во всех этих случаях нам необходимо использовать математические функции для достижения желаемых результатов. Одним из решений может быть использование математических функций, определенных JavaScript, и динамическое задание стилей элементов на основе результатов, вычисленных скриптами.
Во многих случаях, включая примеры выше, мы можем вместо этого использовать математические функции, встроенные непосредственно в CSS. Это решение часто проще в реализации и быстрее для выполнения браузером, чем использование JavaScript.
В общей сложности разработчики могут использовать комбинацию из почти двадцати математических функций CSS в своих стилевых файлах. В этом руководстве мы продемонстрируем четыре наиболее часто используемые функции и представим более сложные.
calc(): Основные математические операции
В двух из трех примеров выше мы хотим установить стиль элемента в соответствии с результатом сложения или вычитания. Это как раз один из случаев применения функции calc().
Функция calc() позволяет задавать значения свойств CSS с использованием сложения, вычитания, умножения и деления. Она часто используется для объединения двух значений CSS с различными единицами, таких как % и px.
Математическая функция calc() принимает математическое выражение в качестве параметра и возвращает результат этого выражения, например:
property: calc(expression);
calc() Пример
Нажмите на значок воспроизведения ниже, чтобы посмотреть пример calc() в игровом поле кода и попробовать его самостоятельно.
div {
background-color: black;
margin: 4px 0;
width: 100%;
}
div > code {
display: block;
background-color: red;
color: white;
height: 48px;
}
.calc1 > code {
/* Output width: `110px` */
width: calc(10px + 100px);
}
.calc2 > code {
/* Output width: `10em` */
width: calc(2em * 5);
}
.calc3 > code {
/* Output width: Depends on the container's width */
width: calc(100% - 32px);
}
.calc4 > code {
--predefined-width: 100%;
/* Output width: Depends on the container's width */
width: calc(var(--predefined-width) - calc(16px * 2));
}
min(): Поиск минимального значения в наборе
Иногда необходимо, чтобы значение свойства CSS не превышало определенного числа. Например, мы хотим, чтобы ширина нашей области содержимого была минимальной из "полной ширины экрана" и "500 пикселей". В таких случаях можно использовать математическую функцию CSS min().
Функция min() принимает набор значений, разделенных запятыми, в качестве аргументов и возвращает наименьшее из этих значений, например:
property: min(<first value>, <second value>, <third value>, ...);
Эта функция часто используется для сравнения двух значений CSS с разными единицами, таких как % и px.
min() Пример
Нажмите на значок воспроизведения ниже, чтобы посмотреть пример min() в игровом поле кода и попробовать его самостоятельно.
div {
background-color: black;
margin: 4px 0;
width: 100%;
}
div > code {
display: block;
background-color: darkblue;
color: white;
height: 48px;
}
.min1 > code {
/* Output width: Depends on the container's width; */
/* on this page, likely to be `50%` of the container's width */
width: min(9999px, 50%);
}
.min2 > code {
/* Output width: Depends on the container's width; */
/* on this page, likely to be `100%` of the container's width */
width: min(9999px, 100%);
}
.min3 > code {
/* Output width: Depends on the container's width; */
/* on this page, likely to be `120px` of the container's width */
width: min(120px, 150px, 90%);
}
.min4 > code {
/* Output width: Depends on the container's width; */
/* on this page, likely to be `80px` of the container's width */
width: min(80px, 90%);
}
max(): Поиск максимального значения в наборе
Аналогично min(), иногда необходимо, чтобы значение свойства CSS не опускалось ниже определенного числа. Например, мы хотим, чтобы ширина нашей области содержимого была наибольшей из "полной ширины экрана" и "500 пикселей". В таких случаях мы можем использовать математическую функцию CSS max().
Функция max() принимает набор значений, разделенных запятыми, в качестве аргументов и возвращает наибольшее из этих значений, например:
property: max(<first value>, <second value>, <third value>, ...);
Эта функция часто используется для сравнения двух значений CSS с разными единицами, таких как % и px.
Обратите внимание на сходства и различия между примерами для min() и max().
max() Пример
Нажмите на значок воспроизведения ниже, чтобы посмотреть пример max() в игровом поле кода и попробовать его самостоятельно.
div {
background-color: black;
margin: 4px 0;
width: 100%;
height: 48px;
}
div > code {
display: block;
background-color: darkmagenta;
color: white;
height: 48px;
}
.max1 > code {
/* Output width: Depends on the container's width; */
/* on this page, likely to be `50%` of the container's width */
width: max(50px, 50%);
}
.max2 > code {
/* Output width: Depends on the container's width; */
/* on this page, likely to be `100%` of the container's width */
width: max(50px, 100%);
}
.max3 > code {
/* Output width: Depends on the container's width; */
/* on this page, likely to be `90%` of the container's width */
width: max(20px, 50px, 90%);
}
.max4 > code {
/* Output width: Depends on the container's width; */
/* on this page, likely to be `80%` of the container's width */
width: max(80px, 80%);
}
clamp(): Ограничение значения между двумя значениями
Мы можем объединить функции min() и max() с помощью clamp(). Функция clamp() принимает минимальное значение, значение для ограничения и максимальное значение в качестве аргументов, например:
property: clamp(<minimum value>, <value to be clamped>, <maximum value>);
- Если значение для ограничения меньше переданного минимального значения, функция вернет минимальное значение.
- Если значение для ограничения больше переданного максимального значения, функция вернет максимальное значение.
- Если значение для ограничения находится между переданными минимальным и максимальным значениями, функция вернет исходное значение для ограничения.
Эта функция часто используется для сравнения двух значений CSS с разными единицами, таких как % и px.
clamp() Пример
Нажмите на значок воспроизведения ниже, чтобы посмотреть пример clamp() в игровом поле кода и попробовать его самостоятельно.
div {
background-color: black;
margin: 4px 0;
width: 100%;
height: 48px;
}
div > code {
display: block;
background-color: darkgreen;
color: white;
height: 48px;
}
.clamp1 > code {
/* Output width: Depends on the container's width; */
/* on this page, likely to be `20%` of the container's width */
width: clamp(20%, 1px, 80%);
}
.clamp2 > code {
/* Output width: Depends on the container's width; */
/* on this page, likely to be `90%` of the container's width */
width: clamp(10%, 9999px, 90%);
}
.clamp3 > code {
/* Output width: `125px` */
width: clamp(125px, 1px, 250px);
}
.clamp4 > code {
/* Output width: `150px` */
width: clamp(25px, 9999px, 150px);
}
Дополнительные функции CSS для математических вычислений
При компоновке и стилизации элементов DOM четыре основные математические функции calc(), min(), max() и clamp() часто оказываются достаточными. Однако для сложных применений, таких как учебные материалы по математике, 3D визуализации или анимации CSS, вы можете рассмотреть:
- Функции для дискретных значений
-
Тригонометрические функции
-
sin(): вычисляет тригонометрический синус числа -
cos(): вычисляет тригонометрический косинус числа -
tan(): вычисляет тригонометрический тангенс числа -
asin(): вычисляет обратный тригонометрический синус числа -
acos(): вычисляет обратный тригонометрический косинус числа -
atan(): вычисляет обратный тригонометрический тангенс числа -
atan2(): вычисляет обратный тригонометрический тангенс, заданный двумя числами
-
- Экспоненциальные функции
- Функции, связанные со знаком
Общие соображения
- Вы можете использовать математические функции CSS для создания адаптивных пользовательских интерфейсов без написания кода JavaScript.
- Иногда математические функции CSS могут использоваться вместо CSS-запросов на соответствие среде для определения точек разрыва макета.
- В 2023 году члены проекта Interop выбрали «Математические функции CSS» в качестве приоритетной области улучшения. Это означает, что поставщики браузеров сотрудничают, чтобы обеспечить одинаковое выполнение математических функций CSS в различных браузерах и устройствах.
© 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/CSS_Functions/Using_CSS_math_functions