# Functions

# calc() function

Accepts a mathematical expression and returns a numerical value.

It is especially useful when working with different types of units (e.g. subtracting a px value from a percentage) to calculate the value of an attribute.

+, -, /, and * operators can all be used, and parentheses can be added to specify the order of operations if necessary.

Use calc() to calculate the width of a div element:

#div1 {
    position: absolute; 
    left: 50px;
    width: calc(100% - 100px); 
    border: 1px solid black; 
    background-color: yellow; 
    padding: 5px; 
    text-align: center; 

Use calc() to determine the position of a background-image:

background-position: calc(50% + 17px) calc(50% + 10px), 50% 50%;

Use calc() to determine the height of an element:

height: calc(100% - 20px);

# attr() function

Returns the value of an attribute of the selected element.

Below is a blockquote element which contains a character inside a data-* attribute (opens new window) which CSS can use (e.g. inside the ::before and ::after pseudo-element (opens new window)) using this function.

<blockquote data-mark='"'></blockquote>

In the following CSS block, the character is appended before and after the text inside the element:

blockquote[data-mark]::after {
    content: attr(data-mark);

# var() function

The var() function allows CSS variables to be accessed.

/* set a variable */
:root {
    --primary-color: blue;

/* access variable */
selector {
    color: var(--primary-color);

This feature is currently under development. Check caniuse.com (opens new window) for the latest browser support.

# linear-gradient() function

Creates a image representing a linear gradient of colors.

linear-gradient( 0deg, red, yellow 50%, blue);

This creates a gradient going from bottom to top, with colors starting at red, then yellow at 50%, and finishing in blue.

# radial-gradient() function

Creates an image representing a gradient of colors radiating from the center of the gradient

radial-gradient(red, orange, yellow) /*A gradient coming out from the middle of the
gradient, red at the center, then orange, until it is finally yellow at the edges*/

# Syntax

  • <calc()> = calc( <calc-sum> )
  • <calc-sum> = <calc-product> [ [ '+' | '-' ] <calc-product> ]*
  • <calc-product> = <calc-value> [ '*' <calc-value> | '/' <number> ]*
  • <calc-value> = <number> | <dimension> | <percentage> | ( <calc-sum> )

# Remarks

For calc(), white space is required around the "-" and "+" operators, but not the "*" or "/" operators.

All units must be of the same type; trying to multiply a height by a time duration, for example, is invalid.