Dart Sassを使う上で1番基本的なネストやアンパサンドの書き方|Dart Sass入門

Sassの前提知識
Sassは「Syntactically Awesome StyleSheet」の略で、直訳すると「構文的に素晴らしいスタイルシート」になります。
下記のような機能が使えて、最終的にSassをコンパイル(変換)してCSSにすることで、ブラウザでも問題なく読み込めて、なおかつ便利な機能が使えます。
- CSSを入れ子にできるネスト機能
- 変数機能(Sassが登場した当時はCSSの変数機能もまだ存在していなかった)
- mixinやextendなど、よく使う記述一式をグループ化して利用できる
これらの機能を使うことで、記述量を減らしたり、CSSの管理がしやすくなります。
現在はDart Sassが主流
Sassにもいろいろ種類がありますが、2022年現在は「Dart Sass」と呼ばれるものが主流になっています。
それ以外の種類については過去にまとめているので、ぜひそちらの記事をご覧ください。
Sassのコンパイル方法
ブラウザはSassを直接読み込めないので、最終的にCSSにコンパイルする必要があります。
コンパイル方法は数多くありますが、初心者の方はまずVisual Studio Codeの拡張機能を利用するのが簡単です。
- Visual Studio Codeの拡張機能を使う
- Webpackやgulpなどのツールを使う
- Preprosなどのアプリケーションを使う
基本的な書き方
ここから先は、Sassの特徴的な機能であるネストなどの基本的な書き方について紹介します。
ネスト(入れ子)
Sassでは波括弧の中に波括弧をネスト(入れ子)にできます。
.wrap{
.btn{
display: block;
}
}この場合は.wrapの中にある.btnにのみスタイルを適用する指定ができて、コンパイルすると下記のようになります。
.wrap .btn{
display: block;
}要素の中の要素を指定する、いわゆる「子孫セレクタ」になります。
ネストすることによって、何度も同じclass名を書く必要がなくなるのと、どのclassに内包しているのか分かりやすくなります。
アンパサンド
ネスト内で&(アンパサンド)記号を使うと、親セレクタの名前のすぐ後ろにくっつく形で変換されます。
具体的にコンパイル前と後を見比べると分かります。
.btn{
&-primary{
display: block;
}
}上記のように「&-primary」と記述した場合は、「&」の部分にその親である「.btn」が入ります。
.btn-primary{
display: block;
}疑似要素や疑似クラスと組み合わせることで、ホバーなどの管理が非常にしやすくなります。
.btn{
&-primary{
display: block;
&:hover{
// ホバー時のスタイル
}
&::before{
// 疑似要素のスタイル
}
}
}このように管理することで、どんなCSSが適用されるのかコードを見ただけで想像しやすくなります。
アンパサンドを使った直下セレクタの指定
>で区切ることで、特定要素の直下にある要素を指定できます。
これを直下セレクタと呼ぶのですが、これもアンパサンドを使ってSassで表現できます。
article{
& > p{
font-size: 15px;
line-height: 1.5;
}
}コンパイルすると下記のようになります。
article > p{
font-size: 15px;
line-height: 1.5;
}アンパサンドを使った隣接セレクタの指定
+で区切ると、特定要素の次にくる要素を指定できます。
これを隣接セレクタと呼び、Sassのアンパサンドで表現できます。
article{
& + footer{
border-top: 1px solid #ccc;
}
}コンパイルすると下記のようになって、<article>タグの次にくる<footer>にのみスタイルが適用されるようになります。
article + footer{
border-top: 1px solid #ccc;
}アンパサンドを使った間接セレクタの指定
~で区切ることで、特定の要素以降にある要素を指定できます。
これを間接セレクタと呼び、Sassのアンパサンドで表現できます。
h2{
& ~ p{
font-size: 13px;
}
}コンパイルすると下記のようになって、<h2>タグ以降にある<p>にスタイルが適用されるようになります。
h2 ~ p{
font-size: 13px;
}ちなみに、間接セレクタは同じ階層にある要素にしか適用されないので注意が必要です。
階層を深くしすぎないように注意する
なんでもかんでもネストしていくと、どんどん階層が深くなってしまい逆に見にくいコードになってしまいます。
また、たとえば.btn-primaryを探したいときにアンパサンドで区切られていると検索に引っかからないデメリットがあります。
ルールを決めておけば「&-primary」で検索して見つけることもできますが、同じように「&-primary」の記述をしていると他にも検索候補が表示されてしまいます。
どこまで区切った方がいいのか、後から探すときに困らないか考えつつ、バランスを考えて利用するようにしましょう。





Visual Studio CodeでCSVの編集を見やすく行う拡張機能「Edit csv」
Vue CLIでの画像パスの指定方法・配置場所まとめ
Visual Studio CodeでDart Sassのコンパイルができる拡張機能「DartJS Sass Compiler and Sass Watcher」
Nuxt.jsの基本と最初のセットアップ「プロジェクトの作成と起動をするまでの流れ」
Visual Studio Codeでファイル差分の比較を行う方法
Emmetで複数のタグを一括展開して、コーディングスピードをさらに上げる方法
JavaScriptで配列内から特定条件の要素を探す方法
Google Maps APIを使ってGoogle Mapsをウェブサイトに表示させる方法
WordPressのプラグインはどれを入れたら良い?とりあえず最初に導入をオススメするプラグイン一覧
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
1Passwordの開発者向け機能(SSH Agent / Environments / 1Password CLI / Developer Watchtower)
Default Folder Xで保存ダイアログ内のファイルリストにフォーカスする方法
Obsidianで整理した知識をAnkiで定着させる方法
Figma × Keyboard Maestroでどこまで効率化できる?
マウス操作の完成度が高いウインドウリサイズアプリ「Magnet」
Macで複数ディスプレイを使っている場合に便利な設定集
AppCleanerでMacアプリを関連ファイルごと完全に削除する
操作に没頭できる!Firefox版 Arcのようなブラウザ「Zen Browser」
chezmoi(シェモア)で始めるdotfiles管理
GitHubの通知を見逃さない!通知に特化したアプリ「Gitify」