Новые математические функции в модуле единиц и значений CSS 4 уровня – еще один шаг к полноценному программированию на CSS

Предпоследняя неделя января выдалась плодотворной для Рабочей группы по CSS. Целых три дня редакторы CSS-стандартов собирались в офисе Igalia (тех ребят из Испании, которым мы обязаны одновременным внедрением CSS-гридов в половину браузерных движков). В числе прочего обсуждались новые возможности математических вычислений в CSS, о которых давно мечтали верстальщики. Итог этого обсуждения Таб Аткинс подвел в своем твите, скриншот которого вы видите выше.
Итак, в добавок к привычной функции calc() и только-только набирающим популярность min(), max() и clamp(), модуль значений и единиц CSS 4 уровня теперь обзаведется аналогами почти всех функций объекта Math из JS:
- округление (
round()). У нее будут разные режимы, как именно округлять, в зависимости от дополнительного параметра: к ближайшему целому, какround()в JS (ключевое словоnearest), вверх, какceil()(up), вниз, какfloor()(down) или к меньшему по абсолютному значению (to-zero); - деление по модулю (
mod()) и остаток от деления (rem()). Очень похожи, но различаются поведением для отрицательных значений: еслиmod(-18px, 5px)дает результат2px(по правилам деления по модулю в математике), тоrem(-18px, 5px)даст-3px(как оператор%в JS); - абсолютное значение (
abs()) и знак числа (sign()–-1для отрицательных значений,1для положительных,0для нуля); - натуральный логарифм (
log()) и экспонента (exp()); - числовые константы
eиpi(их можно будет использовать только в выражениях внутриcalc()); - особые константы
infinity,-infinityиNaN(в основном они задуманы как вспомогательные, для удобства сериализации, ноinfinityможно будет использовать и явно в значении «очень-очень много», вместо всевозможных 99999px).
И это не считая тригонометрических функций (sin(), cos(), tan(), asin(), acos(), atan() и atan2()), полезных при работе с трансформациями поворота, и функций возведения в степень (pow()), квадратного корня (sqrt()) и вычисления длины вектора по его координатам (hypot()), которые добавили еще раньше.
Если CSS и раньше был тьюринг-полным, то с новыми возможностями фраза «программирование на CSS» и вовсе перестает казаться шуткой, правда? Теперь дело за браузерами, чтобы они так же оперативно это всё внедрили. А чего из новинок больше всего не хватало вам?
P.S. Это тоже может быть интересно:
Вот же ж блин. Часто использую самописную функцию rem() в scss для перевода пикселей в ремы. Надо будет менять. Не понятно, как поведет себя компилятор после введения поддержки данной функции.