CSSNumericValue
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Want more browser support for this feature? Tell us why.
Note: This feature is available in Web Workers.
The CSSNumericValue interface of the CSS Typed Object Model API is the base interface for objects that represent CSS numeric values, such as 10px, 50%, or calc(1px + 2em).
It provides the common methods for basic arithmetic, comparing values, and converting between units.
Note:
CSSNumericValue can't be constructed directly.
Instances are created by the numeric factory functions such as CSS.px(), by parse(), or by reading a style, and are always one of its subtypes, listed below.
Instance properties
None.
Static methods
CSSNumericValue.parse()-
Creates a
CSSNumericValuefrom a string of CSS, such as"42px".
Instance methods
CSSNumericValue.add()-
Returns a new value that is the sum of the
CSSNumericValueand the supplied values. CSSNumericValue.sub()-
Returns a new value that is the
CSSNumericValueminus the supplied values. CSSNumericValue.mul()-
Returns a new value that is the
CSSNumericValuemultiplied by the supplied values. CSSNumericValue.div()-
Returns a new value that is the
CSSNumericValuedivided by the supplied values. CSSNumericValue.min()-
Returns the smallest of the
CSSNumericValueand the supplied values, or aCSSMathMinif they don't all have the same unit. CSSNumericValue.max()-
Returns the largest of the
CSSNumericValueand the supplied values, or aCSSMathMaxif they don't all have the same unit. CSSNumericValue.equals()-
Returns
trueif every value passed is the same as theCSSNumericValue, written with the same values and units, andfalseotherwise. CSSNumericValue.to()-
Converts the
CSSNumericValueto aCSSUnitValuein the specified unit. CSSNumericValue.toSum()-
Converts the
CSSNumericValueinto aCSSMathSumwhose terms use only the specified units, or into the simplest such sum if no units are given. CSSNumericValue.type()-
Returns a
CSSNumericTypedictionary that describes the type of theCSSNumericValue, such as a length or an angle.
Interfaces based on CSSNumericValue
The following interfaces inherit from CSSNumericValue:
Examples
>Doing arithmetic with numeric values
The following code adds and multiplies numeric values created with the numeric factory functions.
When the result can be written as a single value in one unit, the method returns a CSSUnitValue.
Otherwise, it returns one of the CSSMathValue subtypes, which keep the terms separate.
const sameUnits = CSS.px(10).add(CSS.px(5));
console.log(sameUnits.constructor.name); // "CSSUnitValue"
console.log(sameUnits.toString()); // "15px"
const mixedUnits = CSS.px(10).add(CSS.percent(5));
console.log(mixedUnits.constructor.name); // "CSSMathSum"
console.log(mixedUnits.toString()); // "calc(10px + 5%)"
const doubled = CSS.px(10).mul(2);
console.log(doubled.toString()); // "20px"
Growing a box with arithmetic
This example uses the arithmetic methods to make a box wider each time a button is clicked, up to a maximum width. Note that there is hidden logging code that isn't relevant to the example.
HTML
First we define the box to grow, and the button we use to grow it.
<div id="grow-box"></div>
<button id="grow-button">Grow by 20px</button>
CSS
The box starts 100 pixels wide.
#grow-box {
width: 100px;
height: 50px;
margin-bottom: 1rem;
background-color: #6666dd;
}
JavaScript
The code first gets the box and the button, and sets the maximum width as a CSSUnitValue.
It then uses computedStyleMap() to get the box's starting width, and logs it along with its type().
const growBox = document.getElementById("grow-box");
const growButton = document.getElementById("grow-button");
const maxWidth = CSS.px(300);
const startWidth = growBox.computedStyleMap().get("width");
log(`start: ${startWidth}, type: ${JSON.stringify(startWidth.type())}`);
Each time the button is clicked, the handler reads the box's current width and uses add() to add 20 pixels to it.
It then uses min() to make sure the new width is never larger than maxWidth.
Because all the values are in px, each method returns a single CSSUnitValue, which the handler sets as the box's new width.
growButton.addEventListener("click", () => {
const width = growBox.computedStyleMap().get("width");
const newWidth = width.add(CSS.px(20)).min(maxWidth);
growBox.attributeStyleMap.set("width", newWidth);
log(`width: ${newWidth}`);
});
Result
Click the button to grow the box.
The log starts with the box's width and its type, {"length":1}, which means the width is a length.
It then shows the new width after each click, and the box stops growing at 300px.
Specifications
| Specification |
|---|
| CSS Typed OM Level 1> # numeric-value> |