Home > Web Front-end > CSS Tutorial > Using Absolute Value, Sign, Rounding and Modulo in CSS Today

Using Absolute Value, Sign, Rounding and Modulo in CSS Today

Joseph Gordon-Levitt
Release: 2025-03-21 11:15:10
Original
894 people have browsed it

Clever use of CSS mathematical functions: simulate abs(), sign(), round() and mod()

The CSS specification contains many practical mathematical functions, such as trigonometric functions, exponential functions, symbolic correlation functions (abs(), sign()) and ladder value functions (round(), mod(), rem()). However, these functions are not supported by all browsers. This article will introduce how to use existing CSS features to simulate the functions of abs(), sign(), round() and mod() functions, and demonstrate its power in practical applications.

It should be noted that the following technologies are not designed for older browsers. Some technologies rely on browser support for custom attribute registration (using @property), and are currently mainly limited to Chromium browser.

Using Absolute Value, Sign, Rounding and Modulo in CSS Today

Simulation calculation equivalents

  • --abs (abs)

It can be implemented using the max() function of CSS. Suppose you have a custom property --a , whose value may be positive or negative. To get its absolute value, you can use the following method:

 --abs: max(var(--a), -1*var(--a));
Copy after login

If --a is positive, then -1*var(--a) is negative, max() returns var(--a) ; if --a is negative, then -1*var(--a) is positive, max() returns -1*var(--a) .

  • --sign (symbol)

Using absolute values, you can calculate the symbol of a number:

 --abs: max(var(--a), -1*var(--a));
--sign: calc(var(--a)/var(--abs));
Copy after login

Important: This method is only suitable for unitless values. If --a is 0, you need to use Houdini support to register the --sign attribute and set the initial value to 0:

 @property --sign {
  syntax: '<integer> ';
  initial-value: 0;
  inherits: false;
}</integer>
Copy after login

For integers, you can use clamp() function to simplify:

 --sign: clamp(-1, var(--a), 1);
Copy after login

This method is only suitable for integers with no unit value and an absolute value of at least 1. For decimals, improvements are needed, such as:

 --lim: .000001;
--sign: clamp(-1, var(--a)/var(--lim), 1);
Copy after login
  • --round , --ceil and --floor (rounded, rounded up and rounded down)

This requires registering a custom property and forcing its type to an integer:

 @property --round {
  syntax: '<integer> ';
  initial-value: 0;
  inherits: false;
}

.my-elem { --round: var(--a); }</integer>
Copy after login

--ceil and --floor can be implemented by adding or subtracting 0.5:

 @property --floor {
  syntax: '<integer> ';
  initial-value: 0;
  inherits: false;
}

@property --ceil {
  syntax: '<integer> ';
  initial-value: 0;
  inherits: false;
}

.my-elem {
  --floor: calc(var(--a) - .5);
  --ceil: calc(var(--a) .5);
}</integer></integer>
Copy after login
  • --mod (mod)

Based on --floor implementation:

 @property --floor {
  syntax: '<integer> ';
  initial-value: 0;
  inherits: false;
}

.my-elem {
  --floor: calc(var(--a)/var(--b) - .5);
  --mod: calc(var(--a) - var(--b)*var(--floor));
}</integer>
Copy after login

Application Cases

  • Symmetric effects in animation

Absolute values ​​can be used to create symmetric animation delays:

 --m: calc(.5*(var(--n) - 1));
--abs: max(var(--m) - var(--i), var(--i) - var(--m));
animation-delay: calc(var(--abs)/var(--m)*#{$t}) infinite backwards;
Copy after login
  • Adjust style according to the selected item

You can use symbolic functions to determine whether an element is before or after the element is selected, so that different styles are applied.

  • Time formatting

You can use floor() and mod() functions to format the time:

 --min: max(0, var(--val)/60 - .5);
--sec: calc(var(--val) - var(--min)*60);
Copy after login

For more cases, please refer to the original text.

In short, by cleverly applying the existing features of CSS, some mathematical functions can be simulated and implemented, thereby achieving more complex animation and style effects in CSS without relying on JavaScript. This provides a broader space for creative applications of CSS.

The above is the detailed content of Using Absolute Value, Sign, Rounding and Modulo in CSS Today. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template