Skip to main content

Managing z-index with SASS

Nov 21, 2016

As the project grow z-index can quickly become messy and go out of control. Fortunately we we can leverage SASS to make it manageable.

One of the common issues is figuring out what z-index you need to assign so it stack on top or below a layer. I have seen projects with z-index: 999999 because the dev wanted to put it on top and reading the code they couldn’t find which was the largest value use. To solve this, we can put all our z-index values in one place so it’s easier for new devs to figure out which value to use.

A Solution

// z-index scale
$z-index1: 100;
$z-index2: 200;
$z-index100: 100;

.modal {
  position: fixed;
  z-index: $z-index100;
}

We create a set of variables with values assigned starting from the least value to the largest value. We simple assign these variables to z-index property in our class names.

Nice Solution

We can create a map of z-index values we use and use a SASS function map-get to get any value from the map.

$zindex: (
  modal     : 900,
  overlay   : 800,
  dropdown  : 700,
  header    : 600,
);

.modal {
  z-index: map-get($zindex, modal);
}

Better Solution

We still need to think about which values to give, we can solve this by using index helper function in SASS. Set a variable called $z-stack with all the places you want to use z-index.

$z-stack: header,dropdown,overlay,modal;

We don’t provide any values to our variable, we just give where we want to use them. Using index function we can use z-index like

.modal {
  position: fixed;
  z-index: index($z-stack, modal);
}

index function takes a variable and returns the index position of where it exists. It starts with 1 instead of 0 so we can directly make use of this without worrying about the zero index. So the above code renders to

.modal {
  position: fixed;
  z-index: 3;
}