# 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]::before,
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.