
8.@at-rootの使い方 ー フロントエンドエンジニアのための「Sass」講座
この記事では、@at-rootの使い方を解説します。
@at-rootはネストして書いているセレクタを、親セレクタやメディアクエリを除外して、ルートの位置に戻すことができます。
これだけの説明では、よくわからないと思いますので、実際に書いてみましょう。
1 2 3 4 5 6 7 8 9 |
.block { .element1 { width: 800px; } @at-root .element2 { width: 1000px; } } |
このSassをコンパイルしてみると、このようなCSSになります。
1 2 3 4 5 6 7 |
.block .element1 { width: 800px; } .element2 { width: 1000px; } |
@at-rootをつけた「.element2」がネストの親である「.block」の外に出されていることがわかります。
複数のルールセットに@at-rootを使う
@at-rootは複数のルールセットに対しても使うことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
.block { .element1 { width: 800px; } @at-root { .element2 { width: 1000px; } .element3 { width: 1100px; } } } |
これをコンパイルすると、@at-rootで囲まれた、「.element2」と「.element3」の両方がネストの親の外に書き出されます。
1 2 3 4 5 6 7 8 9 10 11 |
.block .element1 { width: 800px; } .element2 { width: 1000px; } .element3 { width: 1100px; } |
メディアクエリの中で@at-rootを使う
@at-rootをメディアクエリのネストの中で使った場合は、メディアクエリの外ではなく、中に書き出されます。
1 2 3 4 5 6 7 8 9 |
.block { @media screen and (max-width: 768px) { width: 100%: @at-root .item { margin-bottom: 20px; } } } |
このSassをコンパイルして、CSSにするとこのようになります。
1 2 3 4 5 6 7 8 9 |
@media screen and (max-width: 768px) { .block { width: 100%: } .item { margin-bottom: 20px; } } |
では、@at-rootをつかってメディアクエリの外に書き出したいときにはどうすればよいでしょうか?
withoutオプション
@at-rootにはオプションがあります。そのひとつが(without)です。
@at-root(without: media)と書くことで、メディアクエリの外に書き出されます。
1 2 3 4 5 6 7 8 9 |
.block { @media screen and (max-width: 768px) { width: 100%: @at-root (without:media) .item { margin-bottom: 20px; } } } |
ただ、この場合、at-rootの対象がmediaだけになったので、親セレクタのネストは残ります。
1 2 3 4 5 6 7 8 9 |
@media screen and (max-width: 768px) { .block { width: 100%: } } .block .item { margin-bottom: 20px; } |
親セレクタの外にも出したい場合は、@at-root(without:media rule)と書きます。
1 2 3 4 5 6 7 8 9 |
.block { @media screen and (max-width: 768px) { width: 100%: @at-root (without:media rule) .item { margin-bottom: 20px; } } } |
1 2 3 4 5 6 7 8 9 |
@media screen and (max-width: 768px) { .block { width: 100%: } } .item { margin-bottom: 20px; } |
また、すべてのネストから外に出したい場合は、@at-root(without: all)と書くことで、すべてのルートに書き出すことができます。
withオプション
もうひとつのオプションが(with)です。
このオプションは(without)の逆で、指定したものだけが残り、それ以外が除外されます。
1 2 3 4 5 6 7 8 9 |
.block { @media screen and (max-width: 768px) { width: 100%: @at-root (with:media) .item { margin-bottom: 20px; } } } |
@at-root(with:media)と指定すると、メディアクエリだけが残り、親セレクタが除外されました。
1 2 3 4 5 6 7 8 9 |
@media screen and (max-width: 768px) { .block { width: 100%: } .item { margin-bottom: 20px; } } |
@at-rootの機能はこのように、ネストから外に出して書き出すというものですが、この機能だけ見ても、どこに使うものなのかよくわからないと思います。
使い所としては、ミックスインなどと組み合わせて使う例などがありますが、普段のWeb制作では使わないかなという感覚です。
とりあえず、このような機能もあるのだと知っておいて、必要な時に思い出せるようにしておくといいでしょう。
【動画講座】 フロントエンドエンジニアのための「Sass」講座 ~基礎から実践まで~

HTML5とCSS3の基本的な知識があれば、Sassの知識はゼロからでも大丈夫!Udemyの動画講座なら、約5時間の動画でWeb開発の現場で使える技術を身につけることができます!
このブログから申し込むと定価1,2000円のところ、
90%OFFの1,200円で受講できるクーポンをプレゼント!