Sass Tip: The Double Ampersand Selector

In Sass, the ampersand (&) symbol is used to reference the parent selector in a nested rule. For example, the following targets .btn on :hover:

.btn {
  ...
  &:hover {
    background: dodgerblue;
  }
}

We can also place the & after a selector to reverse the nesting order:

.btn {
  ...
  .navbar & {
    background: lightsteelblue;
  }
}

This outputs a descendant selector that targets a .btn element inside .navbar:

.btn {
  ...
}
.navbar .btn {
  background: lightsteelblue;
}

We can take this concept a step further with an adjacent sibling combinator.

Adjacent Sibling Selector

The adjacent sibling combinator (+) is used to target an element’s immediate sibling. For instance:

.heading + .intro {
  ...
}

This targets any intro class immediately following an element with the class heading. Let’s take a look at two useful ways we can use this combinator with the & selector.

Adjacent Buttons

Let’s say we have a button group consisting of a primary and a secondary action button, both have the class btn.

<div class="btn-group">
  <a class="btn" href="#">Primary Action</a>
  <a class="btn" href="#">Secondary Action</a>
</div>

The secondary action button needs to be a different color and have a left margin to separate it from its sibling. We can use the following rule to reference btn, then target its immediate sibling with the same class:

.btn {
  ...
  & + & {
    margin-left: 15px;
    background: firebrick;
  }
}

If two btn classes are adjacent siblings, the second one will get the firebrick background and left margin. Here’s the CSS output:

.btn {
  ...
}
.btn + .btn {
  margin-left: 15px;
  background: firebrick;
}

See CodePen Demo

Columns

The adjacent & selector also helps with column layout. To create a row where all but the first column have a left margin (or gutter), we can write the following:

.col {
  ...
  & + & {
    margin-left: 30px;
  }
}

The first column will remain flush with the left side of the page, while the others get a roomy left margin.

See CodePen Demo

As we just learned, the “double ampersand” sibling selector is a handy solution that keeps us from writing extra CSS and classes in our markup. Methods like these are some of the many ways Sass helps us write cleaner, more efficient front-end code.

To learn more about Sass, check out our new Treehouse course on Sass basics.

Free Workshops

Watch one of our expert, full-length teaching videos. Choose from either HTML, CSS or Wordpress.

Start learning

Guil Hernandez

Guil is the front-end design teacher at Treehouse. You can follow Guil on Twitter at @guilh.

Comments

4 comments on “Sass Tip: The Double Ampersand Selector