The Sass 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.
Contents
The Sass Ampersand & the 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.
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; }
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.
As we just learned, the “double Sass 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.
Learn More About the Sass Ampersand & Other Sass Basics with Treehouse
Treehouse offers a wide range of courses and Techdegrees that you can use to improve your Sass skills. Learn more about using the Sass ampersand and other Sass basics by signing up for a free trial of Treehouse today!
Hello,
Did any of you guys ever tried to use the following code:
SOURCE
´´´
.bananas,
.kiwis {
prop: props;
@at-root .strawberry#{&} {
prop: strawberry;
}
}
´´´
OUTPUT
´´´
.bananas,
.kiwis {
prop: props;
}
.strawberry.bananas,
.kiwis {
prop: strawberry;
}
´´´
I cant manage to join strawberry to kiwis.
Did you ever find a solution to this Mário? I’m having the same problem.
Thanks,
Joel
This is awesome, I just found it and you have saved me some extra work already! love it!
Wow, wonderful blog layout! How long have you been blogging for? you made blogging look easy. The overall look of your site is excellent, as well as the content!
Awesome articles you posted here i am so inspired here keep it continue.
Thanks
Awesome….yeah 🙂
I am becoming very fond of Treehouse articles. Love staying up to date on the modern web technology! 🙂
Sass 3.3 is coming, all this stuff will be even more awesome! 😀
https://gist.github.com/luzlol/7940531
Hey this is fantastic. Ordinarily I would apply the margin to all and then remove with first-child, this is better with less code! Thanks.