こんにちは、なかにしです。
Sass、書いていきます!わくわく🐱
まずはHTMLの準備
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Samples</title>
    <link rel="stylesheet" href="./css/reset.css" />
    <link rel="stylesheet" href="./css/sample.css" />
  </head>
  <body>
    <div class="goodmorning">おはよう。</div>
    <div class="hello">こんにちは。</div>
    <div class="googevening">こんばんは。</div>
  </body>
</html>linkタグでコンパイルされたCSS & 事前に用意したreset.cssを読み込みます。
bodyの中は適当に挨拶を表示するdivを作成しました。
▽現在がこちら

準備完了!
やっていきます!
Sassの基礎
①変数の使い回し
SassではJSやPHPと同じように、変数に値を入れて使い回すことができます。
色を変数に入れて使い回すことが多いです。
$main_color: rgb(231, 114, 114);
.goodmorning{
  color: $main_color;
}
.hello{
  color: $main_color;
}
.googevening{
  color: $main_color;
}$main_color に赤色を入れました。
これでいちいち指定しなくても$main_color で使い回せます。
▽バッチリ赤色ですね。

②入れ子の指定
 <body>
    <div class="goodmorning">
      <p>おはよう。</p>
    </div>
    <p>やほ~</p>
  </body>「goodmorningクラス配下のpのみ」に色をつけたいときは入れ子にします。
$sub_color: rgb(66, 205, 240);
.goodmorning{
  p{
    color: $sub_color;
  }
}▽結果

隣接セレクタ、直下セレクタなどもCSSと同じように書けます。
ここで問題です!!
▽現状のHTMLはこちら
  <body>
    <div class="morning">
      <p>おはよう。</p>
      <div class="morning__hello">
        <p>こんにちは。</p>
        <p>こんにちは。</p>
      </div>
      <div class="morning__evening">こんばんは。</div>
      <div class="morning__vening">こんばんは。</div>
      <div class="morning__evening">こんばんは。</div>
    </div>
    <p>やほ~</p>
  </body>
これに以下の指定をしたとき、色はどうなるでしょうか?
$main_color: rgb(231, 114, 114);
$sub_color: rgb(66, 205, 240);
.morning{
  >p{
    color: $main_color;
  }
  .morning__hello{
    +.morning__evening{
      color: $sub_color;
    }
  }
}正解は…
▽こちらです!

③疑似要素の指定
  <body>
    <button class="btn">ボタンです。</button>
  </body>hoverやbeforeなどの疑似要素は&で指定します。
$main_color: rgb(231, 114, 114);
$sub_color: rgb(66, 205, 240);
.btn{
  border: 1px solid #FFFFFF;
  color: #FFFFFF;
  background-color: $main_color;
  transition: .5s;
  
  &:hover{
    border: 1px solid $main_color;
    color: $main_color;
    background-color: #FFFFFF;
  }
}④if文、for文
▽if文
  <body>
    <button class="btn">ボタンです。</button>
  </body>$a: "aaa";
.btn{
  @if $a == "aaa"{
    background-color:$main_color;
  }
}▽for文(ちょっと癖ある)
  <body>
    <button class="btn1">ボタンです。</button>
    <button class="btn2">ボタンです。</button>
    <button class="btn3">ボタンです。</button>
    <button class="btn4">ボタンです。</button>
  </body>@for $i from 1 through 4{
  .btn#{$i} {
    width: 100px * $i;
  }
}▽コンパイル後
.btn1 {
  width: 100px;
}
.btn2 {
  width: 200px;
}
.btn3 {
  width: 300px;
}
.btn4 {
  width: 400px;
}⑤関数
▽文法
// 宣言
@mixin 関数名(引数1, 引数2, ...) {
  関数の中身
}
// 使い方
@include 関数名(引数1, 引数2, ...);▽実践!
  <body>
    <div class="sample">サンプル</div>
  </body>$pc_color: rgb(231, 114, 114);
$tb_color: rgb(66, 205, 240);
$sp_color: rgb(97, 243, 182);
$pc-width: 1025px;
$tb-width: 600px;
@mixin screen($width){
  @media screen and (min-width: $width) {
    @content;
  }
}
.sample{
  background-color: $sp_color;
  @include screen($tb-width){
    background-color: $tb_color;
  }
  @include screen($pc-width){
    background-color: $pc_color;
  }
}モバイルファーストでブレイクポイントをサクッと設定しました!
まだ慣れていないですが、何かかっこいいのは伝わります。
今後のブレイクポイントの指定は絶対これ使おーっと!
@mixin screen($width) の部分は 
JSで言うところの function scree(width) って感じですね!
FLOCSSとBEM
流行りの FLOCSS × BEM で適当に作ってまとめてみました!
▽ボタンを押すと図形がどんどん急いで動いていくという謎アニメーションです。
アニメーションを入れたのは jsフォルダの分け方も経験しておきたかったからです🙌
▽今回、フォルダはこんな感じで分けました
scss/
├─ foundation/
│ ├─ _base.scss
│ ├─ _reset.scss
│ ├─ _variable.scss
│ ├─ _mixin.scss
│ └─ _index.scss
├─ layout/
│ ├─ _l-header.scss
│ ├─ _l-main.scss
│ ├─ _l-footer.scss
│ └─ _index.scss
├─ object/
│ ├─ component/
│ │ ├─ _c-button.scss
│ │ ├─ _c-circle.scss
│ │ └─ _index.scss
│ ├─ project/
│ │ ├─ _p-sample.scss
│ │ └─ _index.scss
│ └─ utility/
│    └─ _index.scss
└─ style.scss王道のまとめ方ですね。
各index.scssで@forwardしてstyle.scssで一括@useしてコンパイルしてます。
▽誰にも需要ないけど一応index.htmlの中身乗せときます。
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Samples</title>
    <link rel="stylesheet" href="./css/style.css" />
    <script src="./js/index.js"></script>
  </head>
  <body>
    <header class="l-header">
      <p>株式会社なかにし</p>
      <button class="l-header__button c-button">メニュー</button>
    </header>
    <main class="l-main">
      <div class="p-sample">
        <canvas width="500" height="300" class="c-circle js-drawCircle">canvas要素をサポートしていません。</canvas>
        <p>どんどん急ぐよ!</p>
        <button onclick="drawCircle()" class="c-button js-button">いくぜ!</button>
      </div>
    </main>
  </body>
</html>そういえばcanvas要素のy軸って上が+かと思ってましたが、下が+なんですね…
作った図形が遙か上に飛んでいって笑いました。
おわりに
今回はSassの使い方についてまとめました!
今まではCSS × BEM ばかり使っていましたが、Sassの便利さを理解したので
今後は Sass × FLOCSS × BEM を積極的に使っていきます!!
今回はここまで!
Enjoy Hacking!!



