Skip to content
On this page

Variables

We may assign expressions to variables and use them throughout our stylesheet:

font-size = 14px  body  font font-size Arial, sans-serif  //Compiles to: body {  font: 14px Arial, sans-serif; } 
font-size = 14px  body  font font-size Arial, sans-serif  //Compiles to: body {  font: 14px Arial, sans-serif; } 

Variables can even consist of an expression list:

font-size = 14px font-stack = "Lucida Grande", Arial, sans-serif  body  font font-size font-stack  //Compiles to: body {  font: 14px "Lucida Grande", Arial, sans-serif; } 
font-size = 14px font-stack = "Lucida Grande", Arial, sans-serif  body  font font-size font-stack  //Compiles to: body {  font: 14px "Lucida Grande", Arial, sans-serif; } 

Identifiers (variable names, functions, etc.) may also include the $ character. For example:

$font-size = 14px body {  font: $font-size sans-serif; } 
$font-size = 14px body {  font: $font-size sans-serif; } 

We can not use null to create empty variable, but parentheses () can do that:

empty = () body {  font: empty sans-serif; } 
empty = () body {  font: empty sans-serif; } 

Compiles to:

 body {  font: sans-serif;  } 
 body {  font: sans-serif;  } 

Property Lookup

Another cool feature unique to Stylus is the ability to reference properties defined without assigning their values to variables. A great example of this is the logic required for vertically and horizontally center an element (typically done using percentages and negative margins, as follows):

#logo  position: absolute  top: 50%  left: 50%  width: w = 150px  height: h = 80px  margin-left: -(w / 2)  margin-top: -(h / 2) 
#logo  position: absolute  top: 50%  left: 50%  width: w = 150px  height: h = 80px  margin-left: -(w / 2)  margin-top: -(h / 2) 

Instead of assigning the variables w and h, we can simply prepend the @ character to the property name to access the value:

#logo  position: absolute  top: 50%  left: 50%  width: 150px  height: 80px  margin-left: -(@width / 2)  margin-top: -(@height / 2) 
#logo  position: absolute  top: 50%  left: 50%  width: 150px  height: 80px  margin-left: -(@width / 2)  margin-top: -(@height / 2) 

Another use-case is conditionally defining properties within mixins based on the existence of others . In the following example, we apply a default z-index of 1—but only if z-index was not previously specified:

position()  position: arguments  z-index: 1 unless @z-index  #logo  z-index: 20  position: absolute  #logo2  position: absolute 
position()  position: arguments  z-index: 1 unless @z-index  #logo  z-index: 20  position: absolute  #logo2  position: absolute 

Property lookup will "bubble up" the stack until found, or return null if the property cannot be resolved. In the following example, @color will resolve to blue:

body  color: red  ul  li  color: blue  a  background-color: @color 
body  color: red  ul  li  color: blue  a  background-color: @color